安装kubernetes v1.19.0
实验拓扑图及环境
实验准备
建议所有节点使用Centos7.4,在所有节点上同步/etc/hosts
[root@vmsX ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.61 vms61.rhce.cc vms61
192.168.26.62 vms62.rhce.cc vms62
192.168.26.63 vms63.rhce.cc vms63
[root@vmsX ~]#
在所有节点上配置防火墙和关闭selinux
[root@vmsX ~]# firewall-cmd --get-default-zone
trusted
[root@vmsX ~]# getenforce
Disabled
[root@vmsX ~]#
在所有节点上关闭swap,并注释掉/etc/fstab里swap相关条目:
[root@vmsX ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/sda2 partition 10485756 12 -1
[root@vmsX ~]# swapoff /dev/sda2
[root@vmsX ~]# sed -i '/swap/s/UUID/#UUID/g' /etc/fstab
在所有节点上配置好yum源(请提前安装好wget,再执行下面的操作)
[root@vmsX ~]# rm -rf /etc/yum.repos.d/* ; wget -P /etc/yum.repos.d/ ftp://ftp.rhce.cc/k8s/*
--2020-08-28 12:38:36-- ftp://ftp.rhce.cc/k8s/*
=> “/etc/yum.repos.d/.listing”
...
[root@vmsX ~]#
在所有节点安装并启动docker,并设置docker自动启动。
yum install docker -y
systemctl enable docker --now
在所有节点设置相关属性
[root@vmsX ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@vmsX ~]#
让其立即生效:
[root@vmsX ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@vmsX ~]#
注意:如果发现如下错误:
则通过modprobe br_netfilter解决问题。
基本上,先安装docker并启动docker,再修改参数是不会出现上述问题的。
在所有节点上安装软件包:
[root@vmsX ~]# yum install -y kubelet-1.19.0-0 kubeadm-1.19.0-0 kubectl-1.19.0-0 --disableexcludes=kubernetes
已加载插件:fastestmirror
......
更新完毕:
完毕!
[root@vmsX ~]#
注意:安装时如果没有指定版本则安装的最新版本。
在所有节点上启动kubelet,并设置开机自动启动:
[root@vmsX ~]# systemctl restart kubelet ; systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@vmsX ~]#
安装master
在安装过程中,可以通过—image-repository来指定镜像仓库:
[root@vms61 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.19.0 --pod-network-cidr=10.244.0.0/16
但是在写本文档的时候,阿里云镜像里并没有k8s1.19的镜像,所以这里提前下载下来,并事先导入。
在所有节点上导入已经下载好的镜像:
[root@vms6X ~]# docker load -i k8s-1.19-img.tar
…大量输出…
[root@vms6X ~]#
[root@vms61 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.19.0 --pod-network-cidr=10.244.0.0/16
...输出...
Then you can join any number of worker nodes by running the following on each as root:
...输出...
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.26.61:6443 --token rzf4r7.y50x0r5zrrkvllao \
--discovery-token-ca-cert-hash sha256:227bf56c53a225da581a414d2a15e6afa3e3b4e1b57553c0eedee843b158f177
[root@vms61 ~]#
上面输出提示安装完之后要干嘛,按上面的提示分别执行每条命令:
[root@vms61 ~]# mkdir -p $HOME/.kube
[root@vms61~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@vms61 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@vms61 ~]#
上面的提示中,kubeadm join 192.168.26.61:6443 --token rzf4r7.y50x0r5zrrkvllao \
--discovery-token-ca-cert-hash sha256:227bf56c53a225da581a414d2a15e6afa3e3b4e1b57553c0eedee843b158f177
是用于node加入到kubernetes集群的命令,如果忘记了保存此命令的话,可以用如下命令获取:
[root@vms61 ~]# kubeadm token create --print-join-command
......
kubeadm join 192.168.26.61:6443 --token q57xry.gxra4khr9hg5ylj0 --discovery-token-ca-cert-hash sha256:227bf56c53a225da581a414d2a15e6afa3e3b4e1b57553c0eedee843b158f177 [root@vms61 ~]#
注意1:这里用--image-repository选项指定使用阿里云的镜像
注意2:--pod-network-cidr=10.244.0.0/16 #这里指的是pod的网段
注意3:如果想安装其他版本的话,直接在--kubernetes-version里指定:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.2 --pod-network-cidr=10.244.0.0/16
(当然要先安装对应的kubelet的版本)
配置node加入集群
在node11和node12分别执行
[root@vmsX ~]# kubeadm join 192.168.26.61:6443 --token q57xry.gxra4khr9hg5ylj0 --discovery-token-ca-cert-hash sha256:227bf56c53a225da581a414d2a15e6afa3e3b4e1b57553c0eedee843b158f177
[preflight] Running pre-flight checks
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
...输出...
Run 'kubectl get nodes' on the master to see this node join the cluster.
[root@vmsX ~]#
切换到master上,可以看到所有节点已经加入集群了:
从这里可以看到所有节点的状态为NotReady,我们需要安装calico网络才能使得k8s正常工作。
安装calico网络
在master上下载配置calico网络的yaml
[root@vms61 ~]# wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
... 输出 ...
[root@vms61 ~]#
把calico.yaml里pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段,
直接用vim编辑打开此文件查找192,按如下标记进行修改:
no effect. This should fall within --cluster-cidr
.
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
# Disable file logging so kubectl logs
works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
把两个#去掉
no effect. This should fall within --cluster-cidr
.
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
# Disable file logging so kubectl logs
works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
改的时候请看清缩进关系,即这里的对齐关系。
查看此文件用哪些镜像:
[root@vms61 ~]# grep image calico.yaml
image: calico/cni:v3.14.0
image: calico/cni:v3.14.0
image: calico/pod2daemon-flexvol:v3.14.0
image: calico/node:v3.14.0
image: calico/kube-controllers:v3.14.0
[root@vms61 ~]#
在所有节点(包括master)上把这些镜像下载下来:
[root@vmsX ~]# for i in calico/cni:v3.14.0 calico/pod2daemon-flexvol:v3.14.0 calico/node:v3.14.0 calico/kube-controllers:v3.14.0 ; do docker pull $i ; done
...大量输出...
[root@vmsX ~]
在master上安装calico网络:
[root@vms61 ~]# kubectl apply -f calico.yaml
...大量输出...
[root@vms61 ~]#
再次在master上运行命令 kubectl get nodes查看运行结果:
[root@vms61 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms61.rhce.cc Ready master 19m v1.19.0
vms62.rhce.cc Ready <none> 16m v1.19.0
vms63.rhce.cc Ready <none> 16m v1.19.0
[root@vms61 ~]#
可以看到所有节点的状态已经变为是Ready了。