99 lines
2.8 KiB
Bash
99 lines
2.8 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# 为 node1 和 node2 安装 kubectl 脚本
|
|
# 功能: 从 master 传输 kubectl 二进制文件到其他节点
|
|
|
|
echo "==== 为 node1 和 node2 安装 kubectl ===="
|
|
|
|
# 定义节点列表
|
|
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_node() {
|
|
local ip="$1"
|
|
local hostname="$2"
|
|
local command="$3"
|
|
local description="$4"
|
|
|
|
echo "==== $description on $hostname ($ip) ===="
|
|
if [ "$ip" = "$LOCAL_IP" ] || [ "$hostname" = "master" ]; then
|
|
bash -lc "$command"
|
|
else
|
|
ssh $SSH_OPTS $SSH_ID ubuntu@$ip "$command"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
# 函数:传输文件到指定节点
|
|
copy_to_node() {
|
|
local ip="$1"
|
|
local hostname="$2"
|
|
local file="$3"
|
|
echo "传输 $file 到 $hostname ($ip)"
|
|
if [ "$ip" = "$LOCAL_IP" ] || [ "$hostname" = "master" ]; then
|
|
cp -f "$file" ~/
|
|
else
|
|
scp $SSH_OPTS $SSH_ID "$file" ubuntu@$ip:~/
|
|
fi
|
|
}
|
|
|
|
# 创建 kubectl 安装脚本
|
|
cat > kubectl-install.sh << 'EOF_INSTALL'
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
echo "==== 安装 kubectl ===="
|
|
|
|
# 1. 检查是否已安装
|
|
if command -v kubectl &> /dev/null; then
|
|
echo "kubectl 已安装,版本: $(kubectl version --client 2>/dev/null | grep 'Client Version' || echo 'unknown')"
|
|
echo "跳过安装"
|
|
exit 0
|
|
fi
|
|
|
|
# 2. 安装 kubectl
|
|
echo "安装 kubectl..."
|
|
sudo apt update
|
|
sudo apt install -y apt-transport-https ca-certificates curl
|
|
|
|
# 添加 Kubernetes 官方 GPG key
|
|
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
|
|
|
# 添加 Kubernetes apt 仓库
|
|
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
|
|
|
# 更新包列表并安装 kubectl
|
|
sudo apt update
|
|
sudo apt install -y kubectl
|
|
|
|
# 3. 验证安装
|
|
echo "验证 kubectl 安装..."
|
|
kubectl version --client
|
|
|
|
echo "==== kubectl 安装完成 ===="
|
|
EOF_INSTALL
|
|
|
|
chmod +x kubectl-install.sh
|
|
|
|
# 为 node1 和 node2 安装 kubectl
|
|
for node in "${NODES[@]}"; do
|
|
IFS=':' read -r ip hostname <<< "$node"
|
|
if [ "$hostname" != "master" ]; then
|
|
copy_to_node "$ip" "$hostname" "kubectl-install.sh"
|
|
execute_on_node "$ip" "$hostname" "./kubectl-install.sh" "安装 kubectl"
|
|
fi
|
|
done
|
|
|
|
# 清理临时文件
|
|
rm -f kubectl-install.sh
|
|
|
|
echo "==== 所有节点 kubectl 安装完成 ===="
|