#!/bin/bash set -e # Kubernetes 环境准备脚本 # 功能: 在所有节点准备 Kubernetes 运行环境 echo "==== Kubernetes 环境准备 ====" # 定义节点列表 NODES=("172.17.0.15:master" "172.17.0.43:node1" "172.17.0.34:node2") # 本机 IP 与 SSH 选项 LOCAL_IP=$(ip route get 1 | awk '{print $7; exit}') SSH_OPTS='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes' # SSH 私钥(可用环境变量 SSH_KEY 覆盖),存在则自动携带 SSH_KEY_PATH=${SSH_KEY:-$HOME/.ssh/id_rsa} [ -f "$SSH_KEY_PATH" ] && SSH_ID="-i $SSH_KEY_PATH" || SSH_ID="" # 函数:在所有节点执行命令 execute_on_all_nodes() { local command="$1" local description="$2" echo "==== $description ====" for node in "${NODES[@]}"; do IFS=':' read -r ip hostname <<< "$node" echo "在 $hostname ($ip) 执行: $command" if [ "$ip" = "$LOCAL_IP" ] || [ "$hostname" = "master" ]; then bash -lc "$command" else ssh $SSH_OPTS $SSH_ID ubuntu@$ip "$command" fi done echo "" } # 函数:传输文件到所有节点 copy_to_all_nodes() { local file="$1" echo "==== 传输文件 $file 到所有节点 ====" for node in "${NODES[@]}"; do IFS=':' read -r ip hostname <<< "$node" echo "传输到 $hostname ($ip)" if [ "$ip" = "$LOCAL_IP" ] || [ "$hostname" = "master" ]; then cp -f "$file" ~/ else scp $SSH_OPTS $SSH_ID "$file" ubuntu@$ip:~/ fi done echo "" } # 创建环境准备脚本 cat > k8s-prepare-env.sh << 'EOF_OUTER' #!/bin/bash set -e echo "==== Kubernetes 环境准备 ====" # 1. 更新系统包 echo "更新系统包..." sudo apt update && sudo apt upgrade -y # 2. 安装必要的工具 echo "安装必要工具..." sudo apt install -y curl wget gnupg lsb-release ca-certificates apt-transport-https software-properties-common # 3. 禁用 swap echo "禁用 swap..." sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 4. 配置内核参数 echo "配置内核参数..." cat <