安装kubernetes v1.21.0

1.1 实验拓扑图及环境

完成本章及后续的实验我们需要三台机器,1台master,2台worker,拓扑图及配置如图1-1所示。

安装kubernetes v1.21.0

图1-1 实验拓扑图

机器的配置如表格1-1所示。

表格1-1 练习环境主机名的设置

主机名 IP地址 内存需求 操作系统版本 角色
vms10.rhce.cc 192.168.26.10 4G centos7.4 master
vms11.rhce.cc 192.168.26.11 4G centos7.4 worker1
vms12.rhce.cc 192.168.26.12 4G centos7.4 worker2

1.2 实验准备

在安装kubernetes之前,需要设置好yum源,关闭selinux及关闭swap等准备工作。下面的准备操作都是在所有的节点上做的。

 

步骤1:建议所有节点使用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.10     vms10.rhce.cc         vms10

192.168.26.11     vms11.rhce.cc         vms11

192.168.26.12     vms12.rhce.cc         vms12

[root@vmsX ~]#

步骤2:在所有节点上配置防火墙和关闭selinux。

[root@vmsX ~]# firewall-cmd --get-default-zone

trusted

[root@vmsX ~]# getenforce

Disabled

[root@vmsX ~]#

步骤3:在所有节点上关闭swap,并注释掉/etc/fstab里swap相关条目。

[root@vms10 ~]# swapon -s

文件名 类型 大小 已用 权限

/dev/sda2            partition 10485756 12 -1

[root@vmsX ~]# swapoff /dev/sda2

[root@vmsX ~]# sed -i '/swap/s/UUID/#UUID/g' /etc/fstab

 

步骤4:在所有节点上配置好yum源(请提前安装好wget,再执行下面的操作)。

[root@vmsX ~]# rm -rf /etc/yum.repos.d/* ; wget -P /etc/yum.repos.d/ ftp://ftp.rhce.cc/k8s/*

--2021-04-11 15:57:05--  ftp://ftp.rhce.cc/k8s/*

=> “/etc/yum.repos.d/.listing”

...

[root@vmsX ~]#

步骤5:在所有节点安装并启动docker,并设置docker自动启动。

yum install docker-ce -y

systemctl enable docker --now

 

步骤6:在所有节点设置内核参数。

[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 ~]#

注意:如果发现如如1-2所示的错误。

安装kubernetes v1.21.0

图1-2 加载模块报错

则通过modprobe br_netfilter解决问题。

基本上,先安装docker并启动docker,再修改参数是不会出现上述问题的。

步骤7:在所有节点上安装软件包。

[root@vmsX ~]# yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0  --disableexcludes=kubernetes

已加载插件:fastestmirror

......

更新完毕:

yum.noarch 0:3.4.3-167.el7.centos

完毕!

[root@vms10 ~]#注意:安装时如果没有指定版本则安装的最新版本。

步骤8:在所有节点上启动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 ~]#

注意:此时kubelet的状态为activating

1.3 安装master

下面的操作是在vms10上做的,目的是把vms10配置成master。

步骤1:在master上执行初始化。

[root@vms10 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.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:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

...输出...

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.26.10:6443 --token nty5vx.vy3l3lamlm5knrby \

--discovery-token-ca-cert-hash sha256:bb2059cbe3d51ae9cf914db3298a4a9b468e539ed57a6f9d9dcb19d50bb5a93d

[root@vms10 ~]#

上面输出提示安装完之后要干嘛,按上面的提示分别执行每条命令。

注意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.19.2 --pod-network-cidr=10.244.0.0/16。

(当然要先安装对应的kubelet的版本)

 

步骤2:复制kubeconfig文件。

[root@vms10 ~]# mkdir -p $HOME/.kube

[root@vms10 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@vms10 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@vms10 ~]#

上面的提示中,kubeadm join 192.168.26.10:6443 --token 524g6o.cpzywevx4ojems69 \

    --discovery-token-ca-cert-hash sha256:6b19ba9d3371c0ac474e8e70569dfc8ac93c76fd841ac8df025a43d49d8cd860

是用于node加入到kubernetes集群的命令,如果忘记了保存此命令的话,可以用如下命令获取:

[root@vms10 ~]# kubeadm token create --print-join-command

kubeadm join 192.168.26.10:6443 --token w6v53s.16xt8ssokjuswlzx     --discovery-token-ca-cert-hash sha256:6b19ba9d3371c0ac474e8e70569dfc8ac93c76fd841ac8df025a43d49d8cd860

[root@vms10 ~]#

1.4 配置node加入集群

下面的步骤是把node1和node2以worker的身份加入到kubernetes集群。

 

步骤1:在node11和node12分别执行。

[root@vmsX ~]# kubeadm join 192.168.26.10:6443 --token nty5vx.vy3l3lamlm5knrby --discovery-token-ca-cert-hash sha256:bb2059cbe3d51ae9cf914db3298a4a9b468e539ed57a6f9d9dcb19d50bb5a93d

[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 ~]#

 

步骤2:切换到master上,可以看到所有节点已经加入集群了。

[root@vms10 ~]# kubectl get nodes

NAME            STATUS     ROLES                  AGE     VERSION

vms10.rhce.cc   NotReady   control-plane,master        119s      v1.21.0

vms11.rhce.cc   NotReady   <none>                   19s       v1.21.0

vms12.rhce.cc   NotReady   <none>                   16s       v1.21.0

[root@vms10 ~]#

从这里可以看到所有节点的状态为NotReady,我们需要安装calico网络才能使得k8s正常工作。

1.5 安装calico网络

因为在整个kubernetes集群里,pod都是分布在不同的主机上的,为了实现这些pod的跨主机通信所以我们必须要安装CNI网络插件,这里选择calico网络。

 

步骤1:在master上下载配置calico网络的yaml。

[root@vms10 ~]# wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml

... 输出 ...

[root@vms10 ~]#

 

步骤2:修改calico.yaml里的pod网段。

把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"

把两个#及#后面的空格去掉,并把192.168.0.0/16改成10.244.0.0/16

# 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"

 

改的时候请看清缩进关系,即这里的对齐关系。

 

步骤5:提前下载所需要的镜像。

查看此文件用哪些镜像:

[root@vms10 ~]# 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@vms10 ~]#

在所有节点(包括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 ~]

 

步骤3:安装calico网络。

在master上执行如下命令:

[root@vms10 ~]# kubectl apply -f calico.yaml

...大量输出...

[root@vms10 ~]#

 

步骤4:验证结果。

再次在master上运行命令 kubectl get nodes查看运行结果:

[root@vms10 ~]# kubectl get nodes

NAME         STATUS   ROLES                    AGE     VERSION

vms10.rhce.cc   Ready    control-plane,master        3m27s    v1.21.0

vms11.rhce.cc   Ready    <none>                   107s      v1.21.0

vms12.rhce.cc   Ready    <none>                   104s      v1.21.0

[root@vms10 ~]#

可以看到所有节点的状态已经变为是Ready了。

相关新闻

                                                                                                                                    RHCE9学习指南连载,点击阅读