 之 使用kubeadm搭建K8S集群)
目录第一部分、基础配置1、设置节点服务器主机名2、配置host解析3、关闭swap4、加载内核模块、开启 IP 转发5、安装containerd容器运行时6、生成containerd标准配置修改systemd cgroup驱动关键7、配置containerd镜像加速8、安装Kubeadm、kubelet、kubectl9、安装crictl工具第二部分、创建K8S集群1、controller控制平面节点初始化集群2、node01工作节点加入集群3、node02工作节点加入集群4、K8S集群完成搭建后查看相关Pod本文演示使用kubeadm方式部署K8s集群以及集群中的相关操作。本文中所有操作均使用root用户执行。集群主要信息如下集群节点节点名称节点IP节点角色操作系统版本controller172.16.32.185控制平面Ubuntu 24.04.3 LTSnode01172.16.32.188工作节点Ubuntu 24.04.3 LTSnode02172.16.32.189工作节点Ubuntu 24.04.3 LTS集群核心组件版本组件名称组件版本kube-apiserverv1.35.7kube-controller-managerv1.35.7kube-schedulerv1.35.7etcd3.6.6-0kube-proxyv1.35.7containerd(容器运行时)v2.2.6kubeadmv1.35.7kubeletv1.35.7kubectlv1.35.7calico(网络插件)v3.28.0第一部分、基础配置1、设置节点服务器主机名步骤一、controller节点执行rootcontroller:~# echo controller /etc/hostname步骤二、node01节点执行rootnode01:~# echo node01 /etc/hostname步骤三、node02节点执行rootnode02:~# echo node02 /etc/hostname2、配置host解析步骤一、controller节点执行rootcontroller:~# cat /etc/hosts EOF # 替换为你三台机器实际IP 172.16.32.185 controller 172.16.32.188 node01 172.16.32.189 node02 EOF步骤二、node01节点执行rootnode01:~# cat /etc/hosts EOF # 替换为你三台机器实际IP 172.16.32.185 controller 172.16.32.188 node01 172.16.32.189 node02 EOF步骤三、node02节点执行rootnode02:~# cat /etc/hosts EOF # 替换为你三台机器实际IP 172.16.32.185 controller 172.16.32.188 node01 172.16.32.189 node02 EOF3、关闭swapK8S强制要求永久关闭。步骤一、controller节点执行rootcontroller:~# sed -i /swap/s/^/#/ /etc/fstab rootcontroller:~# cat /etc/fstab步骤二、node01节点执行rootnode01:~# sed -i /swap/s/^/#/ /etc/fstab rootnode01:~# cat /etc/fstab步骤三、node02节点执行rootnode02:~# sed -i /swap/s/^/#/ /etc/fstab rootnode02:~# cat /etc/fstab4、加载内核模块、开启 IP 转发容器网络必需。步骤一、controller节点执行加载overlay、网桥过滤模块rootcontroller:~# cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF rootcontroller:~# modprobe overlay rootcontroller:~# modprobe br_netfilterrootcontroller:~# lsmod | grep overlay rootcontroller:~# lsmod | grep br_netfilter开启内核网络参数# 开启 rootcontroller:~# cat EOF | tee /etc/sysctl.d/k8s-network.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF # 生效配置 rootcontroller:~# sysctl --system #验证配置都为1 rootcontroller:~# sysctl net.ipv4.ip_forward net.bridge.bridge-nf-call-iptables步骤二、node01节点执行加载overlay、网桥过滤模块rootnode01:~# cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF rootnode01:~# modprobe overlay rootnode01:~# modprobe br_netfilterrootnode01:~# lsmod | grep overlay rootnode01:~# lsmod | grep br_netfilter开启内核网络参数# 开启 rootnode01:~# cat EOF | tee /etc/sysctl.d/k8s-network.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF # 生效配置 rootnode01:~# sysctl --system #验证配置都为1 rootnode01:~# sysctl net.ipv4.ip_forward net.bridge.bridge-nf-call-iptables步骤三、node02节点执行加载overlay、网桥过滤模块rootnode02:~# cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF rootnode02:~# modprobe overlay rootnode02:~# modprobe br_netfilterrootnode02:~# lsmod | grep overlay rootnode02:~# lsmod | grep br_netfilter开启内核网络参数# 开启 rootnode02:~# cat EOF | tee /etc/sysctl.d/k8s-network.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF # 生效配置 rootnode02:~# sysctl --system #验证配置都为1 rootnode02:~# sysctl net.ipv4.ip_forward net.bridge.bridge-nf-call-iptables5、安装containerd容器运行时步骤一、controller节点执行安装依赖rootcontroller:~# apt update apt install -y ca-certificates curl gnupg lsb-release添加docker仓库提供containerdrootcontroller:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg rootcontroller:~# echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | tee /etc/apt/sources.list.d/docker.list /dev/null更新并安装containerd# 更新源 rootcontroller:~# apt update # 安装containerd rootcontroller:~# apt install -y containerd.io # 查看是否成功安装出现版本号信息说明安装成功。 rootcontroller:~# containerd --version步骤二、node01节点执行安装依赖rootnode01:~# apt update apt install -y ca-certificates curl gnupg lsb-release添加docker仓库提供containerdrootnode01:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg rootnode01:~# echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | tee /etc/apt/sources.list.d/docker.list /dev/null更新并安装containerd# 更新源 rootnode01:~# apt update # 安装containerd rootnode01:~# apt install -y containerd.io # 查看是否成功安装出现版本号信息说明安装成功。 rootnode01:~# containerd --version步骤三、node02节点执行安装依赖rootnode02:~# apt update apt install -y ca-certificates curl gnupg lsb-release添加docker仓库提供containerdrootnode02:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg rootnode02:~# echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | tee /etc/apt/sources.list.d/docker.list /dev/null更新并安装containerd# 更新源 rootnode02:~# apt update # 安装containerd rootnode02:~# apt install -y containerd.io # 查看是否成功安装出现版本号信息说明安装成功。 rootcontroller:~# containerd --version6、生成containerd标准配置修改systemd cgroup驱动关键步骤一、controller节点执行# 生成默认配置文件 rootcontroller:~# containerd config default | tee /etc/containerd/config.toml # 修改Cgroup驱动为systemd rootcontroller:~# sed -i s/SystemdCgroup \ false/SystemdCgroup \ true/g /etc/containerd/config.toml # 重启并设置开机自启动 rootcontroller:~# systemctl daemon-reload rootcontroller:~# systemctl restart containerd rootcontroller:~# systemctl enable containerd # 验证运行状态 rootcontroller:~# systemctl status containerd步骤二、node01节点执行# 生成默认配置文件 rootnode01:~# containerd config default | tee /etc/containerd/config.toml # 修改Cgroup驱动为systemd rootnode01:~# sed -i s/SystemdCgroup \ false/SystemdCgroup \ true/g /etc/containerd/config.toml # 重启并设置开机自启动 rootnode01:~# systemctl daemon-reload rootnode01:~# systemctl restart containerd rootnode01:~# systemctl enable containerd # 验证运行状态 rootnode01:~# systemctl status containerd步骤三、node02节点执行# 生成默认配置文件 rootnode02:~# containerd config default | tee /etc/containerd/config.toml # 修改Cgroup驱动为systemd rootnode02:~# sed -i s/SystemdCgroup \ false/SystemdCgroup \ true/g /etc/containerd/config.toml # 重启并设置开机自启动 rootnode02:~# systemctl daemon-reload rootnode02:~# systemctl restart containerd rootnode02:~# systemctl enable containerd # 验证运行状态 rootnode02:~# systemctl status containerd7、配置containerd镜像加速国外镜像源registry.k8s.io网络连接不稳定经常连接报错配置国内镜像加速保证镜像正常下载。步骤一、controller节点执行# 编辑containerd配置文件config.toml rootcontroller:~# vim /etc/containerd/config.toml 找到[plugins.io.containerd.cri.v1.images.registry]节点修改config_path的值如下内容 config_path /etc/containerd/certs.d # 配置加速文件 rootcontroller:~# mkdir -p /etc/containerd/certs.d/docker.io rootcontroller:~# vim /etc/containerd/certs.d/docker.io/hosts.toml 加入如下内容 [host.https://docker.m.daocloud.io] capabilities [pull,resolve] # 重启containerd生效 rootcontroller:~# systemctl restart containerd/etc/containerd/config.toml文件内容/etc/containerd/certs.d/docker.io/hosts.toml文件内容步骤二、node01节点执行# 编辑containerd配置文件config.toml rootnode01:~# vim /etc/containerd/config.toml 找到[plugins.io.containerd.cri.v1.images.registry]节点修改config_path的值如下内容 config_path /etc/containerd/certs.d # 配置加速文件 rootnode01:~# mkdir -p /etc/containerd/certs.d/docker.io rootnode01:~# vim /etc/containerd/certs.d/docker.io/hosts.toml 加入如下内容 [host.https://docker.m.daocloud.io] capabilities [pull,resolve] # 重启containerd生效 rootnode01:~# systemctl restart containerd/etc/containerd/config.toml文件内容/etc/containerd/certs.d/docker.io/hosts.toml文件内容步骤三、node02节点执行# 编辑containerd配置文件config.toml rootnode02:~# vim /etc/containerd/config.toml 找到[plugins.io.containerd.cri.v1.images.registry]节点修改config_path的值如下内容 config_path /etc/containerd/certs.d # 配置加速文件 rootnode02:~# mkdir -p /etc/containerd/certs.d/docker.io rootnode02:~# vim /etc/containerd/certs.d/docker.io/hosts.toml 加入如下内容 [host.https://docker.m.daocloud.io] capabilities [pull,resolve] # 重启containerd生效 rootnode02:~# systemctl restart containerd/etc/containerd/config.toml文件内容/etc/containerd/certs.d/docker.io/hosts.toml文件内容8、安装Kubeadm、kubelet、kubectlkubeadm用于部署K8s集群kubelet是各节点管理Pod的守护进程kubectl是操作集群的命令行客户端。步骤一、controller节点执行# 添加阿里云源 rootcontroller:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 写入镜像源 rootcontroller:~# echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/ / | tee /etc/apt/sources.list.d/kubernetes.list # 安装组件 rootcontroller:~# apt update rootcontroller:~# apt install -y kubelet kubeadm kubectl # 锁定版本防止自动更新破坏集群 rootcontroller:~# apt-mark hold kubelet kubeadm kubectl containerd.io # 验证版本 rootcontroller:~# kubectl version --client rootcontroller:~# kubeadm version步骤二、node01节点执行# 添加阿里云源 rootnode01:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 写入镜像源 rootnode01:~# echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/ / | tee /etc/apt/sources.list.d/kubernetes.list # 安装组件 rootnode01:~# apt update rootnode01:~# apt install -y kubelet kubeadm kubectl # 锁定版本防止自动更新破坏集群 rootnode01:~# apt-mark hold kubelet kubeadm kubectl containerd.io # 验证版本 rootnode01:~# kubectl version --client rootnode01:~# kubeadm version步骤三、node02节点执行# 添加阿里云源 rootnode02:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 写入镜像源 rootnode02:~# echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/ / | tee /etc/apt/sources.list.d/kubernetes.list # 安装组件 rootnode02:~# apt update rootnode02:~# apt install -y kubelet kubeadm kubectl # 锁定版本防止自动更新破坏集群 rootnode02:~# apt-mark hold kubelet kubeadm kubectl containerd.io # 验证版本 rootnode02:~# kubectl version --client rootnode02:~# kubeadm version9、安装crictl工具crictl是Kubernetes官方开源的CRI容器运行时接口命令行工具。K8s不直接绑定docker、containerd 等容器引擎依靠CRI标准对接各类容器运行时crictl就是用来绕过kubelet直接和底层容器运行时交互的调试工具。核心用途如下查看节点上镜像、容器、Pod状态排查kubelet异常、容器启动失败、镜像拉取异常验证kubeadm预拉取镜像是否本地就绪手动启停容器、查看容器日志、清理无用镜像。步骤一、controller节点执行1、一键下载解压安装# 定义版本和kubeadm版本保持接近即可当前稳定v1.36.0 rootcontroller:~# CRICTL_VERSIONv1.36.0 # 下载压缩包 rootcontroller:~# wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz # 解压到系统PATH目录 rootcontroller:~# tar -zxvf crictl-${CRICTL_VERSION}-linux-amd64.tar.gz -C /usr/local/bin # 删除安装包可选操作 rootcontroller:~# rm -f crictl-${CRICTL_VERSION}-linux-amd64.tar.gz2、配置连接containerd套接字关键步骤rootcontroller:~# tee /etc/crictl.yaml /dev/null EOF runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: false EOF3、验证安装# 查看版本 rootcontroller:~# crictl version # 查看本地镜像kubeadm拉取的镜像可在这里查看 rootcontroller:~# crictl images步骤二、node01节点执行1、一键下载解压安装# 定义版本和kubeadm版本保持接近即可当前稳定v1.36.0 rootnode01:~# CRICTL_VERSIONv1.36.0 # 下载压缩包 rootnode01:~# wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz # 解压到系统PATH目录 rootnode01:~# tar -zxvf crictl-${CRICTL_VERSION}-linux-amd64.tar.gz -C /usr/local/bin # 删除安装包可选操作 rootnode01:~# rm -f crictl-${CRICTL_VERSION}-linux-amd64.tar.gz2、配置连接containerd套接字关键步骤rootnode01:~# tee /etc/crictl.yaml /dev/null EOF runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: false EOF3、验证安装# 查看版本 rootnode01:~# crictl version # 查看本地镜像kubeadm拉取的镜像可在这里查看 rootnode01:~# crictl images步骤三、node02节点执行1、一键下载解压安装# 定义版本和kubeadm版本保持接近即可当前稳定v1.36.0 rootnode02:~# CRICTL_VERSIONv1.36.0 # 下载压缩包 rootnode02:~# wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz # 解压到系统PATH目录 rootnode02:~# tar -zxvf crictl-${CRICTL_VERSION}-linux-amd64.tar.gz -C /usr/local/bin # 删除安装包可选操作 rootnode02:~# rm -f crictl-${CRICTL_VERSION}-linux-amd64.tar.gz2、配置连接containerd套接字关键步骤rootnode02:~# tee /etc/crictl.yaml /dev/null EOF runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: false EOF3、验证安装# 查看版本 rootnode02:~# crictl version # 查看本地镜像kubeadm拉取的镜像可在这里查看 rootnode02:~# crictl images第二部分、创建K8S集群1、controller控制平面节点初始化集群步骤一、提前预拉取镜像到本地# 提前预拉镜像到本地 rootcontroller:~# kubeadm config images pull --image-repositoryregistry.aliyuncs.com/google_containers步骤二、修改sandbox镜像源将sandbox镜像地址由registry.k8s.io/pause:3.10.1修改为本地镜像地址registry.aliyuncs.com/google_containers/pause:3.10.1# 编辑containerd配置文件 rootcontroller:~# vim /etc/containerd/config.toml 修改内容如下 [plugins.io.containerd.cri.v1.images.pinned_images] sandbox registry.aliyuncs.com/google_containers/pause:3.10.1 # 重启containerd服务 rootcontroller:~# systemctl restart containerd修改为步骤三、初始化集群# 执行K8S集群初始化命令 rootcontroller:~# kubeadm init \ --apiserver-advertise-address172.16.32.185 \ --kubernetes-versionv1.35.7 \ --pod-network-cidr192.168.0.0/16 \ --cri-socketunix:///run/containerd/containerd.sock \ --image-repositoryregistry.aliyuncs.com/google_containers 参数说明 --apiserver-advertise-address: controller节点IP地址此处为172.16.32.185 --kubernetes-versionv1.35.7: 指定版本为v1.35.7 --pod-network-cidr192.168.0.0/16: Calico固定网段不可修改 --cri-socket: 指定containerd套接字必须携带 --image-repositoryregistry.aliyuncs.com/google_containers: 强制kubeadm从阿里云拉取官方组件镜像。此处镜像已经预拉取到本地。出现如上图信息说明集群初始化成功。需要重点记录节点加入集群命令# 节点加入集群命令 kubeadm join 172.16.32.185:6443 --token 9c79s2.dxnyf6gbvuo1gp9c \ --discovery-token-ca-cert-hash sha256:e41e1b22228059f4f97c87335fb8c2fecc6a653915b00e5bf483f8d4bdbf5f43需要注意的是上述命令中的token的有效期是24小时超时后集群内就找不到该token信息节点无法加入集群。可以执行命令kubeadm token create --print-join-command生成新的token或者执行kubeadm token create --ttl 0 --print-join-command生成永久token。特别注意K8S集群初始化过程中可以实时打印出kubelet服务的运行日志及时查看报错日志。# 查看kubelet运行日志 rootcontroller:~# journalctl -u kubelet -f步骤四、执行初始化后命令执行初始化成功后提示需要执行的命令。# 授权普通用户使用kubectl rootcontroller:~# mkdir -p $HOME/.kube rootcontroller:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config rootcontroller:~# chown $(id -u):$(id -g) $HOME/.kube/config rootcontroller:~# export KUBECONFIG/etc/kubernetes/admin.conf查看controller节点状态rootcontroller:~# kubectl get nodes此时controller节点是NotReady状态属于正常现象因为还没有安装网络插件Calico。步骤五、安装Calico网络插件Calico是Kubernetes常用网络插件为集群提供Pod网络互通、网络策略访问控制及IP地址管理能力。# 下载calico的yaml配置文件到本地地址可以根据实际情况自行选择 rootcontroller:~# wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml # 根据calico.yaml文件声明式创建本地应用 rootcontroller:~# kubectl apply -f calico.yaml # 查看calico pod的状态(执行kubectl apply命令后等待几分钟) # 所有calico相关pod变为Running才算部署成功 rootcontroller:~# kubectl get pods -n kube-system步骤六、查看集群节点状态rootcontroller:~# kubectl get nodes由上可见安装网络插件Calico后此时controller节点已经是Ready状态。2、node01工作节点加入集群步骤一、node01工作节点修改修改sandbox镜像源将sandbox镜像地址由registry.k8s.io/pause:3.10.1修改为本地镜像地址registry.aliyuncs.com/google_containers/pause:3.10.1# 编辑containerd配置文件 rootnode01:~# vim /etc/containerd/config.toml 修改内容如下 [plugins.io.containerd.cri.v1.images.pinned_images] sandbox registry.aliyuncs.com/google_containers/pause:3.10.1 # 重启containerd服务 rootnode01:~# systemctl restart containerd步骤二、controller控制节点生成加入集群的命令# 生成命令 rootcontroller:~# kubeadm token create --print-join-command 此处生成的命令为 kubeadm join 172.16.32.185:6443 --token qbpvvt.rwyjf4y1kl3pd0a8 --discovery-token-ca-cert-hash sha256:e41e1b22228059f4f97c87335fb8c2fecc6a653915b00e5bf483f8d4bdbf5f43步骤三、node01工作节点执行命令加入集群执行步骤二生成的加入集群的命令# 执行加入集群命令 rootnode01:~# kubeadm join 172.16.32.185:6443 --token qbpvvt.rwyjf4y1kl3pd0a8 --discovery-token-ca-cert-hash sha256:e41e1b22228059f4f97c87335fb8c2fecc6a653915b00e5bf483f8d4bdbf5f43步骤四、controller控制节点查看集群节点状态# 查看集群节点状态 rootcontroller:~# kubectl get nodes # 查看kube-system命名空间下集群核心组件Pod的运行状态 rootcontroller:~# kubectl get pods -n kube-system由上图所示node01节点是Ready状态calico-node-zjvmz、kube-proxy-wm9k4两个Pod正常运行说明node01节点已经正常加入K8S集群。注意加入节点失败时可以通过如下命令查看失败原因# 查看node01节点的pod状态 rootcontroller:~# kubectl get pods -n kube-system 此处查询出来node01节点的pod名称为calico-node-2nrb5 # 查看calico-node-2nrb5的详细报错信息 rootcontroller:~# kubectl describe pod calico-node-2nrb5 -n kube-system3、node02工作节点加入集群步骤一、node02工作节点修改修改sandbox镜像源将sandbox镜像地址由registry.k8s.io/pause:3.10.1修改为本地镜像地址registry.aliyuncs.com/google_containers/pause:3.10.1# 编辑containerd配置文件 rootnode02:~# vim /etc/containerd/config.toml 修改内容如下 [plugins.io.containerd.cri.v1.images.pinned_images] sandbox registry.aliyuncs.com/google_containers/pause:3.10.1 # 重启containerd服务 rootnode02:~# systemctl restart containerd步骤二、controller控制节点生成加入集群的命令# 生成命令 rootcontroller:~# kubeadm token create --print-join-command 此处生成的命令为 kubeadm join 172.16.32.185:6443 --token 0dy63m.nc033l8pk7ews8xz --discovery-token-ca-cert-hash sha256:e41e1b22228059f4f97c87335fb8c2fecc6a653915b00e5bf483f8d4bdbf5f43步骤三、node02工作节点执行命令加入集群执行步骤二生成的加入集群的命令# 执行加入集群命令 rootnode02:~# kubeadm join 172.16.32.185:6443 --token 0dy63m.nc033l8pk7ews8xz --discovery-token-ca-cert-hash sha256:e41e1b22228059f4f97c87335fb8c2fecc6a653915b00e5bf483f8d4bdbf5f43步骤四、controller控制节点查看集群节点状态# 查看集群节点状态 rootcontroller:~# kubectl get nodes # 查看kube-system命名空间下集群核心组件Pod的运行状态 rootcontroller:~# kubectl get pods -n kube-system由上图所示node02节点是Ready状态calico-node-2lccv、kube-proxy-qlwv4两个Pod正常运行说明node02节点已经正常加入K8S集群。4、K8S集群完成搭建后查看相关Pod(1)、controller控制平面节点# 查看整个集群命名空间kube-system下的所有pod包括所有工作节点上的pod rootcontroller:~# kubectl get pods -n kube-system -o wide # 查看controller节点本机所有pod沙箱(pause容器) rootcontroller:~# crictl pods # 查看controller节点本机所有业务容器 rootcontroller:~# crictl ps -a # 查看controller节点本机所有启用的端口 rootcontroller:~# netstat -tnlp由上图可见当前整个集群总共有13个pod其中controller节点有9个node01节点、node02节点分别有2个pod。由上图可见当前开启的端口。(2)、node01工作节点# 查看node01节点本机所有pod沙箱(pause容器) rootnode01:~# crictl pods # 查看node01节点本机所有业务容器 rootnode01:~# crictl ps -a # 查看node01节点本机所有启用的端口 rootnode01:~# netstat -tnlp由上图可见node01节点当前有2个pod运行。(3)、node02工作节点# 查看node02节点本机所有pod沙箱(pause容器) rootnode02:~# crictl pods # 查看node02节点本机所有业务容器 rootnode02:~# crictl ps -a # 查看node02节点本机所有启用的端口 rootnode02:~# netstat -tnlp由上图可见node02节点当前有2个pod运行。至此一个控制平面节点、两个工作节点的K8S集群搭建完成