完整的k8s集群初始化前的检测脚本(亲测适用于RedHat10)

发布于:2025-08-18 ⋅ 阅读:(12) ⋅ 点赞:(0)

Kubernetes 集群初始化前的检测与准备脚本,
这个脚本会一步步检查并配置常见的前置条件,确保执行 kubeadm init 之前环境没坑。

一、实现功能

  • 检测系统版本(CentOS/Ubuntu)

  • 关闭 SELinux

  • 关闭 swap

  • 加载 IPVS 模块

  • 配置 sysctl 网络参数

  • 设置时区 & NTP 同步

  • 检测 CRI socket 是否存在

  • 检测端口占用情况(6443、10250 等)

  • 检测 kubeadm/kubelet/kubectl 是否安装

  • 检测镜像仓库可访问性

  • 输出最终检查结果

二、完整脚本(k8s-precheck.sh)

#!/bin/bash
# K8S Cluster Preflight Check & Preparation Script
# Author: tigerhhzz
# Date: 2025-08-11

set -e

echo "=============================="
echo " Kubernetes Preflight Checker "
echo "=============================="

# 1. 检测系统信息
echo "[1/11] 检测系统版本..."
if [ -f /etc/os-release ]; then
    cat /etc/os-release
else
    echo "无法检测系统版本,退出"
    exit 1
fi

# 2. 关闭 SELinux
echo "[2/11] 禁用 SELinux..."
if command -v setenforce &>/dev/null; then
    setenforce 0 || true
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    echo "SELinux 已禁用"
else
    echo "未检测到 SELinux"
fi

# 3. 关闭 swap
echo "[3/11] 关闭 swap..."
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
echo "swap 已关闭"

# 4. 加载 IPVS 模块
echo "[4/11] 配置 IPVS..."
cat >/etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack
echo "IPVS 模块已加载"

# 5. 配置 sysctl 网络参数
echo "[5/11] 配置 sysctl..."
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
modprobe br_netfilter
sysctl --system >/dev/null
echo "sysctl 配置已完成"

# 6. 设置时区 & NTP
echo "[6/11] 配置时区与 NTP..."
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
if command -v chronyd &>/dev/null; then
    systemctl enable chronyd --now
    chronyc -a makestep
elif command -v ntpd &>/dev/null; then
    systemctl enable ntpd --now
else
    echo "未检测到 chrony 或 ntpd,请手动安装"
fi

# 7. 检测 CRI socket
echo "[7/11] 检测 CRI socket..."
if [ -S /var/run/cri-dockerd.sock ]; then
    echo "检测到 cri-dockerd.sock"
elif [ -S /var/run/containerd/containerd.sock ]; then
    echo "检测到 containerd.sock"
else
    echo "未检测到可用的 CRI socket,请安装 Docker/Containerd/CRI-Dockerd"
fi

# 8. 检测端口占用
echo "[8/11] 检测常用端口占用..."
PORTS=(6443 10250 10257 10259 2379 2380)
for port in "${PORTS[@]}"; do
    if ss -lnt | grep -q ":$port"; then
        echo "❌ 端口 $port 已被占用"
    else
        echo "✅ 端口 $port 可用"
    fi
done

# 9. 检测 Kubernetes 工具
echo "[9/11] 检测 kubeadm/kubelet/kubectl..."
if command -v kubeadm &>/dev/null; then
    echo "✅ kubeadm 已安装,版本: $(kubeadm version -o short 2>/dev/null || kubeadm version)"
else
    echo "❌ kubeadm 未安装"
fi

if command -v kubelet &>/dev/null; then
    echo "✅ kubelet 已安装,版本: $(kubelet --version 2>/dev/null)"
else
    echo "❌ kubelet 未安装"
fi

if command -v kubectl &>/dev/null; then
    echo "✅ kubectl 已安装,版本: $(kubectl version --client=true -o short 2>/dev/null || kubectl version --client=true)"
else
    echo "❌ kubectl 未安装"
fi

# 10. 检测镜像仓库(带自动切换)
echo "[10/11] 检测镜像仓库可访问性..."
PRIMARY_REPO="registry.aliyuncs.com/google_containers"
FALLBACK_REPO="k8s.m.daocloud.io"

if curl -s --connect-timeout 5 https://$PRIMARY_REPO &>/dev/null; then
    echo "✅ 镜像仓库 $PRIMARY_REPO 可访问"
    IMAGE_REPO=$PRIMARY_REPO
elif curl -s --connect-timeout 5 https://$FALLBACK_REPO &>/dev/null; then
    echo "⚠️  阿里云镜像不可达,切换到 $FALLBACK_REPO"
    IMAGE_REPO=$FALLBACK_REPO
else
    echo "❌ 无法访问任何镜像仓库,请检查网络"
    IMAGE_REPO=""
fi

# 11. 总结
echo "[11/11] 检查完成,请根据上方结果修复问题后再执行 kubeadm init"

echo "=============================="
echo " K8S Preflight Check Finished "
echo "=============================="

三、使用方法和验证

保存脚本为 k8s-precheck.sh

给执行权限:

chmod +x k8s-precheck.sh

执行:

./k8s-precheck.sh

这样一键就能把环境准备好,然后直接初始化集群。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。



网站公告

今日签到

点亮在社区的每一天
去签到