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