更新 install_k8s/install_k8s_ubuntu-final.sh

This commit is contained in:
2026-07-24 16:06:26 +08:00
parent 571b072884
commit 467c2e2e54
+18 -17
View File
@@ -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 <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
@@ -66,14 +67,17 @@ EOF
echo -e "${GREEN}==> 系统环境初始化完成。${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 <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
@@ -121,6 +125,10 @@ EOF
# 3. 安装 K8s 组件
function install_k8s_tools() {
echo -e "${GREEN}==> 开始安装 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