kubernetes-1.32高可用集群部署(kubeadm)
一、主机规划
| 角色 | IP地址 | OS | 配置 |
|---|---|---|---|
| k8s-master01 | 172.173.10.111/24 | Rocky 9.5 | 4C+8G+40GB |
| k8s-master02 | 172.173.10.112/24 | Rocky 9.5 | 4C+8G+40GB |
| k8s-master03 | 172.173.10.113/24 | Rocky 9.5 | 4C+8G+40GB |
| k8s-node01 | 172.173.10.114/24 | Rocky 9.5 | 4C+8G+40GB |
| k8s-node02 | 172.173.10.115/24 | Rocky 9.5 | 4C+8G+40GB |
| LB | 172.173.10.110/24 | Rocky 9.5 |
二、环境初始化
2.1生成新唯一标识(非克隆跳过)
2.1.1克隆的时候重新生成mac地址

2.1.2 生成新machine-id
# 注意!
# 若虚拟机是进行克隆的那么网卡的UUID和MachineID会重复
# 需要重新生成新的UUIDUUID和MachineID
# UUID和MachineID重复无法DHCP获取到IPV6地址
ssh root@172.173.10.111 "rm -rf /etc/machine-id; systemd-machine-id-setup;reboot"
ssh root@172.173.10.112 "rm -rf /etc/machine-id; systemd-machine-id-setup;reboot"
ssh root@172.173.10.113 "rm -rf /etc/machine-id; systemd-machine-id-setup;reboot"
ssh root@172.173.10.114 "rm -rf /etc/machine-id; systemd-machine-id-setup;reboot"
ssh root@172.173.10.115 "rm -rf /etc/machine-id; systemd-machine-id-setup;reboot"
2.2 配置IP地址
#生成新网卡UUID
sed -i "s/^uuid=.*/uuid=$(uuidgen)/" /etc/NetworkManager/system-connections/ens32.nmconnection
sed -i "s/^uuid=.*/uuid=$(uuidgen)/" /etc/NetworkManager/system-connections/ens32.nmconnection
sed -i "s/^uuid=.*/uuid=$(uuidgen)/" /etc/NetworkManager/system-connections/ens32.nmconnection
sed -i "s/^uuid=.*/uuid=$(uuidgen)/" /etc/NetworkManager/system-connections/ens32.nmconnection
sed -i "s/^uuid=.*/uuid=$(uuidgen)/" /etc/NetworkManager/system-connections/ens32.nmconnection
#配置网卡静态IP
nmcli con mod ens32 ipv4.addresses 172.173.10.111/24; nmcli con mod ens32 ipv4.gateway 172.173.10.254; nmcli con mod ens32 ipv4.method manual; nmcli con mod ens32 ipv4.dns 223.5.5.5; nmcli con up ens32
nmcli con mod ens32 ipv4.addresses 172.173.10.112/24; nmcli con mod ens32 ipv4.gateway 172.173.10.254; nmcli con mod ens32 ipv4.method manual; nmcli con mod ens32 ipv4.dns 223.5.5.5; nmcli con up ens32
nmcli con mod ens32 ipv4.addresses 172.173.10.113/24; nmcli con mod ens32 ipv4.gateway 172.173.10.254; nmcli con mod ens32 ipv4.method manual; nmcli con mod ens32 ipv4.dns 223.5.5.5; nmcli con up ens32
nmcli con mod ens32 ipv4.addresses 172.173.10.114/24; nmcli con mod ens32 ipv4.gateway 172.173.10.254; nmcli con mod ens32 ipv4.method manual; nmcli con mod ens32 ipv4.dns 223.5.5.5; nmcli con up ens32
nmcli con mod ens32 ipv4.addresses 172.173.10.115/24; nmcli con mod ens32 ipv4.gateway 172.173.10.254; nmcli con mod ens32 ipv4.method manual; nmcli con mod ens32 ipv4.dns 223.5.5.5; nmcli con up ens32

2.3 设置主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-master02
hostnamectl set-hostname k8s-master03
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

2.4 配置终端提示符(可选)
cat > ~/.bashrc << 'EOF'
PS1='[\[\e[31m\]\u\[\e[33m\]@\[\e[36m\]\h \[\e[32m\]\w\[\e[37m\]]\$ \[\e[m\]'
EOF
source ~/.bashrc

2.5 配置国内软件仓库
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky-*.repo
dnf makecache
2.6 关闭swap
swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

2.7 关闭防火墙和selinux
# 关闭防火墙和selinux
systemctl disable firewalld --now && setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grubby --update-kernel ALL --args selinux=0
#把防火墙改为iptables
yum -y install iptables-services
systemctl enable iptables --now
iptables -F
service iptables save
systemctl restart iptables
iptables -nL

2.8 配置主机名解析和免密
cat <<EOF>> /etc/hosts
172.173.10.111 k8s-master01 m1
172.173.10.112 k8s-master02 m2
172.173.10.113 k8s-master03 m3
172.173.10.114 k8s-node01 n1
172.173.10.115 k8s-node02 n2
172.173.10.110 lb-vip
EOF
yum install -y sshpass
ssh-keygen -f /root/.ssh/id_rsa -P ''
export IP="m1 m2 m3 n1 n2"
export SSHPASS=123123 #换成自己的root登录密码
for HOST in $IP;do
sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $HOST
done
2.9 配置时钟同步
配置k8s-master01作为chronyd服务端:
[root@k8s-master01 ~]# grep -Ev '^#|^$' /etc/chrony.conf
server ntp.aliyun.com iburst #修改原来的,向阿里云时钟服务器同步时间
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 172.173.10.0/24 #允许过来请求同步的网段
local stratum 10 #取消注释,启用后,即使没有公网NTP,chronyd仍可作为时间服务器给客户端同步。
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
其它节点向它同步时间:
# grep -Ev '^#|^$' /etc/chrony.conf
server k8s-master01 iburst #向k8s-master01节点同步
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony

重启并查看:
systemctl restart chronyd
chronyc sources
2.10 启用 IPv4 数据包转发
cat <<EOF> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 # 启用 IPv6 桥接流量进入 ip6tables(可选,若使用 IPv6 网络插件则必须)
net.bridge.bridge-nf-call-iptables = 1 # 启用 IPv4 桥接流量进入 iptables(必须,Kubernetes 网络插件依赖)
net.ipv4.ip_forward = 1 # 启用 IPv4 转发(必须,Pod 网络通信依赖)
vm.swappiness = 0 # 禁用 swap 的内核倾向(必须,Kubelet 要求 swap 被关闭)
EOF
sysctl --system
sysctl net.ipv4.ip_forward
2.11 加载br_betfilter模块
modprobe br_netfilter
cat <<EOF> /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
2.12 加载 ipvs 网络转发模块
#安装软件
yum -y install ipset ipvsadm
#加载转发模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack
#开机自动加载转发模块
cat <<EOF > /etc/modules-load.d/ipvs.conf
ip_vs # 核心 IPVS 模块,启用虚拟服务调度功能
ip_vs_rr # IPVS 轮询调度算法(Round Robin)
ip_vs_wrr # IPVS 加权轮询调度算法(Weighted Round Robin)
ip_vs_sh # IPVS 源地址哈希调度算法(Source Hash)
nf_conntrack # IPv4 连接跟踪模块(用于 NAT、防火墙等连接状态管理)
EOF
#检查加载情况
lsmod | grep -E 'ip_vs|nf_conntrack'

三、安装docker-ce作为容器运行时
3.1 安装docker
# 添加仓库
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看软件支持版本
yum list docker-ce --showduplicates | sort -r
# 安装docker-ce
yum -y install docker-ce-27.4.0 docker-ce-cli-27.4.0
# 配置 daemon.
cat > /etc/docker/daemon.json <<EOF
{
"data-root": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "100"
},
"insecure-registries": ["harbor.xinxainghf.com"],
"registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
设置 Docker 使用 systemd 作为 cgroup 驱动,确保与 Kubernetes 的资源管理一致
"exec-opts": ["native.cgroupdriver=systemd"]
检查:
docker info | grep 'Cgroup Driver'

3.2 安装cri-docker
k8s调度docker的过程如下,需要依赖cri-docker:
Kubelet
│
│-- CRI socket: unix:///run/cri-dockerd.sock
↓
cri-dockerd
│
│-- Docker socket: unix:///run/docker.sock
↓
Docker Engine
# 下载
curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz
#解压
tar xvf cri-dockerd-*.amd64.tgz
#拷贝
cp cri-dockerd/cri-dockerd /usr/bin/
#给执行权限
chmod +x /usr/bin/cri-dockerd
#删除
rm -rf cri-dockerd*
#查看软件启动帮助
cri-dockerd --help


- --container-runtime-endpoint :后端运行时服务的端点。目前在 Linux 上支持 Unix 套接字和 TCP 端点,在 Windows 上支持命名管道(npipe)和 TCP 端点。
- --pod-infra-container-image :沙箱容器(pause 容器)使用的镜像,在 Kubernetes 中扮演的是 Pod 的基础容器,每隔pod里面都会有这个容器,用于管理 Pod 的生命周期,网络等等。从默认仓库拉取比较困难,下面是配置了从国内阿里云拉取
3.2.1 写入启动cri-docker配置文件
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
3.2.2 写入cri-docker的socket配置文件
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
启动cri-docker
systemctl daemon-reload
systemctl enable cri-docker
systemctl start cri-docker
systemctl is-active cri-docker
测试是否接管成功:
#下载crictl工具
curl -LO https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.0/crictl-v1.27.0-linux-amd64.tar.gz
#解压
tar xf crictl-v1.27.0-linux-amd64.tar.gz -C /usr/local/bin/
#配置crictl工具
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///var/run/cri-dockerd.sock
image-endpoint: unix:///var/run/cri-dockerd.sock
timeout: 10
debug: false
EOF
#测试
crictl image ls
#测试cri-dockerd是否接管成功
crictl --runtime-endpoint unix:///var/run/cri-dockerd.sock info

四、keepalived和haproxy 高可用方案
所有master节点安装:
yum -y install keepalived haproxy
4.1 haproxy配置
修改最后后面的三个master节点的检查IP端口,检查的是api-server的端口,所有master节点配置一致:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
cat >/etc/haproxy/haproxy.cfg<<"EOF"
# =========================
# HAProxy 高可用配置文件
# 用于三主节点 Kubernetes API 负载均衡
# =========================
global
maxconn 2000 # 最大并发连接数,防止连接过载
ulimit-n 16384 # 设置文件描述符上限,适配高并发场景
log 127.0.0.1 local0 err # 日志输出到本地 syslog,级别为 err(建议改为 info)
stats timeout 30s # 状态页面连接超时时间
defaults
log global # 使用 global 段定义的日志配置
mode http # 默认使用 HTTP 模式(适用于 monitor)
option httplog # 使用 HTTP 格式日志
timeout connect 5000 # 连接超时:5 秒
timeout client 50000 # 客户端超时:50 秒
timeout server 50000 # 后端服务器响应超时:50 秒
timeout http-request 15s # HTTP 请求超时:15 秒
timeout http-keep-alive 15s # HTTP keep-alive 超时:15 秒
# =========================
# 健康检查入口(供 Keepalived 使用)
# =========================
frontend monitor-in
bind *:33305 # 监听所有 IP 的 33305 端口,用于健康检查
mode http # 使用 HTTP 模式
option httplog # 启用 HTTP 日志
monitor-uri /monitor # 访问 /monitor 返回 200,用于 Keepalived 检查
# =========================
# Kubernetes API Server 接入入口
# =========================
frontend k8s-master
bind 0.0.0.0:9443 # 所有外部 IP 可访问的 9443 端口
bind 127.0.0.1:9443 # 本地回环地址也监听 9443(便于本机访问)
mode tcp # 使用 TCP 模式,适用于 Kubernetes API Server
option tcplog # 启用 TCP 层日志
tcp-request inspect-delay 5s # 延迟 TCP 请求检查 5 秒(用于连接检测)
default_backend k8s-master # 默认转发到 backend k8s-master
# =========================
# 后端 Kubernetes API Server 集群
# =========================
backend k8s-master
mode tcp # 使用 TCP 模式
option tcp-check # 启用 TCP 健康检查
balance roundrobin # 使用轮询方式分发请求
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
# 健康检查与连接控制参数:
# inter:正常检查间隔 10 秒
# downinter:异常检查间隔 5 秒
# rise:连续 2 次成功认为恢复
# fall:连续 2 次失败认为故障
# slowstart:恢复后 60 秒内缓慢接入
# maxconn:最大连接数 250
# maxqueue:最大排队数 256
# weight:权重 100
server k8s-master01 172.173.10.111:6443 check # 第一个 master 节点
server k8s-master02 172.173.10.112:6443 check # 第二个 master 节点
server k8s-master03 172.173.10.113:6443 check # 第三个 master 节点
EOF
配置文件检查,确认有效:
haproxy -c -f /etc/haproxy/haproxy.cfg

4.2 keepalived配置
注意检查注释部分。
4.2.1 配置k8s-master01为MASTER:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh" #检查脚本,检查失败将漂移VIP地址
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER #配置为BACKUP角色
interface ens32 #网卡名称,vip地址漂移使用的网卡
mcast_src_ip 172.173.10.111 #本机IP,用于发送 VRRP 多播包
virtual_router_id 51 #虚拟路由器 ID,必须在所有节点保持一致
priority 100 #当前节点优先级,数值越大越优先成为 MASTER
nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
172.173.10.110 #虚拟 IP(VIP),供外部访问 Kubernetes API Server
}
track_script {
chk_apiserver
} }
EOF
4.2.2 配置k8s-master02为BACKUP:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh" #检查脚本,检查失败将漂移VIP地址
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP #配置为BACKUP角色
interface ens32 #网卡名称,vip地址漂移使用的网卡
mcast_src_ip 172.173.10.112 #本机IP,用于发送 VRRP 多播包
virtual_router_id 51 #虚拟路由器 ID,必须在所有节点保持一致
priority 80 #当前节点优先级,数值越大越优先成为 MASTER
nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
172.173.10.110 #虚拟 IP(VIP),供外部访问 Kubernetes API Server
}
track_script {
chk_apiserver
} }
EOF
4.2.3 配置k8s-master03为BACKUP:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh" #检查脚本,检查失败将漂移VIP地址
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP #配置为BACKUP角色
interface ens32 #网卡名称,vip地址漂移使用的网卡
mcast_src_ip 172.173.10.113 #本机IP,用于发送 VRRP 多播包
virtual_router_id 51 #虚拟路由器 ID,必须在所有节点保持一致
priority 50 #当前节点优先级,数值越大越优先成为 MASTER
nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
172.173.10.110 #虚拟 IP(VIP),供外部访问 Kubernetes API Server
}
track_script {
chk_apiserver
} }
EOF
4.3 准备健康检查脚本
所有master节点配置一致。
cat > /etc/keepalived/check_apiserver.sh << EOF
#!/bin/bash
err=0
for k in \$(seq 1 3)
do
check_code=\$(pgrep haproxy)
if [[ \$check_code == "" ]]; then
err=\$(expr \$err + 1)
sleep 1
continue
else
err=0
break
fi
done
if [[ \$err != "0" ]]; then
echo "systemctl stop keepalived"
/usr/bin/systemctl stop keepalived
exit 1
else
exit 0
fi
EOF
# 给脚本授权
chmod +x /etc/keepalived/check_apiserver.sh
每 5 秒执行一次(由 Keepalived 配置控制)。
连续 3 次未检测到 haproxy 进程,则认为当前节点不健康。
自动停止 keepalived 服务,释放 VIP 给其他节点。
如果 haproxy 正常运行,则返回 0,维持 VIP。
4.4 启动服务
systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件(如.service文件、.socket文件等),需要运行该命令来刷新systemd对该文件的配置。
systemctl enable --now haproxy.service
# 启用并立即启动haproxy.service单元。haproxy.service是haproxy守护进程的systemd服务单元。
systemctl enable --now keepalived.service
# 启用并立即启动keepalived.service单元。keepalived.service是keepalived守护进程的systemd服务单元。
systemctl status haproxy.service
# haproxy.service单元的当前状态,包括运行状态、是否启用等信息。
systemctl status keepalived.service
4.5 验证高可用
查看网卡的ip地址,发现目前VIP地址停留在k8s-master01节点上:
ip address show ens32

我们把k8s-master01节点关闭测试VIP是否回漂移:
[root@k8s-master01 ~]# shutdown -h now
漂到了k8s-master02节点上:

再把k8s-master02节点关闭:
[root@k8s-master02 ~]# shutdown -h now
漂到了k8s-master03节点上:

重新打开之后发现vip又回到到k8s-master01节点上:

五、安装kubectl、kubeadm、kubelet
5.1 所有节点安装kubectl、kubeadm、kubelet
配置仓库:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
查看可以安装的版本:
yum list kubeadm --showduplicates --disableexcludes=kubernetes | sort -r
由于仓库我们配置的是1.32版本,所以找到的也只有这个版本:

所有节点安装软件:
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# kubelet开启开机自启动
systemctl enable kubelet --now
安装结果测试:
[root@k8s-master01 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"32", GitVersion:"v1.32.7", GitCommit:"158eee9fac884b429a92465edd0d88a43f81de34", GitTreeState:"clean", BuildDate:"2025-07-15T18:06:15Z", GoVersion:"go1.23.10", Compiler:"gc", Platform:"linux/amd64"}
5.2 k8s-master01节点上初始化
初始化参考说明:https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/
使用kubeadm --help查看帮助:
kubeadm --help
可以查看需要的镜像有哪些:
kubeadm config images list --kubernetes-version=v1.32.7
#这里会指出沙箱版本,看见版本后重新核对cri-docker的服务文件中指定的版本,保持和这里一致。
但是这些镜像国内很难拉取,需要换成国内aliyun的镜像仓库。
# 初始化 Kubernetes 控制平面节点
# 参数说明:
# --apiserver-advertise-address:API 服务器所公布的其正在监听的 IP 地址。当前主节点IP。
# --control-plane-endpoint:为控制平面指定一个稳定的IP地址或DNS名称。VIP 或 LB 地址
# --upload-certs:将控制平面证书上传到kubeadm-certs Secret。上传证书以便其他控制平面节点加入时不用拷贝证书
# --image-repository:使用阿里云镜像仓库
# --service-cidr:Service 虚拟 IP 范围
# --pod-network-cidr:Pod 网络地址范围
# --kubernetes-version:指定版本
# --cri-socket:使用 cri-dockerd 作为容器运行时
kubeadm init \
--apiserver-advertise-address=172.173.10.111 \
--control-plane-endpoint="172.173.10.110:9443" \
--upload-certs \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr="10.96.0.0/12" \
--pod-network-cidr="10.244.0.0/16" \
--kubernetes-version=v1.32.7 \
--cri-socket=unix:///var/run/cri-dockerd.sock

其它master节点按照提示加入,需要指定容器运行时的套接字:
kubeadm join 172.173.10.110:9443 --token xz8n20.90e5orpdbd2gehxh \
--discovery-token-ca-cert-hash sha256:a48d02b5a5a8960c8d979ee11929cd3b9a226a340ae85f409424f20d954d3d64 \
--control-plane --certificate-key a9a4eaf11d5f7ac2e2885a047f82c78064d9cdb5042cbbc955f50361471d1f4c \
--cri-socket=unix:///var/run/cri-dockerd.sock
node节点不需要拷贝证书,直接加入即可,但是也要指定容器运行时的套接字路径:
kubeadm join 172.173.10.110:9443 --token xz8n20.90e5orpdbd2gehxh \
--discovery-token-ca-cert-hash sha256:a48d02b5a5a8960c8d979ee11929cd3b9a226a340ae85f409424f20d954d3d64 \
--cri-socket=unix:///var/run/cri-dockerd.sock
添加完成之后在master节点上查看:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node

然后再按照它给的提示安装网络插件:
https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-more-than-50-nodes
curl -LO https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/calico-typha.yaml
# 编辑文件修改如下配置
CALICO_IPV4POOL_CIDR 指定为 pod 地址
# 修改为 BGP 模式
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value: "Always" #改成Off
修改kube-proxy 模式为 ipvs
# kubectl edit configmap kube-proxy -n kube-system
mode: ipvs
kubectl delete pod -n kube-system -l k8s-app=kube-proxy

浙公网安备 33010602011771号