实验手册02-部署集群-修正

修正说明: 我们在上节课的实践过程中,刚好碰见阿里云的镜像站出现故障,导致实验进程受阻,本手册的修正内容为将阿里云的镜像站更换为华为镜像站,包括:CentOS源、Docker源、Kubernetes源。 请同学们多注意手册中的提示,有些步骤是可以跳过的。

本手册包含以下内容:

  1. 安装 Docker
  2. 安装 Kubernetes
  3. 部署 Kubernetes Cluster

这个作业要提交两张图片,放在一个压缩包内,压缩包的命名参考学习通平台上的作业要求。

导入课上提供的 VMware 镜像,名为 k8s-master 将导入的虚拟机克隆两份,分别为 k8s-node1k8s-node2 修改三个镜像的IP:

  • k8s-master:192.168.169.[学号]
  • k8s-node1: 192.168.169.[学号-1]
  • k8s-node1: 192.168.169.[学号+1]

如果你的学号是:20212080101 则题目中的 [学号] 为 101,[学号-1] 为 100,[学号+1] 为102

网络配置完成后,保存类似下图的截图,文件名为图片1

作业图片1

图片中执行了两个命令,分别是 ip aping www.baidu.com 这两个命令要放在一张图内

后面的《初始化Master》小节中,创建集群成功后的图片

作业图片2

一、添加 Docker 软件源(跳过不做) 以下两条命令添加华为云的 Docker 源

bash

wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

text

sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

二、安装 Docker 的软件包

bash

yum install docker-ce

三、启动 Docker

bash

systemctl enable docker
systemctl start docker

上面这两条命令中:

  1. 第一条命令设置了 Docker 的开机自动启动
  2. 第二命命令启动 Docker

四、修改 Docker 加速镜像,该步骤是为了加快下载 Docker 镜像的速度。

bash

cat <<EOF >/etc/docker/daemon.json
{
	"registry-mirrors": [
		"https://docker.mirrors.ustc.edu.cn"
	]
}
EOF

五、重启 Docker

bash

systemctl daemon-reload
systemctl restart docker

注解: 重启一个服务只需要 systemctl restart <服务名称> 就可以了,为什么还要 systemctl daemon-reload? 答案:我们在修改某个服务的配置文件后,需要 daemon-reload 来重新加载它,以便让 systemctl 读取到最新的配置文件。

请同学们在==课上==跳过以下的一、二两步

一、备份旧的 Kubernetes 源(跳过不做)

bash

cp /etc/yum.repos.d/kubernetes.repo  /etc/yum.repos.d/kubernetes.repo.bak

/etc/yum.repo.d/ 这个文件夹内,所有后缀名为 .repo 的文件都被会 yum 工具当作软件源的配置文件,而其他后续的文件都会被忽略

二、添加华为的软件源(跳过不做)

bash

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
name=Kubernetes 
baseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=1 
repo_gpgcheck=0
gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

三、安装 Kubernetes 的三个软件包:kubeletkubeadmkubectl

bash

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

四、启动 kubelet

bash

systemctl enable --now kubelet

==查看==需要的镜像(可选操作)

bash

kubeadm config images list

镜像列表
图片中展示的是创建集群需要的镜像文件,我们在执行后面的第五步时,会自动下载这些镜像

五、从阿里源获取 Docker 镜像

bash

kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

存储这些镜像的服务器在国外,为了减少下载时的等待时间,我们在上条命令中使用 --image-repository 参数指定从国内的阿里云服务器下载镜像

上面这条命令,执行成功后,会有如下显示:

拉取镜像

思考:有些命令执行后没有提示,我们如何知道它是不是执行成功了? 答案:使用命令echo $? 可以查看上条命令是不是执行成功,返回0代表成功 两个例子:

执行失败
执行成功返回0


==如果==这条命令失败并提示以下错误:

报错信息

如果你没有遇到这个错误,请忽略这两条横线中间的内容。

执行 vim /etc/containerd/config.toml 修改配置文件:

修改配置文件
删除 disabled_plugins = ["cri"] 这一行,默认是第15行。

修改文件后,执行以下命令将 containerd 服务重启

text

systemctl restart containerd

重新获取镜像(时间会比较漫长)

bash

kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

成功后有如下提示:

拉取镜像成功


一、执行以下命令进行初始化

bash

kubeadm init --apiserver-advertise-address 10.0.0.21 --pod-network-cidr=10.244.0.0/16 --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

上面这条命令中的 —apiserver-advertise-address 10.0.0.21 需要改为你自己的带学号的 IP 地址

初始化成功后,会出现如下提示:(操作成功后,截图保存,作为作业中的第二张图片,文件名为图片2

Master初始化成功

也有可能,你遇到如下问题:

20230910234835

这是由于 Kubernetes 的 cgroups driver 和 Docker 不一致,解决办法: 修改Docker配置文件:

bash

vim /etc/docker/daemon.json

增加如下内容:(一定要注意整个文件中的标点符号!!!)

text

"exec-opts": ["native.cgroupdriver=systemd"]
配置文件

重启相关服务

bash

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

重新初始化Master

text

kubeadm reset
kubeadm init --apiserver-advertise-address 10.0.0.21 --pod-network-cidr=10.244.0.0/16 --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

这两条命令,第一条是重置刚才失败带来的影响 第二条是初始化


二、配置 kubectl 刚才我们初始化 Master 成功后,在提示信息中已经指导了我们后续如何做:

20230910234915

再次强调,大家执行完任何一条命令后,都要多注意执行后面的提示信息。

首先切换到一个普通用户

bash

su centos

我们先配置一下 kubectl 并实现命令自动补全:

bash

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
echo "source <(kubectl completion bash)" >> ~/.bashrc

注解: 在 Linux 环境下,以 . 开头的文件是隐藏文件 $HOME 是存储着用户家目录的环境变量,可以使用 echo $HOME 命令查看变量内容

一、回到 root 用户

text

su root

使用 XFtp 工具将 flannel.v0.22.2.tarkube-flannel.yml 文件传送到虚拟机中。

二、导入镜像

bash

docker load < ./flannel.v0.22.2.tar 

和课本不一样? 由于国内的网络不方便访问 Docker 官方的镜像仓库,我们使用已经提前下载好的 Docker 镜像

查看导入的镜像ID

bash

docker images

查看镜像ID
给镜像打标签

bash

docker tag d73868a08083 docker.io/flannel/flannel:v0.22.2

三、部署flannel

切换到普通用户

bash

su centos
cd

把需要的文件拿过来,并修改权限(注意第一条命令最后是个点,代表当前目录)

bash

sudo mv /root/kube-flannel.yml .
sudo chmod centos:centos ./kube-flannel.yml

部署 flannel(一定要用普通用户执行)

bash

kubectl apply -f ./kube-flannel.yml

和课本不一样? 由于网络问题,我们直接使用之前下载好的配置文件,而不是从 Github 下载。

三、接下来检查一下状态,确保刚才的操作都成功了

bash

kebectl get pod -A
get pod

四、修改防火墙的配置,使防火墙对6443端口进行放行

bash

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent

为什么要放行6443端口? 后续操作中,node和master之间的通信需要通过该端口

修改后重载一下防火墙

bash

sudo firewall-cmd --reload

五、将另外两个节点加入到集群中 先在k8s-master上查看一下 token

bash

kubeadm token list
查看token

在节点k8s-node1k8s-node2上,分别执行以下命令:

bash

sudo kubeadm join --token e3oqbd.ufg53izk7ev4e9gq 10.0.0.21:6443 --discovery-token-unsafe-skip-ca-verification

将上面命令中的 token 和 IP地址换成你自己的

成功后会有如下提示:

加入集群

接下来在 k8s-master 节点上执行以下命令,可以看到集群中有3个节点了

text

kubectl get nodes