1.部署集群

本手册指导学生使用三个云主机节点搭建 Kubernetes 集群。内容包括安装 Docker、配置防火墙、修改主机名、更换软件源等准备工作,以及安装 Kubernetes 软件包、关闭 Swap、初始化主节点、安装 Pod 网络和将其他节点加入集群的步骤。学生将学习如何部署一个基本的 Kubernetes 集群环境。
本节任务
每位同学使用三个云主机节点,搭建 Kubernetes 集群
先统一几个术语:
- Master 节点统一叫 “主节点”
- Worker 节点、Node节点统一叫 “从节点”
统一术语是为了更加规范
实验准备
步骤1 检查 Docker 是否安装
docker version

能够看到 Client 和 Server 的版本(Version)代表已经正确安装 Docker
步骤2 停止所有 Docker 容器
# 查看是否有容器存在
docker ps -a
# 如果有,使用下面这条命令停止并删除容器
docker rm -f 容器ID
步骤3 检查防火墙
systemctl status firewalld

如果不是停止状态,一定要先把防火墙停止!
停止防火墙的命令是:
systemctl stop firewalld && systemctl disable firewalld
步骤4 修改主机名
三个节点的主机名分别修改为 main、node1、node2
命令参考:
hostnamectl set-hostname main
步骤5 截止今年6月30日,CentOS 7 已经停止维护,我们不能再使用官方源更新、安装软件包,所以需要更换一个可用的软件源,例如阿里云、华为云
# 让旧的软件源失效
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载新的软件源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
# 清除缓存
yum clean all
# 更新缓存
yum makecache
实验任务
任务一:安装软件包(所有节点)
1、添加华为的 Kubernetes 软件源
下面这条命令可以在华为镜像站的官方网站找到
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
2、安装软件包:kubelet、kubeadm、kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
3、启用 kubelet
systemctl enable --now kubelet
4、查看需要的镜像(可选操作)
这一步是查看后续需要哪些镜像
kubeadm config images list

5、下载这些镜像
注意不用 docker pull
kubeadm config images pull

任务二:关闭 Swap (所有节点)
接下来我们关闭 Swap,执行以下命令进行临时关闭:
swapoff -a
命令注解:
-a
是all
的缩写,意思是关闭所有Swap分区(我们的系统中只有一个)
接下来修改/etc/fstab
文件永久关闭 Swap
vim /etc/fstab
我们找到包含swap
字样的行,将它删除或者注释掉

任务三:初始化主节点(主节点)
1、初始化集群中的 Master 节点,执行以下命令:
注意!! 把 192.168.192.215 换成你自己节点的 IP 地址
kubeadm init --apiserver-advertise-address 192.168.192.215 --pod-network-cidr 10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
命令注解:
--apiserver-advertise-address
指定使用哪个网络接口
与其他节点通信--pod-network-cidr
指定 Pod 的网络范围。第12章我们会详细解释这一部分--image-repository
指定镜像地址为国内的阿里云
思考:为什么需要指定 IP 地址呢?
我们看一下命令执行后的提示都包含哪些内容:
Your Kubernetes control-plane has initialized successfully!
## 如果我们使用普通用户操作Cluster,需要执行下面3条命令
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
## 或者,如果我们使用root用户操作,执行下面一条命令
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
## 现在我们需要给集群安装 Pod 网络
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
## 安装网络之后,我们将其他节点加入到集群
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.192.215:6443 --token 5pubgw.63rjjppg53u8id7z \
--discovery-token-ca-cert-hash sha256:3436e25dc3240ad6ad5afd7e1be3e2b97f357c2a95e35b32084c3cd73535582d
这里我们直接使用root用户,所以先执行以下两条命令:
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bashrc
思考:提示里面说执行第1条命令,我们为什么加上第2条?
任务四:安装 Pod 网络(主节点)
Kubernetes 支持多种网络方案,我们会在后续进行详细地学习,今天先使用 flannel 方案
下面这条命令来自 flannel 官方网站
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
如下图显示,代表部署成功
验证:
kubectl get pods -A
任务五:将其他节点加入集群
1、所有 node 节点,都执行以下命令,加入集群:
这条命令去哪里找?
在《任务三:初始化主节点》中,我们执行完 kubeadm init .....
命令后,会得到以下的提示,其中最后两行就是加入集群的命令。
如果找不到也没关系,我们执行以下命令,它会告诉我们加入集群的命令是什么
kubeadm token create --print-join-command
复制出来命令,在所有 node 节点执行。
出现以下提示,代表加入成功:
2、验证:
回到主节点,再次验证一下节点是不是成功加入集群了:
kubectl get nodes
附注
以下操作仅为需要了解的内容,不必操作
如果想要删除某个节点,先在主节点上将要删除的节点设置为维护模式:
kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
- k8s-node1 替换为你要删除的节点
删除节点:
kubectl delete node k8s-node1

接下来,在被删除的节点上执行以下命令,使节点从集群中完全脱离出来
kubeadm reset
