Ubuntu部署Kubernetes 1.32集群

Ubuntu部署Kubernetes 1.32集群

_

由于部分文件需要访问外网才能够下载,这里我将部分比较难下载的软件包都上传至百度云,各位可以按需下载。 链接: https://pan.baidu.com/s/1vc29TpB6XTEl4Tk6_G72Zg?pwd=w8rb 提取码: w8rb

一、Kubernetes控制平面初始化过程

当我们执行“kubeadm init --config kubeadm.yaml”命令时,会自动完成Kubernetes控制平面(Master节点)的初始化过程。此时会生成集群所需的证书、配置文件,然后启动核心组件(如etcd、kube-apiserver等),并输出Worker节点加入集群的命令。

1. 初始化准备

[Step1] 初始化准备:检查版本、验证节点环境、拉取镜像。

[init] Using Kubernetes version: v1.32.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
  • 确认使用的 K8s 版本为 v1.32.0,与初始化过程中使用的“kubeadm.yaml”文件中定义的版本一致

  • 验证节点环境(Swap 关闭、CRI 运行时可达、端口可用、内核参数正确等)

  • 从“kubeadm.yaml”文件中定义的镜像源拉取k8s核心组件镜像,如apiserver、etcd、pause等

2. 生成集群安全证书

[Step1] 在“/etc/kubernetes/pki”目录下生成集群所需的全套加密证书。

[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local ubuntu] and IPs [10.96.0.1 192.168.8.3]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [localhost ubuntu] and IPs [192.168.8.3 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [localhost ubuntu] and IPs [192.168.8.3 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
  • ca:集群根证书

  • apiserver:API Server 服务证书,签名中包含“kubeadm.yaml”文件中定义的“advertiseAddress”和“name”

  • etcd:etcd 集群的通信证书

  • sa:服务账户(Service Account)的密钥,用于 Pod 访问 API Server

3. 生成集群配置文件

[Step1] 在“/etc/kubernetes”目录下生成5个核心kubeconfig文件。

[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "super-admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
  • /etc/kubernetes:该目录用于存放Kubernetes配置文件

  • admin.conf:集群管理员的配置文件,kubectl操作集群的凭证

  • super-admin.conf:超级管理员级别的kubeconfig文件

  • kubelet.conf:kubelet连接API Server的配置

  • controller-manager.conf | scheduler.conf:控制平面组件的连接配置

4. 启动控制平面核心组件

[Step1] 在“/etc/kubernetes/manifests”目录下生成 etcd、kube-apiserver、kube-controller-manager、kube-scheduler 的静态 Pod 清单。

etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests"
  • 启动kubelet服务,kubelet会监控该目录,自动创建并启动这些静态Pod

  • 等待kubelet和API Server启动并进入“健康状态”,验证核心组件正常运行

5. 集群基础配置与初始化

[Step1] 将集群初始化配置保存到“kube-system”命名空间的“kubeadm-config”ConfigMap,后续升级/重置集群可复用。

[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node ubuntu as control-plane by adding the labels: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Marking the node ubuntu as control-plane by adding the taints [node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: abcdef.0123456789abcdef
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
  • 标记节点“ubuntu”为控制平面节点:添加标签(node-role.kubernetes.io/control-plane)和污点(NoSchedule,默认不让 Pod 调度到 Master)

  • 生成集群引导令牌(token:abcdef.0123456789abcdef),Worker点加入集群时需要这个token

  • 部署集群必备插件CoreDNS:提供集群内DNS解析

  • 部署集群必备插件kube-proxy:实现Service的负载均衡和端口转发

6. 输出集群使用指引

[Step1] 提示Kubernetes控制平面已经初始化成功,提示普通用户或root用户设置权限的命令语句。

Your Kubernetes control-plane has initialized successfully!
​
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
​
Alternatively, if you are the root user, you can run:
​
  export KUBECONFIG=/etc/kubernetes/admin.conf

[Step2] 提示需要部署网络插件,当前集群仅启动了控制平面,需要安装网络插件(如Flannel/Calico),否则Pod网络不通,节点状态为“NotReady”。

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/

[Step3] 提供Worker节点加入集群的命令,复制“kubeadm join ...”命令在Worker节点执行以加入集群。

Then you can join any number of worker nodes by running the following on each as root:
​
kubeadm join 192.168.8.3:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:e87ca929498110a0ebe098e36b907cfc6737b695d2ea61461e53f0dd4f1d252b

二、Master节点安装Kubernetes

1. 节点设置

主机名

网络信息

系统信息

k8s-master

192.168.8.10/24

Ubuntu 24.04.2 LTS

k8s-worker1

192.168.8.11/24

Ubuntu 24.04.2 LTS

2. 安装容器运行时

[Step1] 执行命令,卸载可能会引起冲突的软件包。

root@k8s-master:~# apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

[Step2] 首次在新主机上安装Docker Engine之前,需要搭建Docker仓库。从配置的软件源中下载最新的包列表,更新本地缓存,安装相应组件。

root@k8s-master:~# apt-get update
root@k8s-master:~# apt-get install -y ca-certificates curl gnupg lsb-release

[Step3] 创建GPG密钥目录并设置权限0755,“/etc/apt/keyrings”目录是APT包管理体系中专门用于存储软件源 GPG 验证密钥的官方标准目录。下载Docker公钥文件,并给公钥文件赋予只读权限。【如果无法正常下载,可以访问我提供的百度云链接下载docker公钥】

root@k8s-master:~# install -m 0755 -d /etc/apt/keyrings
root@k8s-master:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
root@k8s-master:~# chmod a+r /etc/apt/keyrings/docker.asc

[Step4] 添加Docker仓库。

root@k8s-master:~# vim /etc/apt/sources.list.d/docker.sources

# 在仓库文件中写入下列内容
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc

[Step5] 添加完Docker仓库源后,更新包列表和本地缓存。

root@k8s-master:~# apt-get update

[Step6] 安装Docker包,Docker服务在安装后会自动启动。

root@k8s-master:~# apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 安装CRI-Docker

[Tips] 如果想安装其他版本的CRI-Docker,可以自行访问GitHub进行下载。

https://github.com/Mirantis/cri-dockerd/releases/版本/具体软件包

[Step1] 部署完Docker-CE后还需要cri-docker shim才能够与Kubernetes通信。Kubernetes使用CRI(容器运行时接口)与容器运行时进行通信,但是Docker不支持CRI,需要借助cri-dockerd作为中间层协助。先到GitHub上下载cri-dockerd,然后安装。【如果无法正常下载,可以访问我提供的百度云链接下载cri-dockerd】

root@k8s-master:~# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb
root@k8s-master:~# dpkg -i cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb

[Step2] 验证:查看cri-dockerd的服务状态,同时能够看到服务配置文件在“/usr/lib/systemd/system/”目录。

root@k8s-master:~# systemctl status cri-docker.service

[Step3] 复制服务的配置文件到“/etc/systemd/system”目录,systemd会优先读取“/etc/systemd/system”目录的配置文件。这样后续修改文件不会影响系统的默认配置。

root@k8s-master:~# cp /usr/lib/systemd/system/cri-docker.service /etc/systemd/system/cri-docker.service

[Step4] 修改服务的启动参数,加速镜像访问速度。

root@k8s-master:~# vim /etc/systemd/system/cri-docker.service

# 修改下列参数信息
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1
  • --container-runtime-endpoint fd://:指定容器运行时的端点

  • --network-plugin=cni:启动CNI网络插件(容器网络接口)

  • --pod-infra-container-image:指定Pod基础设施容器的镜像地址,这里设置为阿里云的镜像源

[Step5] 重新加载systemd配置以及重启cri-dockerd服务。

root@k8s-master:~# systemctl daemon-reload
root@k8s-master:~# systemctl restart cri-docker.service

[Step6] 验证:查看cri-docker服务状态,能够看到配置文件变更为“/etc/systemd/system”目录下的配置文件。

root@k8s-master:~# systemctl status cri-docker.service

4. 禁用SWAP分区

[Step1] 在Kubernetes1.34版本以前要求禁用swap分区,否则kubelet会拒绝启动。虽然目前版本为1.34以上,但是仍然建议遵守。

root@k8s-master:~# swapoff -a  // 临时卸载所有swap分区

// 编辑fstab文件,注释掉swap挂载配置
root@ubuntu:~# vim /etc/fstab
#/swap.img      none    swap    sw      0       0

5. 允许IPtables桥接流量

[Step1] 编辑配置文件,确保“br_netfilter”内核模块开机自动加载。

root@k8s-master:~# vim /etc/modules-load.d/k8s.conf

# 写入下列内容
br_netfilter

[Step2] 手动加载内核模块使其立即生效。

root@k8s-master:~# modprobe br_netfilter

[Step3] 验证:查看模块是否加载,有回显结果表示已加载。

root@k8s-master:~# lsmod | grep br_netfilter

[Step4] 编辑sysctl内核参数文件,此配置文件需要重启生效。

root@k8s-master:~# vim /etc/sysctl.d/k8s.conf

# 写入下列内容
net.bridge.bridge-nf-call-ip6tables = 1  # 让iptables规则作用于IPv6的桥接流量
net.bridge.bridge-nf-call-iptables = 1   # 让iptables规则作用于IPv4的桥接流量
net.ipv4.ip_forward = 1  # 开启Linux内核的IPv4转发功能

[Step5] 执行命令使得配置立即生效。

root@k8s-master:~# sysctl --system

6. 安装kubeadm

[Step1] 安装kubeadm依赖,其中“apt-transport-https”让APT支持通过HTTPS协议下载软件包。

root@k8s-master:~# apt-get update
root@k8s-master:~# apt-get install -y apt-transport-https curl

[Step2] 添加阿里云的Kubernetes镜像仓库,也可以通过访问“https://mirrors.aliyun.com/kubernetes-new/core/stable”手动下载,截止目前最新的版本为1.35,这里我们指定安装1.32。

root@k8s-master:~# vim /etc/apt/sources.list.d/k8s.list

# 写入下列内容
deb https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb /

[Step3] 下载Kubernetes对应版本公钥。同样可以访问网站,手动下载公钥然后导入系统。在Ubuntu 20.04+ 版本中,“apt-key”命令被标记为废弃,所以在执行命令时会提示警告。

root@k8s-master:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key | apt-key add -
  • -fsSL:参数常用于下载文件或获取内容

  • apt-key add -:从标准输入读取密钥,并添加到APT信任密钥库

[Step4] 重新获取软件包列表。

root@k8s-master:~# apt-get update

[Step5] 安装kubelet、kubeadm和kubectl。为了确保组件包的版本不会被任何操作影响,需要锁定组件的版本。如果后期需要升级,将“hold”替换为“unhold”解锁即可。

root@k8s-master:~# apt-get install -y kubelet kubeadm kubectl
root@k8s-master:~# apt-mark hold kubelet kubeadm kubectl

7. 添加命令补全

[Step1] 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录,临时加载补全脚本。

# 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录
root@k8s-master:~# kubectl completion bash > /etc/bash_completion.d/kubectl
root@k8s-master:~# kubeadm completion bash > /etc/bash_completion.d/kubeadm

# 立即加载kubectl和kubeadm脚本,仅在当前会话生效
root@k8s-master:~# source /etc/bash_completion.d/kubectl
root@k8s-master:~# source /etc/bash_completion.d/kubeadm

8. 集成CRI-Docker

[Step1] 配置crictl的默认运行时端点,指定连接的容器运行时套接字。此时会显示“Config "/etc/crictl.yaml" does not exist”,因为是首次配置,所以默认配置文件不存在,属于正常警告。

root@k8s-master:~# crictl config runtime-endpoint unix:///run/cri-dockerd.sock

[Step2] 验证:列出当前节点上容器运行时中存储的所有镜像,没有报错信息则正常。

root@k8s-master:~# crictl images

9. 初始化k8s集群

[Step1] 导出kubeadm init的默认配置模版,方便后续自定义集群初始化参数。

root@k8s-master:~# kubeadm config print init-defaults > kubeadm.yaml

[Step2]编辑默认配置模版,修改相关参数。

root@k8s-master:~# vim kubeadm.yaml

# 修改下列参数
advertiseAddress: 192.168.8.3   # Master节点的IP地址

# 容器运行时的套接字路径
criSocket: unix:///var/run/cri-dockerd.sock

# Master节点的节点名
name: k8s-master

# 系统组件镜像的仓库地址
imageRepository: registry.aliyuncs.com/google_containers

# 在networking块中添加下列内容,指定pod的子网
podSubnet: 172.16.0.0/16

[Step3] 验证:列出当前kubeadm版本所需要下载的所有核心组件镜像。一般情况下,能够正常列出镜像,也就能够正常下载。

root@k8s-master:~# kubeadm config images list

[Step4] 初始化集群,此时会自动下载系统组件的镜像。

root@k8s-master:~# kubeadm init --config kubeadm.yaml

[Step5] 复制初始化成功后的提示命令,授予执行命令的用户具备操作集群的权限。

root@k8s-master:~# mkdir -p $HOME/.kube
root@k8s-master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[Step6] 验证:查看集群中所有节点的状态、角色和版本信息,Master节点的状态为“NotReady“是因为还没有部署网络插件。

root@k8s-master:~# kubectl get nodes

10. 部署Calico网络插件

主流的网络插件有Flannel和Calico,以下选用Calico。网络插件只需要在Master节点部署。

如果无法正常下载,可以访问我提供的百度云链接下载Calico镜像。

[Step1] 在部署Calico网络插件前,先查看当前本地的容器镜像,目的是为了与拉取Calico相关镜像后作对比。

root@k8s-master:~# docker images

[Step2] 当前Calico的最新稳定版本为v3.31.4,可以通过GitHub仓库的Releases板块查询版本信息。

https://github.com/projectcalico/calico

[Step3] 使用wget下载calico.yaml文件。

root@k8s-master:~# wget https://raw.githubusercontent.com/projectcalico/calico/v3.31.4/manifests/calico.yaml

[Step4] 下载完成后,编辑calico.yaml文件。因为我们在初始化k8s集群的时候,手动指定pod的子网,这里需要修改与其一致。

root@k8s-master:~# vim calico.yaml

# 修改下列参数
# 需要和集群部署中的[podSubnet: 172.16.0.0/16]一致
- name: CALICO_IPV4POOL_CIDR
  value: "172.16.0.0/16"

[Step5] 安装Calico。

root@k8s-master:~# kubectl apply -f calico.yaml

[Step6] 如果网络没有问题,此时会自动下载所需镜像。因为Calico没有提供进度条,所以无法直观的查看是否正在下载。这里可以打开任务管理器,查看网卡是否有流量波动,以此判断是否正在下载。

[Step7] 等待一段时间后,查看所有命名空间下所有Pod的状态,全部状态为“Running”则安装成功。

root@k8s-master:~# kubectl get pods -A

[Step8] 验证:查看当前本地的容器镜像,与未安装Calico之前对比,多出了三个镜像。

root@k8s-master:~# docker images

三、worker节点加入master

worker节点加入master的先决条件

  1. 安装容器运行时,如果是Docker,则需要额外安装CRI-Docker

  2. 关闭并禁用SWAP分区

  3. 允许IPtables桥接流量

  4. 安装kubeadm

  5. 集成CRI-Docker

  6. 在节点添加master的解析,在master添加节点的解析

1. 安装容器运行时

[Step1] 执行命令,卸载可能会引起冲突的软件包。

root@k8s-worker1:~# apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

[Step2] 需要搭建Docker仓库,从配置的软件源中下载最新的包列表,更新本地缓存,安装相应组件。

root@k8s-worker1:~# apt-get update
root@k8s-worker1:~# apt-get install -y ca-certificates curl gnupg lsb-release

[Step3] 创建GPG密钥目录并设置权限0755,“/etc/apt/keyrings”目录是APT包管理体系中专门用于存储软件源 GPG 验证密钥的官方标准目录。下载Docker公钥文件,并给公钥文件赋予只读权限。【如果无法正常下载,可以访问我提供的百度云链接下载docker公钥】

root@k8s-worker1:~# install -m 0755 -d /etc/apt/keyrings
root@k8s-worker1:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
root@k8s-worker1:~#  chmod a+r /etc/apt/keyrings/docker.asc

[Step4] 添加Docker仓库。

root@k8s-worker1:~# vim /etc/apt/sources.list.d/docker.sources

# 在仓库文件中写入下列内容
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc

[Step5] 添加完Docker仓库源后,更新包列表和本地缓存。

root@k8s-worker1:~# apt-get update

[Step6] 安装Docker包,Docker服务在安装后会自动启动。

root@k8s-worker1:~# apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

[Step7] 验证:查看docker服务的状态。

root@k8s-worker1:~# systemctl status docker.service

2. 安装CRI-Docker

[Step1] 部署完Docker-CE后还需要cri-docker shim才能够与Kubernetes通信。Kubernetes使用CRI(容器运行时接口)与容器运行时进行通信,但是Docker不支持CRI,需要借助cri-dockerd作为中间层协助。先到GitHub上下载cri-dockerd,然后安装。【如果无法正常下载,可以访问我提供的百度云链接下载cri-dockerd】

root@k8s-worker1:~# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb
root@k8s-worker1:~# dpkg -i cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb

[Step2] 验证:查看cri-dockerd的服务状态,同时能够看到服务配置文件在“/usr/lib/systemd/system/”目录。

root@k8s-worker1:~# systemctl status cri-docker.service

[Step3] 复制服务的配置文件到“/etc/systemd/system”目录,systemd会优先读取“/etc/systemd/system”目录的配置文件。这样后续修改文件不会影响系统的默认配置。

root@k8s-worker1:~# cp /usr/lib/systemd/system/cri-docker.service /etc/systemd/system/cri-docker.service

[Step4] 修改服务的启动参数,加速镜像访问速度。

root@k8s-worker1:~# vim /etc/systemd/system/cri-docker.service

# 修改下列参数信息
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1

[Step5] 重新加载systemd配置以及重启cri-dockerd服务。

root@k8s-worker1:~# systemctl daemon-reload
root@k8s-worker1:~# systemctl restart cri-docker.service

[Step6] 验证:查看cri-docker服务状态,能够看到配置文件变更为“/etc/systemd/system”目录下的配置文件。

root@k8s-worker1:~# systemctl status cri-docker.service

3. 禁用SWAP分区

[Step1] 在Kubernetes1.34版本以前要求禁用swap分区,否则kubelet会拒绝启动。虽然目前版本为1.34以上,但是仍然建议遵守。

root@k8s-worker1:~# swapoff -a		// 临时卸载所有swap分区

// 编辑fstab文件,注释掉swap挂载配置
root@k8s-worker1:~# vim /etc/fstab
#/swap.img      none    swap    sw      0       0

4. 允许IPtables桥接流量

[Step1] 编辑配置文件,确保“br_netfilter”内核模块开机自动加载。

root@k8s-worker1:~# vim /etc/modules-load.d/k8s.conf

# 写入下列内容
br_netfilter

[Step2] 手动加载内核模块使其立即生效。

root@k8s-worker1:~# modprobe br_netfilter

[Step3] 验证:查看模块是否加载,有回显结果表示已加载。

root@k8s-worker1:~# lsmod | grep br_netfilter

[Step4] 编辑sysctl内核参数文件,此配置文件需要重启生效。

root@k8s-worker1:~# vim /etc/sysctl.d/k8s.conf

# 写入下列内容
net.bridge.bridge-nf-call-ip6tables = 1  # 让iptables规则作用于IPv6的桥接流量
net.bridge.bridge-nf-call-iptables = 1   # 让iptables规则作用于IPv4的桥接流量
net.ipv4.ip_forward = 1  # 开启Linux内核的IPv4转发功能

[Step5] 执行命令使得配置立即生效。

root@k8s-worker1:~# sysctl --system

5. 安装kubeadm

[Step1] 安装kubeadm依赖,其中“apt-transport-https”让APT支持通过HTTPS协议下载软件包。

root@k8s-worker1:~# apt-get update
root@k8s-worker1:~# apt-get install -y apt-transport-https curl

[Step2] 添加阿里云的Kubernetes镜像仓库,截止目前最新的版本为1.35,这里我们指定安装与master相同的版本1.32。

root@k8s-worker1:~# vim /etc/apt/sources.list.d/k8s.list

# 写入下列内容
deb https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb /

[Step3] 下载Kubernetes对应版本公钥。同样可以访问网站,手动下载公钥然后导入系统。在Ubuntu 20.04+ 版本中,“apt-key”命令被标记为废弃,所以在执行命令时会提示警告。

root@k8s-worker1:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key | apt-key add -

[Step4] 重新获取软件包列表。

root@k8s-worker1:~# apt-get update

[Step5] 安装kubelet、kubeadm和kubectl。为了确保组件包的版本不会被任何操作影响,需要锁定组件的版本。如果后期需要升级,将“hold”替换为“unhold”解锁即可。

root@k8s-worker1:~# apt-get install -y kubelet kubeadm kubectl
root@k8s-worker1:~# apt-mark hold kubelet kubeadm kubectl

6. 添加命令补全

[Step1] 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录。

root@k8s-worker1:~# kubectl completion bash > /etc/bash_completion.d/kubectl
root@k8s-worker1:~# kubeadm completion bash > /etc/bash_completion.d/kubeadm

[Step2] 立即加载kubectl和kubeadm脚本,仅在当前会话生效。

root@k8s-worker1:~# source /etc/bash_completion.d/kubectl
root@k8s-worker1:~# source /etc/bash_completion.d/kubeadm

7. 集成CRI-Docker

[Step1] 配置crictl的默认运行时端点,指定连接的容器运行时套接字。

root@k8s-worker1:~# crictl config runtime-endpoint unix:///run/cri-dockerd.sock

8. 检查彼此解析

[Step1] 在k8s-master上验证k8s-worker1的解析。

root@k8s-master:~# ping -c 3 k8s-worker1

[Step2] 在k8s-worker1上验证k8s-master的解析。

root@k8s-worker1:~# ping -c 3 k8s-master

9. worker节点加入master

[Step1] 如果长时间忘记了join命令,可以在k8s-master节点上重新生成。

root@k8s-master:~# kubeadm token create --print-join-command

[Step2] 在k8s-worker1节点上执行join命令加入k8s-master节点。在Kubernetes 1.24+版本中,如果使用cri-dockerd则需要加上“--cri-socket”参数。核心原因是kubeadm的默认CRI套接字指向containerd,而非cri-dockerd,导致自动检测失败或错误。

root@k8s-worker1:~# kubeadm join 192.168.8.3:6443 --token 02ds4k.2t3ingb8lm6rw2q2 --discovery-token-ca-cert-hash sha256:0650e79a40fc460c67c4b1de7872e9e5f3d88ac458ae7bae18d6c59c0aba6b8f --cri-socket=unix:///var/run/cri-dockerd.sock

[Step3] 在master节点上为worker节点加上角色标签,便于资源调度和管理。

root@k8s-master:~# kubectl label nodes k8s-worker1 node-role.kubernetes.io/worker=worker
  • kubectl label nodes:对kubernetes的节点资源加上标签

  • k8s-worker:操作的节点名称

  • node-role.kubernetes.io/worker=:设置的标签

  • worker:设置的标签值


Windows Server | iSCSI单向/双向CHAP认证 2026-04-02
RHEL9部署Kubernetes 1.32集群 2026-04-25

评论区