#!/bin/bash set -euo pipefail # 校验是否为root用户执行 if [ "$(id -u)" -ne 0 ]; then echo "错误:脚本需以root权限执行" exit 1 fi # 初始化参数变量 master_ips="" node_ips="" # 解析命令行参数 while [[ $# -gt 0 ]]; do case "$1" in --master-ips) master_ips="$2" shift 2 ;; --node-ips) node_ips="$2" shift 2 ;; *) echo "错误:未知参数 $1" echo "使用方式:$0 --master-ips 192.168.61.131,192.168.61.132 --node-ips 192.168.61.134" exit 1 ;; esac done # 校验参数是否完整 if [ -z "$master_ips" ] && [ -z "$node_ips" ]; then echo "错误:必须指定 --master-ips 或 --node-ips" echo "使用方式:$0 --master-ips 192.168.61.131,192.168.61.132 --node-ips 192.168.61.134" exit 1 fi # 定义目标目录 target_dir="/opt/k8s-install-conf" # 校验kubeadm-conf.yaml是否存在 if [ ! -f "/opt/k8s-install-conf/kubeadm-conf.yaml" ]; then echo "错误:当前目录未找到 kubeadm-conf.yaml 配置文件" exit 1 fi # -------------------------- 第一步:初始化第一台Master节点 -------------------------- echo "=== 开始初始化第一台Master节点 ===" # 执行kubeadm初始化(带证书上传) echo "执行 kubeadm init 初始化集群..." kubeadm init --config ${target_dir}/kubeadm-conf.yaml --upload-certs # 配置当前用户kubeconfig echo "配置当前用户kubeconfig..." mkdir -p "$HOME/.kube" cp -i /etc/kubernetes/admin.conf "$HOME/.kube/config" chown "$(id -u):$(id -g)" "$HOME/.kube/config" export KUBECONFIG=/etc/kubernetes/admin.conf # 将环境变量写入profile,永久生效 echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> "$HOME/.profile" echo "=== 第一台Master节点初始化完成 ===" # -------------------------- 第二步:生成添加节点的脚本 -------------------------- echo "=== 开始生成添加节点脚本 ===" # 创建目标目录 mkdir -p "$target_dir" # 生成certificate-key和基础join命令 echo "生成集群加入所需参数..." CERT_KEY=$(kubeadm init phase upload-certs --upload-certs 2>/dev/null | grep -E '^[0-9a-f]{64,}$') JOIN_CMD_BASE=$(kubeadm token create --print-join-command 2>/dev/null) # 校验参数生成结果 if [ -z "$CERT_KEY" ] || [ -z "$JOIN_CMD_BASE" ]; then echo "错误:生成集群加入参数失败" exit 1 fi # 生成添加Master节点的脚本(包含kubeconfig配置) echo "生成 $target_dir/add_master.sh ..." cat > "$target_dir/add_master.sh" <> \$HOME/.profile echo "Master节点加入集群并配置完成" EOF # 生成添加Node节点的脚本 echo "生成 $target_dir/add_node.sh ..." cat > "$target_dir/add_node.sh" <