更新 install_k8s/install_k8s_ubuntu-final.sh
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
# Kubernetes (K8s) 高可用集群自动化脚本 (Ubuntu 专用 Final 版)
|
# Kubernetes (K8s) 高可用集群自动化脚本 (Ubuntu 专用 V5 完美防弹版)
|
||||||
# 包含: 基础环境、组件安装、HAProxy+Keepalived VIP、K8s 初始化
|
# 包含: 基础环境、组件安装、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 overlay
|
||||||
modprobe br_netfilter
|
modprobe br_netfilter
|
||||||
|
|
||||||
# 【核心配置】增加 ip_nonlocal_bind,允许 HAProxy 绑定还未漂移过来的 VIP
|
# 增加 ip_nonlocal_bind,允许 HAProxy 绑定还未漂移过来的 VIP
|
||||||
cat <<EOF | tee /etc/sysctl.d/k8s.conf
|
cat <<EOF | tee /etc/sysctl.d/k8s.conf
|
||||||
net.bridge.bridge-nf-call-iptables = 1
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
net.bridge.bridge-nf-call-ip6tables = 1
|
net.bridge.bridge-nf-call-ip6tables = 1
|
||||||
@@ -66,14 +67,17 @@ EOF
|
|||||||
echo -e "${GREEN}==> 系统环境初始化完成。${NC}"
|
echo -e "${GREEN}==> 系统环境初始化完成。${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 2. 安装并锁定 Containerd 1.6.x (避开 2.x 的巨坑)
|
# 2. 安装并锁定 Containerd 1.6.x
|
||||||
function install_containerd() {
|
function install_containerd() {
|
||||||
echo -e "${GREEN}==> 开始安装 Containerd (强制降级并锁定 1.6.x 稳定版)...${NC}"
|
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
|
apt-get autoremove -y
|
||||||
rm -rf /etc/containerd/
|
rm -rf /etc/containerd/ /var/run/containerd/ /run/containerd/
|
||||||
|
|
||||||
apt-get update -y
|
apt-get update -y
|
||||||
apt-get install -y apt-transport-https ca-certificates curl software-properties-common gpg
|
apt-get install -y apt-transport-https ca-certificates curl software-properties-common gpg
|
||||||
@@ -94,7 +98,7 @@ function install_containerd() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo -e "${YELLOW}匹配到稳定版本: ${VER}${NC}"
|
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
|
# 锁定版本,防止无人值守更新将其升级到 2.x
|
||||||
apt-mark hold containerd.io
|
apt-mark hold containerd.io
|
||||||
@@ -108,7 +112,7 @@ function install_containerd() {
|
|||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable --now containerd
|
systemctl enable --now containerd
|
||||||
|
|
||||||
# 【核心配置】配置 crictl,消除 socket 警告
|
# 配置 crictl,消除 socket 警告
|
||||||
cat <<EOF | tee /etc/crictl.yaml
|
cat <<EOF | tee /etc/crictl.yaml
|
||||||
runtime-endpoint: unix:///run/containerd/containerd.sock
|
runtime-endpoint: unix:///run/containerd/containerd.sock
|
||||||
image-endpoint: unix:///run/containerd/containerd.sock
|
image-endpoint: unix:///run/containerd/containerd.sock
|
||||||
@@ -121,6 +125,10 @@ EOF
|
|||||||
# 3. 安装 K8s 组件
|
# 3. 安装 K8s 组件
|
||||||
function install_k8s_tools() {
|
function install_k8s_tools() {
|
||||||
echo -e "${GREEN}==> 开始安装 kubeadm, kubelet, kubectl (使用阿里云新版 APT 源)...${NC}"
|
echo -e "${GREEN}==> 开始安装 kubeadm, kubelet, kubectl (使用阿里云新版 APT 源)...${NC}"
|
||||||
|
|
||||||
|
# 【核心修复】:强制解除 K8s 组件的包锁定
|
||||||
|
apt-mark unhold kubelet kubeadm kubectl 2>/dev/null || true
|
||||||
|
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
rm -f /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
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
|
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 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
|
apt-mark hold kubelet kubeadm kubectl
|
||||||
|
|
||||||
systemctl enable --now kubelet
|
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 -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
|
exit 1
|
||||||
esac
|
esac
|
||||||
Reference in New Issue
Block a user