1、为了实验,在华为云申请的两台ubantu云主机,通过动态BGP会分给你两个公网IP。
建议你最好在虚拟机里跑一跑脚本,再做实验。这样会比较省钱。
在此感谢华为云提供的按需计费服务,整个实验做下来才花了不到一块钱。
你没有听错,真的就不到一块钱,最后有图为证。

部署环境:
两台ubantu云主机:一台master: 192.168.0.92, 一台node: 192.168.0.204
系统版本:ubuntu 18.04.4 LTS
内核版本:4.15.0-91-generic
docker-ce版本:最新的19.03.6
k8s版本:最新的v1.18.2

可以看到什么命令都没有。

在这里插入图片描述

2、查看ubuntu的系统版本和内核版本
root@master:~# lsb_release -a
root@master:~# uname -a

在这里插入图片描述

3、这里要注意,k8s对于加入集群的节点的主机配置是有需求的。这里我把官网的最低配置要求复制在这里了。
一定要按要求来,否则中途会报错的。
详见官网https://kubernetes.io/zh/docs/setup/independent/create-cluster-kubeadm/

One or more machines running a deb/rpm-compatible OS, for example Ubuntu or CentOS.
(一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS,我个人建议用Ubuntu)
2 GB or more of RAM per machine. Any less leaves little room for your apps.
(每台机器 2 GB 以上的内存,内存不足时应用会受限制)
2 CPUs or more on the master.
(master节点至少2个CPU)
Full network connectivity among all machines in the cluster. A public or private network is fine.
(集群里所有的机器有完全的网络连接,公有网络或者私有网络都可以)

4、
#检查防火墙
sudo ufw status
Status: inactive
#临时禁用交换分区swap
sudo swapoff -a
#永久禁用交换分区swap,进入fstab注释掉swap那一行
vim /etc/fstab
在这里插入图片描述

5、配置阿里源
root@master:/etc/apt# vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
在这里插入图片描述

6、获取到最新的软件包
root@master:~# apt-get update
在这里插入图片描述

7、更新包,升级已安装的所有软件包,升级之后的版本就是本地索引里的,因此,在执行 upgrade 之前一定要执行 update, 这样才能是最新的。
root@master:~# apt-get upgrade
在这里插入图片描述

8、安装docker
apt-get install docker.io
在这里插入图片描述

9、将docker重启并加入开机启动项
root@master:~# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
root@master:~# systemctl start docker

10、
root@master:~# docker version
在这里插入图片描述

11、测试docker,去拉一个hello-world的简单镜像并创建容器。
root@master:~# docker run hello-world
在这里插入图片描述

12、查看容器及镜像
root@master:~# docker image ls
root@master:~# docker ps -a
在这里插入图片描述

至此docker安装完成了。

安装k8s的三种重要组件
kubeadm : 用来初始化集群的指令
kubelet : 在集群中的每个节点上用来启动 pod 和 container 等
kubectl: 用来与集群通信的命令行工具

阿里云官方推荐配置:
13、
apt-get update && apt-get install -y apt-transport-https
在这里插入图片描述

14、
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
在这里插入图片描述

15、
cat </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
在这里插入图片描述

16、
apt-get update
在这里插入图片描述

17、安装组件包,注意一会要查看组件的版本号,一定要统一。
apt-get install -y kubelet kubeadm kubectl
在这里插入图片描述

18、
root@master:~# kubeadm version
root@master:~# kubelet version

19、
查看kubeadm所有历史版本。可以看到安装得都是最新的包。
root@master:~# apt-cache madison kubeadm
在这里插入图片描述

20、查看kubeadm依赖的镜像包,
root@master:~# kubeadm config images list
W0502 20:04:34.038948 30336 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.18.2
k8s.gcr.io/kube-controller-manager:v1.18.2
k8s.gcr.io/kube-scheduler:v1.18.2
k8s.gcr.io/kube-proxy:v1.18.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
在这里插入图片描述

21、设置系统环境变量
root@master:~# export KUBECONFIG=/etc/kubernetes/admin.conf
20、重启kubelet服务
root@master:~# systemctl daemon-reload
root@master:~# systemctl restart kubelet.service

22、
在执行kubeadm init时,有一步是连接到Google的服务器上去把k8s所需要的docker镜像给Pull下来…然后,
因为有墙的缘故,你是一定会卡死在这里的。卡死信息是timeout超时。那么有没有解决方案呢?当然是有的!
你可以把主节点所依赖的Docker镜像在kubeadm init之前,先给pull到本地终端。然后你在init的时候就可以愉快地跳过pull镜像的环节,成功安装了。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.2
在这里插入图片描述

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.2

23、使用docker tag给这些镜像重命名。重命名时要符合镜像名称+版本号的规范。
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.2 k8s.gcr.io/kube-controller-manager:v1.18.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.2 k8s.gcr.io/kube-scheduler:v1.18.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.2 k8s.gcr.io/kube-proxy:v1.18.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2
图919

24、再删除最先pull的镜像包
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
在这里插入图片描述

25、和18步比对一下,都是k8s依赖的包了。
#docker image ls,
在这里插入图片描述

26、初始化集群,只在Master节点上运行,不要在note节点上运行,切记!
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.92 --kubernetes-version=v1.18.2 --ignore-preflight-errors=Swap
在这里插入图片描述

27、
我们执行kubeadm init时,最后一行是:
kubeadm join 192.168.0.92:6443 --token c8kiqh.u26a47yoltudin5g
–discovery-token-ca-cert-hash sha256:b733bb25446f23408c5e4fea98b040df4fe7a56d0a9ace3d95a0c905b97c74cb
输出的kubeadm join 命令及之后的一串token、哈希值,要保存好。它是用来添加新的节点的。
这个给出的kubeadm join后的hash值有效期是24小时,24小时过后便失效。
可以使用 kubeadm token list 来查看当前的 token 表
如果超过了24小时,又准备继续添加新的节点,那么就需要在master节点使用如下命令,生产环境一定会超过的,随时会加入新的node。
kubeadm token create --print-join-command

在这里插入图片描述

28、
在主节点执行kubectl get nodes命令检查注册情况,看到状态是NotReady。

root@master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ecs-1386 NotReady master 21m v1.18.2
在这里插入图片描述

29、使用journalctl -f kubelet查看日志,是因为容器网络未配置好,安装使用calico即可。
在这里插入图片描述

30、
配置容器网络。稍等一会,等相应的yaml成功创建为pod并启动服务,再使用 kubectl get nodes 就会看到节点状态变为Ready啦!
root@k8s-master:~# kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
在这里插入图片描述

31、kubectl命令需要使用kubernetes-admin来运行,使kubectl为非根用户工作。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

32、根用户则运行:
vim /etc/profile
末尾添加:
export KUBECONFIG=/etc/kubernetes/admin.conf

33、检查master节点状态,都正常了。
root@master:~# kubectl get nodes -o wide
root@master:~# kubectl get po --all-namespaces -o wide
在这里插入图片描述

34、登录到node节点,每一个node节点都要安装docker、k8s组件及组件依赖的镜像包。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

35、节点加入集群。
node节点直接执行:
kubeadm join 192.168.0.92:6443 --token c8kiqh.u26a47yoltudin5g
–discovery-token-ca-cert-hash sha256:b733bb25446f23408c5e4fea98b040df4fe7a56d0a9ace3d95a0c905b97c74cb
在这里插入图片描述

36、再次检查:
root@master:~# kubectl get nodes -o wide
root@master:~# kubectl get po --all-namespaces -o wide
在这里插入图片描述

完美收官,你可以用k8s集群平台来搞事情了!

37、做完实验,要记得删除华为云主机,同时要勾选释放公网IP和数据盘,否则你在睡梦中都一直收你的money。
在这里插入图片描述

38、说了以图为证,是不是很nice。
在这里插入图片描述

官方介绍:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

历时一周,踩了很多坑才搭建起来,喜欢这篇博文的朋友请帮忙点赞,谢谢。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐