1.部署集群

本手册指导学生使用三个云主机节点搭建 Kubernetes 集群。内容包括安装 Docker、配置防火墙、修改主机名、更换软件源等准备工作,以及安装 Kubernetes 软件包、关闭 Swap、初始化主节点、安装 Pod 网络和将其他节点加入集群的步骤。学生将学习如何部署一个基本的 Kubernetes 集群环境。

每位同学使用三个云主机节点,搭建 Kubernetes 集群

先统一几个术语:

  • Master 节点统一叫 “主节点”
  • Worker 节点、Node节点统一叫 “从节点”

统一术语是为了更加规范

步骤1 检查 Docker 是否安装

bash

docker version
版本

能够看到 Client 和 Server 的版本(Version)代表已经正确安装 Docker

步骤2 停止所有 Docker 容器

bash

# 查看是否有容器存在
docker ps -a
# 如果有,使用下面这条命令停止并删除容器
docker rm -f 容器ID

步骤3 检查防火墙

bash

systemctl status firewalld
防火墙应该为停止状态

如果不是停止状态,一定要先把防火墙停止!

停止防火墙的命令是:systemctl stop firewalld && systemctl disable firewalld

步骤4 修改主机名

三个节点的主机名分别修改为 main、node1、node2

命令参考:

bash

hostnamectl set-hostname main

步骤5 截止今年6月30日,CentOS 7 已经停止维护,我们不能再使用官方源更新、安装软件包,所以需要更换一个可用的软件源,例如阿里云、华为云

bash

# 让旧的软件源失效
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 软件源

下面这条命令可以在华为镜像站的官方网站找到

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

2、安装软件包:kubelet、kubeadm、kubectl

bash

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

3、启用 kubelet

bash

systemctl enable --now kubelet

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

这一步是查看后续需要哪些镜像

bash

kubeadm config images list
所需镜像

5、下载这些镜像

注意不用 docker pull

bash

kubeadm config images pull
下载镜像

接下来我们关闭 Swap,执行以下命令进行临时关闭:

bash

swapoff -a

命令注解:

  • -aall的缩写,意思是关闭所有Swap分区(我们的系统中只有一个)

接下来修改/etc/fstab文件永久关闭 Swap

bash

vim /etc/fstab

我们找到包含swap字样的行,将它删除或者注释掉

/etc/fstab

1、初始化集群中的 Master 节点,执行以下命令:

注意!! 把 192.168.192.215 换成你自己节点的 IP 地址

bash

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 地址呢?

我们看一下命令执行后的提示都包含哪些内容:

bash

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用户,所以先执行以下两条命令:

bash

export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bashrc

思考:提示里面说执行第1条命令,我们为什么加上第2条?

Kubernetes 支持多种网络方案,我们会在后续进行详细地学习,今天先使用 flannel 方案

下面这条命令来自 flannel 官方网站

bash

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

如下图显示,代表部署成功

验证:

bash

kubectl get pods -A

1、所有 node 节点,都执行以下命令,加入集群:

这条命令去哪里找?

在《任务三:初始化主节点》中,我们执行完 kubeadm init ..... 命令后,会得到以下的提示,其中最后两行就是加入集群的命令。

如果找不到也没关系,我们执行以下命令,它会告诉我们加入集群的命令是什么

bash

kubeadm token create --print-join-command

复制出来命令,在所有 node 节点执行。

出现以下提示,代表加入成功:

2、验证:

回到主节点,再次验证一下节点是不是成功加入集群了:

bash

kubectl get nodes

以下操作仅为需要了解的内容,不必操作

如果想要删除某个节点,先在主节点上将要删除的节点设置为维护模式:

bash

kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
  • k8s-node1 替换为你要删除的节点

删除节点:

bash

kubectl delete node  k8s-node1
删除节点

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

bash

kubeadm reset
kubeadm reset