110 lines
2.9 KiB
Bash
110 lines
2.9 KiB
Bash
#!/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 <<EOF_MODULES | sudo tee /etc/modules-load.d/k8s.conf
|
|
overlay
|
|
br_netfilter
|
|
EOF_MODULES
|
|
|
|
sudo modprobe overlay
|
|
sudo modprobe br_netfilter
|
|
|
|
# 5. 配置 sysctl 参数
|
|
echo "配置 sysctl 参数..."
|
|
cat <<EOF_SYSCTL | sudo tee /etc/sysctl.d/k8s.conf
|
|
net.bridge.bridge-nf-call-iptables = 1
|
|
net.bridge.bridge-nf-call-ip6tables = 1
|
|
net.ipv4.ip_forward = 1
|
|
EOF_SYSCTL
|
|
|
|
sudo sysctl --system
|
|
|
|
# 6. 配置防火墙
|
|
echo "配置防火墙..."
|
|
sudo ufw --force disable || true
|
|
|
|
# 按你的要求,不在节点上修改 /etc/hosts
|
|
|
|
echo "==== 环境准备完成 ===="
|
|
echo "当前主机名: $(hostname)"
|
|
echo "当前 IP: $(ip route get 1 | awk '{print $7; exit}')"
|
|
echo "Swap 状态: $(swapon --show | wc -l) 个 swap 分区"
|
|
EOF_OUTER
|
|
|
|
chmod +x k8s-prepare-env.sh
|
|
copy_to_all_nodes k8s-prepare-env.sh
|
|
execute_on_all_nodes "./k8s-prepare-env.sh" "环境准备"
|
|
|
|
echo "==== 环境准备完成 ===="
|