当前位置: 首页 > news >正文

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地址

image-20250810192927465

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"

确保在集群中唯一:image-20250810194851119

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 ens32nmcli 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 ens32nmcli 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 ens32nmcli 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 ens32nmcli 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

image-20250810195416497

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

image-20250810195704293

2.4 配置终端提示符(可选)

cat > ~/.bashrc << 'EOF'
PS1='[\[\e[31m\]\u\[\e[33m\]@\[\e[36m\]\h \[\e[32m\]\w\[\e[37m\]]\$ \[\e[m\]'
EOF
source ~/.bashrc

image-20250810195833309

2.5 关闭swap

swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

image-20250810200025940

2.6 关闭防火墙和selinux

systemctl disable firewalld --now && setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

image-20250810200201327

2.7 配置主机名解析和免密

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;dosshpass -e ssh-copy-id -o StrictHostKeyChecking=no $HOST
done

2.8 配置时钟同步

配置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

image-20250810201554274

重启并查看:

systemctl restart chronyd
chronyc sources

2.9 启用 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.10 加载br_betfilter模块

modprobe br_netfilter
cat <<EOF> /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

2.11 加载 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'

image-20250811191943709

三、安装docker-ce作为容器运行时

3.1 安装docker

#下载docker-ce
curl -LO https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-27.4.0.tgz
#解压,可能要先安装tar:yum -y install tar
tar xf docker-*.tgz
cp docker/* /usr/bin/

3.1.1 创建containerd服务文件:

cat >/etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999[Install]
WantedBy=multi-user.target
EOF#设置开机自启
systemctl enable --now containerd.service
systemctl status containerd.service

3.1.2 创建docker的服务文件:

cat > /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service cri-docker.service docker.socket containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
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
OOMScoreAdjust=-500[Install]
WantedBy=multi-user.target
EOF

3.1.3 准备docker的socket文件

cat > /etc/systemd/system/docker.socket <<EOF
[Unit]
Description=Docker Socket for the API[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Install]
WantedBy=sockets.target
EOF

配置镜像加速

mkdir /etc/docker/ -pv
cat >/etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://jockerhub.com"],"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "10m","max-file": "3"},"data-root": "/var/lib/docker"
}
EOF

设置 Docker 使用 systemd 作为 cgroup 驱动,确保与 Kubernetes 的资源管理一致
"exec-opts": ["native.cgroupdriver=systemd"]

启动docker

groupadd docker
#创建docker组systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件(如.service文件、.socket文件等),需要运行该命令来刷新systemd对该文件的配置。systemctl enable --now docker.socket
# 启用并立即启动docker.socket单元。docker.socket是一个systemd的socket单元,用于接收来自网络的Docker API请求。systemctl enable --now docker.service
# 启用并立即启动docker.service单元。docker.service是Docker守护进程的systemd服务单元。systemctl status docker.service
# 显示docker.service单元的当前状态,包括运行状态、是否启用等信息。docker info
#验证rm -rf docker*
#删除

检查:

docker info | grep 'Cgroup Driver

image-20250811193140799

3.1.4 安装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 -r cri-dockerd/  /usr/bin/
#给执行权限
chmod +x /usr/bin/cri-dockerd/cri-dockerd
#删除
rm -rf cri-dockerd*#查看软件启动帮助
/usr/bin/cri-dockerd/cri-dockerd --help

image-20250811043501176

image-20250810230915172

  • --container-runtime-endpoint :后端运行时服务的端点。目前在 Linux 上支持 Unix 套接字和 TCP 端点,在 Windows 上支持命名管道(npipe)和 TCP 端点。
  • --pod-infra-container-image :沙箱容器(pause 容器)使用的镜像,在 Kubernetes 中扮演的是 Pod 的基础容器,每隔pod里面都会有这个容器,用于管理 Pod 的生命周期,网络等等。从默认仓库拉取比较困难,下面是配置了从国内阿里云拉取

3.1.5 写入启动cri-docker配置文件

cat >  /usr/lib/systemd/system/cri-docker.service <<EOF
[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/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
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.1.6 写入cri-docker的socket配置文件

cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[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

# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件(如.service文件、.socket文件等),需要运行该命令来刷新systemd对该文件的配置。
systemctl daemon-reload# 启用并立即启动cri-docker.service单元。cri-docker.service是cri-docker守护进程的systemd服务单元。
systemctl enable --now cri-docker.service# 查看状态
systemctl status docker.service

测试是否接管成功:

#下载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

image-20250811050116077

四、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 负载均衡
# =========================globalmaxconn 2000                          # 最大并发连接数,防止连接过载ulimit-n 16384                        # 设置文件描述符上限,适配高并发场景log 127.0.0.1 local0 err              # 日志输出到本地 syslog,级别为 err(建议改为 info)stats timeout 30s                     # 状态页面连接超时时间defaultslog 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-inbind *:33305                          # 监听所有 IP 的 33305 端口,用于健康检查mode http                             # 使用 HTTP 模式option httplog                        # 启用 HTTP 日志monitor-uri /monitor                 # 访问 /monitor 返回 200,用于 Keepalived 检查# =========================
# Kubernetes API Server 接入入口
# =========================
frontend k8s-masterbind 0.0.0.0:9443                     # 所有外部 IP 可访问的 9443 端口bind 127.0.0.1:9443                   # 本地回环地址也监听 9443(便于本机访问)mode tcp                              # 使用 TCP 模式,适用于 Kubernetes API Serveroption tcplog                         # 启用 TCP 层日志tcp-request inspect-delay 5s          # 延迟 TCP 请求检查 5 秒(用于连接检测)default_backend k8s-master            # 默认转发到 backend k8s-master# =========================
# 后端 Kubernetes API Server 集群
# =========================
backend k8s-mastermode 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:权重 100server 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

image-20250811010756389

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 keepalivedglobal_defs {router_id LVS_DEVEL
}
vrrp_script chk_apiserver {script "/etc/keepalived/check_apiserver.sh"        #检查脚本,检查失败将漂移VIP地址interval 5 weight -5fall 2rise 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                                       #当前节点优先级,数值越大越优先成为 MASTERnopreemptadvert_int 2authentication {auth_type PASSauth_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 keepalivedglobal_defs {router_id LVS_DEVEL
}
vrrp_script chk_apiserver {script "/etc/keepalived/check_apiserver.sh"        #检查脚本,检查失败将漂移VIP地址interval 5 weight -5fall 2rise 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                                        #当前节点优先级,数值越大越优先成为 MASTERnopreemptadvert_int 2authentication {auth_type PASSauth_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 keepalivedglobal_defs {router_id LVS_DEVEL
}
vrrp_script chk_apiserver {script "/etc/keepalived/check_apiserver.sh"         #检查脚本,检查失败将漂移VIP地址interval 5 weight -5fall 2rise 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                                         #当前节点优先级,数值越大越优先成为 MASTERnopreemptadvert_int 2authentication {auth_type PASSauth_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)
docheck_code=\$(pgrep haproxy)if [[ \$check_code == "" ]]; thenerr=\$(expr \$err + 1)sleep 1continueelseerr=0breakfi
doneif [[ \$err != "0" ]]; thenecho "systemctl stop keepalived"/usr/bin/systemctl stop keepalivedexit 1
elseexit 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

image-20250811003249690

我们把k8s-master01节点关闭测试VIP是否回漂移:

[root@k8s-master01 ~]# shutdown -h now

漂到了k8s-master02节点上:

image-20250811011940119

再把k8s-master02节点关闭:

[root@k8s-master02 ~]# shutdown -h now

漂到了k8s-master03节点上:

image-20250811012139977

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

image-20250811012323537

五、安装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版本,所以找到的也只有这个版本:

image-20250811013625256

所有节点安装软件:

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查看帮助:

image-20250811015121873

可以查看需要的镜像有哪些:

image-20250811015200643

但是这些镜像国内很难拉取,需要换成国内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

image-20250811201415238

其它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

image-20250811080853812

然后再按照它给的提示安装网络插件:

Installing Addons | Kubernetes

 #下载yaml文件curl -LO https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml#替换镜像仓库sed -i 's#ghcr.io/flannel-io#registry.cn-hangzhou.aliyuncs.com/guojie-k8s#g' kube-flannel.yml#创建网络插件资源kubectl create -f kube-flannel.yml

等资源启动完毕节点状态就会Ready:

image-20250811082244919

http://www.sczhlp.com/news/10140/

相关文章:

  • 安装pandas和openpyxl
  • pandas用法
  • 第三章 训练初步深入(3)
  • 安装pandas
  • 奥林匹克小丛书小蓝本习题另解或加强(数论卷)(一)
  • 关于磁盘io性能的命令
  • 房屋防水是建筑工程中非常重要的一部分,通常需要根据不同的环境、建筑结构和使用需求来采取相应的防水措施。国家标准对防水工程的要求有详细规定,以下是常见的防水相关国家标准和要求:
  • Hulo 编程语言开发 —— 从源代码到 AST 的魔法转换
  • python中enumerate的作用
  • ly-容斥杂题选讲
  • 前向传播 反向传播
  • Attention 显存计算 推理训练复杂度
  • NLP随记
  • RL 随记
  • top命令详解
  • 2025杭电暑期(8) 最努力的活着 推式子
  • 从输入网址到看到页面:一段看不见的旅程
  • 牛客周赛109补题
  • stress命令详解
  • Nvidia Proprietary GPU Drivers
  • dd命令生成文件详解
  • 关于PVC排水管系统中存水弯设计的常见类型分类表格:
  • 一个好点子,但是我克制住了
  • 软考系统分析师每日学习卡 | [日期:2025-08-11] | [今日主题:数据库设计过程-概念结构设计阶段]
  • 2025年8月11日
  • 基于AOA算术优化的KNN数据聚类算法matlab仿真
  • strace命令
  • 基于最优转子磁链混合效率优化控制和铁损补偿的PMSM控制系统simulink建模与仿真
  • python中raise的用法
  • alias命令