diff --git a/install_k8s/install_k8s_ubuntu-final.sh b/install_k8s/install_k8s_ubuntu-final.sh index ee7515a..203873b 100644 --- a/install_k8s/install_k8s_ubuntu-final.sh +++ b/install_k8s/install_k8s_ubuntu-final.sh @@ -1,8 +1,9 @@ #!/bin/bash # --------------------------------------------------------- -# Kubernetes (K8s) 高可用集群自动化脚本 (Ubuntu 专用 Final 版) +# Kubernetes (K8s) 高可用集群自动化脚本 (Ubuntu 专用 V5 完美防弹版) # 包含: 基础环境、组件安装、HAProxy+Keepalived VIP、K8s 初始化 -# 解决: Containerd 2.x 兼容性、HAProxy 离线绑定崩溃、Crictl 警告等历史难题 +# 修复: Containerd 2.x 兼容性、HAProxy 离线绑定崩溃、Crictl 警告 +# 核心升级: 完美解决重复执行时的 apt-mark hold 包锁定死锁问题 # --------------------------------------------------------- # ================= 变量配置区 (执行前务必修改) ================= @@ -55,7 +56,7 @@ EOF modprobe overlay modprobe br_netfilter - # 【核心配置】增加 ip_nonlocal_bind,允许 HAProxy 绑定还未漂移过来的 VIP + # 增加 ip_nonlocal_bind,允许 HAProxy 绑定还未漂移过来的 VIP cat < 系统环境初始化完成。${NC}" } -# 2. 安装并锁定 Containerd 1.6.x (避开 2.x 的巨坑) +# 2. 安装并锁定 Containerd 1.6.x function install_containerd() { echo -e "${GREEN}==> 开始安装 Containerd (强制降级并锁定 1.6.x 稳定版)...${NC}" - # 清理可能存在的旧版本或不兼容的 2.x 版本 - apt-get purge -y containerd containerd.io + # 【核心修复】:强制解除之前的包锁定,防止卸载和重装失败 + apt-mark unhold containerd containerd.io 2>/dev/null || true + + # 清理可能存在的旧版本或不兼容的 2.x 版本 (加入允许修改 hold 包的参数以防万一) + apt-get purge -y --allow-change-held-packages containerd containerd.io apt-get autoremove -y - rm -rf /etc/containerd/ + rm -rf /etc/containerd/ /var/run/containerd/ /run/containerd/ apt-get update -y apt-get install -y apt-transport-https ca-certificates curl software-properties-common gpg @@ -94,7 +98,7 @@ function install_containerd() { exit 1 fi echo -e "${YELLOW}匹配到稳定版本: ${VER}${NC}" - apt-get install -y --allow-downgrades containerd.io=$VER + apt-get install -y --allow-downgrades --allow-change-held-packages containerd.io=$VER # 锁定版本,防止无人值守更新将其升级到 2.x apt-mark hold containerd.io @@ -108,7 +112,7 @@ function install_containerd() { systemctl daemon-reload systemctl enable --now containerd - # 【核心配置】配置 crictl,消除 socket 警告 + # 配置 crictl,消除 socket 警告 cat < 开始安装 kubeadm, kubelet, kubectl (使用阿里云新版 APT 源)...${NC}" + + # 【核心修复】:强制解除 K8s 组件的包锁定 + apt-mark unhold kubelet kubeadm kubectl 2>/dev/null || true + mkdir -p /etc/apt/keyrings rm -f /etc/apt/keyrings/kubernetes-apt-keyring.gpg @@ -128,7 +136,7 @@ function install_k8s_tools() { echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list apt-get update -y - apt-get install -y kubelet kubeadm kubectl + apt-get install -y --allow-downgrades --allow-change-held-packages kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl systemctl enable --now kubelet @@ -265,12 +273,5 @@ case "$1" in ;; *) echo -e "${YELLOW}用法: sudo $0 {base|init-vip-master|init-vip-backup|init-master}${NC}" - echo "" - echo "多 Master 节点高可用部署标准流程:" - echo "1. 所有节点准备环境: sudo ./install_k8s_ubuntu_final.sh base" - echo "2. Master01 设置为主 LB: sudo ./install_k8s_ubuntu_final.sh init-vip-master" - echo "3. 其它 Master 设置为备 LB: sudo ./install_k8s_ubuntu_final.sh init-vip-backup" - echo "4. Master01 初始化集群: sudo ./install_k8s_ubuntu_final.sh init-master" - echo "5. 复制输出的 join 命令,到其他 Master 和 Worker 节点上手动执行。" exit 1 esac \ No newline at end of file