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

修正说明: 我们在上节课的实践过程中,刚好碰见阿里云的镜像站出现故障,导致实验进程受阻,本手册的修正内容为将阿里云的镜像站更换为华为镜像站,包括:CentOS源、Docker源、Kubernetes源。 请同学们多注意手册中的提示,有些步骤是可以跳过的。
本手册包含以下内容:
- 安装 Docker
- 安装 Kubernetes
- 部署 Kubernetes Cluster
作业:搭建 Kubernetes 集群
这个作业要提交两张图片,放在一个压缩包内,压缩包的命名参考学习通平台上的作业要求。
第一张图片:
导入课上提供的 VMware 镜像,名为 k8s-master
将导入的虚拟机克隆两份,分别为 k8s-node1
和 k8s-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
图片中执行了两个命令,分别是
ip a
和ping www.baidu.com
这两个命令要放在一张图内
第二张图片:
后面的《初始化Master》小节中,创建集群成功后的图片
任务一:安装 Docker(在所有节点上操作)
一、添加 Docker 软件源(跳过不做) 以下两条命令添加华为云的 Docker 源
wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
二、安装 Docker 的软件包
yum install docker-ce
三、启动 Docker
systemctl enable docker
systemctl start docker
上面这两条命令中:
- 第一条命令设置了 Docker 的开机自动启动
- 第二命命令启动 Docker
四、修改 Docker 加速镜像,该步骤是为了加快下载 Docker 镜像的速度。
cat <<EOF >/etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
五、重启 Docker
systemctl daemon-reload
systemctl restart docker
注解: 重启一个服务只需要
systemctl restart <服务名称>
就可以了,为什么还要systemctl daemon-reload
? 答案:我们在修改某个服务的配置文件后,需要daemon-reload
来重新加载它,以便让 systemctl 读取到最新的配置文件。
任务二:安装 Kubernetes(在所有节点上操作)
请同学们在==课上==跳过以下的一、二两步
一、备份旧的 Kubernetes 源(跳过不做)
cp /etc/yum.repos.d/kubernetes.repo /etc/yum.repos.d/kubernetes.repo.bak
在
/etc/yum.repo.d/
这个文件夹内,所有后缀名为.repo
的文件都被会 yum 工具当作软件源的配置文件,而其他后续的文件都会被忽略
二、添加华为的软件源(跳过不做)
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 的三个软件包:kubelet
、kubeadm
和 kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
四、启动 kubelet
systemctl enable --now kubelet
==查看==需要的镜像(可选操作)
kubeadm config images list
五、从阿里源获取 Docker 镜像
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
服务重启
systemctl restart containerd
重新获取镜像(时间会比较漫长)
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
任务三:初始化 Master(仅在 k8s-master 节点上操作)
一、执行以下命令进行初始化
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
)

这是由于 Kubernetes 的 cgroups driver 和 Docker 不一致,解决办法: 修改Docker配置文件:
vim /etc/docker/daemon.json
增加如下内容:(一定要注意整个文件中的标点符号!!!)
"exec-opts": ["native.cgroupdriver=systemd"]

重启相关服务
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
重新初始化Master
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 成功后,在提示信息中已经指导了我们后续如何做:
再次强调,大家执行完任何一条命令后,都要多注意执行后面的提示信息。
首先切换到一个普通用户
su centos
我们先配置一下 kubectl 并实现命令自动补全:
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
命令查看变量内容
任务四:配置 Pod 网络(仅在 Master 节点上操作)
一、回到 root 用户
su root
使用 XFtp 工具将 flannel.v0.22.2.tar
和 kube-flannel.yml
文件传送到虚拟机中。
二、导入镜像
docker load < ./flannel.v0.22.2.tar
和课本不一样? 由于国内的网络不方便访问 Docker 官方的镜像仓库,我们使用已经提前下载好的 Docker 镜像
查看导入的镜像ID
docker images
docker tag d73868a08083 docker.io/flannel/flannel:v0.22.2
三、部署flannel
切换到普通用户
su centos
cd
把需要的文件拿过来,并修改权限(注意第一条命令最后是个点,代表当前目录)
sudo mv /root/kube-flannel.yml .
sudo chmod centos:centos ./kube-flannel.yml
部署 flannel(一定要用普通用户执行)
kubectl apply -f ./kube-flannel.yml
和课本不一样? 由于网络问题,我们直接使用之前下载好的配置文件,而不是从 Github 下载。
三、接下来检查一下状态,确保刚才的操作都成功了
kebectl get pod -A

四、修改防火墙的配置,使防火墙对6443端口进行放行
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
为什么要放行6443端口? 后续操作中,node和master之间的通信需要通过该端口
修改后重载一下防火墙
sudo firewall-cmd --reload
五、将另外两个节点加入到集群中
先在k8s-master
上查看一下 token
kubeadm token list

在节点k8s-node1
和k8s-node2
上,分别执行以下命令:
sudo kubeadm join --token e3oqbd.ufg53izk7ev4e9gq 10.0.0.21:6443 --discovery-token-unsafe-skip-ca-verification
将上面命令中的 token 和 IP地址换成你自己的
接下来在 k8s-master
节点上执行以下命令,可以看到集群中有3个节点了
kubectl get nodes