news 2026/9/4 22:39:13

Kubernetes实战系列文章(一) 之 使用kubeadm搭建K8S集群

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes实战系列文章(一) 之 使用kubeadm搭建K8S集群

目录

第一部分、基础配置

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节点角色操作系统版本
controller172.16.32.185控制平面Ubuntu 24.04.3 LTS
node01172.16.32.188工作节点Ubuntu 24.04.3 LTS
node02172.16.32.189工作节点Ubuntu 24.04.3 LTS
  • 集群核心组件版本
组件名称组件版本
kube-apiserverv1.35.7
kube-controller-managerv1.35.7
kube-schedulerv1.35.7
etcd3.6.6-0
kube-proxyv1.35.7
containerd(容器运行时)v2.2.6
kubeadmv1.35.7
kubeletv1.35.7
kubectlv1.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集群搭建完成!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 22:38:39

C FFI vs PyO3:在 Rust 中嵌入 C++ 推理核心的取舍

C FFI vs PyO3&#xff1a;在 Rust 中嵌入 C 推理核心的取舍在构建高性能 AI 推理底座时&#xff0c;工程团队经常面临一个典型的系统集成架构挑战&#xff1a;上层网关、调度器、异步 I/O 和内存池已经全面使用 Rust 编写&#xff0c;而底层的核心算子库或量化推理引擎&#x…

作者头像 李华
网站建设 2026/9/4 22:35:30

【MATLAB代码,车联网11】基于V2X车路协同通信的交叉口速度引导与停车延误优化仿真分析——利用实时信号相位与剩余绿灯时间信息进行车辆速度动态引导。MATLAB完整代码可在订阅专栏后直接查看

如需帮助,或有车联网、网联车辆控制、交通仿真、滤波与导航相关的代码定制需求,可从个人主页左侧联系我 本例程面向单交叉口车路协同速度引导问题,利用信号相位和剩余时间信息为车辆提供推荐速度,对比无引导和V2X速度引导下的停车次数、停车延误和通过速度。程序适合用于智…

作者头像 李华
网站建设 2026/9/4 22:30:53

2026年9月电动冲浪板选购必看!精准避坑高效选型

电动冲浪板选购必看&#xff01;精准避坑高效选型在水上运动设备领域&#xff0c;电动冲浪板凭借其独特的魅力成为了众多水上爱好者和景区运营者的心头好。然而&#xff0c;面对市场上琳琅满目的电动冲浪板产品&#xff0c;如何进行精准选型成为了一大难题。一旦选型不当&#…

作者头像 李华
网站建设 2026/9/4 22:26:05

开源数学推理模型dots3-note全解析:从IMO满分到工程落地

最近开源大模型圈子里又热闹起来了&#xff0c;焦点从通用对话能力转向了一个更硬核的方向——数学推理。小红书开源社区带来的 dots3-note 系列模型&#xff0c;因为“IMO 42 分满分同系列”这个标签&#xff0c;吸引了不少关注。 如果你不太关注数学竞赛&#xff0c;看到“I…

作者头像 李华
网站建设 2026/9/4 22:22:54

P95 与 P99 延迟尖刺排查:慢请求到底是慢在召回还是模型生成

P95 与 P99 延迟尖刺排查&#xff1a;慢请求到底是慢在召回还是模型生成在大模型问答&#xff08;RAG&#xff09;生产系统的日常巡检中&#xff0c;监控大盘上最刺眼的数据莫过于&#xff1a;平均延迟&#xff08;Avg Latency&#xff09;明明只有 350ms&#xff0c;但 P99 延…

作者头像 李华
网站建设 2026/9/4 22:21:27

51单片机Proteus仿真:货车侧翻检测系统设计与实现

简介&#xff1a;本资源是一套面向电子类专业学生与单片机初学者的货车侧翻检测系统完整设计资料&#xff0c;聚焦车辆安全监测场景&#xff0c;解决基于倾斜度判断的实时预警与制动响应问题。资源包含Proteus仿真工程、Keil C51源代码、AD绘制的原理图及系统流程图&#xff0c…

作者头像 李华