
由于部分文件需要访问外网才能够下载,这里我将部分比较难下载的软件包都上传至百度云,各位可以按需下载。 链接: 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 keyca:集群根证书
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. 节点设置
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/kubeadm8. 集成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的先决条件
安装容器运行时,如果是Docker,则需要额外安装CRI-Docker
关闭并禁用SWAP分区
允许IPtables桥接流量
安装kubeadm
集成CRI-Docker
在节点添加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 04. 允许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 --system5. 安装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 kubectl6. 添加命令补全
[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/kubeadm7. 集成CRI-Docker
[Step1] 配置crictl的默认运行时端点,指定连接的容器运行时套接字。
root@k8s-worker1:~# crictl config runtime-endpoint unix:///run/cri-dockerd.sock8. 检查彼此解析
[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=workerkubectl label nodes:对kubernetes的节点资源加上标签
k8s-worker:操作的节点名称
node-role.kubernetes.io/worker=:设置的标签
worker:设置的标签值

