书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客
3.2.1 实验拓扑图及环境
拓扑图及配置如图3-5所示。
3.2.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 -a
[root@vmsX ~]# sed -i '/swap/s/UUID/#UUID/g' /etc/fstab
复制代码
步骤4:在所有节点上配置好yum源。
[root@vmsX ~]# rm -rf /etc/yum.repos.d/* ; wget -P /etc/yum.repos.d/ ftp://ftp.rhce.cc/k8s/*
[root@vmsX ~]#
...
[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 ~]#
复制代码
步骤7:在所有节点上安装软件包
[root@vmsX ~]# yum install -y kubelet-1.21.1-0 kubeadm-1.21.1-0 kubectl-1.21.1-0 --disable excludes=kubernetes
已加载插件: fastestmirror
...
更新完毕:
yum.noarch 0:3.4.3-167.el7.centos
完毕!
[root@vmsX ~]#
复制代码
步骤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
复制代码
3.2.3 安装master
下面的操作是在vms10上进行的,目的是把vms10配置成master。
步骤1:在master上执行初始化。
[root@vms10 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.1 --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 KUBE CONFIG=/etc/ku bernet es/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 524g6o.cpzywevx4ojems69 \
--discovery-token-ca-cert-hash sha256:6b19ba9d3371c0ac474e8e70569dfc8ac93c76fd841ac8df025a43d49d8cd860
[root@vms10 ~]#
复制代码
步骤2:复制kubeconfig文件。
[root@vms10 ~]# mkdir -p $HOME/.kube
[root@vms10 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/confg
[root@vms10 ~]# sudo chown $(id-u):$(id-g) $HOME/.kube/config
[root@vms10 ~]#
复制代码
3.2.4 配置worker加入集群
下面的步骤是把vms11和vms12以worker的身份加入kubernetes集群。
步骤1:在vms11和vms12分别执行以下命令。
[root@vmsX ~]# kubeadm join 192.168.26.10:6443 --token w6v53s.16xt8ssokjuswlzx --discovery-token-ca-cert-hash sha256:6b19ba9d3371coac474e8e70569dfc8ac93c76fd841ac8df025a43d49d8cd860
[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 2m27s v1.21.1
vms11.rhce.cc NotReady <none> 21s v1.21.1
vms12.rhce.cc NotReady <none> 19s v1.21.1
[root@vms10 ~]#
复制代码
从这里可以看到所有节点的状态为NotReady,我们需要安装calico网络才能使得k8s正常工作。
3.2.5 安装calico网络
因为在整个kubernetes集群里,pod都是分布在不同的主机上的,为了实现这些pod的跨主机通信,必须要安装CNI网络插件,这里选择calico网络。
步骤1:在master上下载配置calico网络的yaml。
[root@vms10 ~]# wget https://docs.projectcalico.org/v3.19/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_FILELOGGING
value: "true"
复制代码
步骤3:提前下载所需要的镜像。
查看此文件用哪些镜像。
[root@vms10 ~]# grep image calico.yaml
image: calico/cni:v3.19.1
image: calico/cni:v3.19.1
image: calico/pod2daemon-flexvol:v3.19.1
image: calico/node:v3.19.1
image: calico/kube-controllers:v3.19.1
[root@vms10 ~]#
复制代码
在所有节点(包括master)上把这些镜像下载下来。
[root@vmsX ~]# for i in calico/cni:v3.19.1 calico/pod2daemon-flexvol:v3.19.1 calico/node:v3.19.1 calico/kube-controllers:v3.19.1 ; do docker pull $i ; done
...大量输出...
[root@vmsX ~]#
复制代码
步骤4:安装calico网络。
在master上执行如下命令。
[root@vms10 ~]# kubectl apply -f calico.yaml
... 大量输出 ...
[root@vms10 ~]#
复制代码
步骤5:验证结果。
再次在master上运行命令kubectl get nodes,查看运行结果。
[root@vms10 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms10.rhce.cc Ready control-plane, master 13m v1.21.1
vms11.rhce.cc Ready <none> 11m v1.21.1
vms12.rhce.cc Ready <none> 11m v1.21.1
[root@vms10 ~]#
复制代码
可以看到所有节点的状态已经变为Ready了。