- Complete expansion guide for 2/4/6 node scenarios - Quick join scripts for worker and master nodes - Health check and diagnostic scripts - Quick reference card for common operations
138 lines
3.9 KiB
Bash
Executable File
138 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# K3s Master 节点快速加入脚本 (用于 HA 集群)
|
|
# 使用方法: sudo bash join-master.sh
|
|
#
|
|
|
|
set -e
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}================================${NC}"
|
|
echo -e "${GREEN}K3s Master 节点加入脚本 (HA)${NC}"
|
|
echo -e "${GREEN}================================${NC}"
|
|
echo ""
|
|
|
|
# 检查是否为 root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 配置信息
|
|
FIRST_MASTER_IP="134.195.210.237"
|
|
NODE_TOKEN="K109d35a131f48b4d40b162398a828b766d60735f29dd7b4a37b030c1d1c0e26b23::server:72e04c3a9e3e762cbdefffc96f348a2d"
|
|
|
|
echo -e "${YELLOW}第一个 Master 节点 IP: ${FIRST_MASTER_IP}${NC}"
|
|
echo ""
|
|
|
|
# 获取负载均衡器 IP
|
|
read -p "请输入负载均衡器 IP 地址: " LB_IP
|
|
if [ -z "$LB_IP" ]; then
|
|
echo -e "${RED}错误: 负载均衡器 IP 不能为空${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${YELLOW}负载均衡器 IP: ${LB_IP}${NC}"
|
|
echo ""
|
|
|
|
# 1. 检查网络连通性
|
|
echo -e "${YELLOW}[1/6] 检查网络连通性...${NC}"
|
|
if ping -c 2 ${FIRST_MASTER_IP} > /dev/null 2>&1; then
|
|
echo -e "${GREEN}✓ 可以连接到第一个 Master 节点${NC}"
|
|
else
|
|
echo -e "${RED}✗ 无法连接到第一个 Master 节点 ${FIRST_MASTER_IP}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if ping -c 2 ${LB_IP} > /dev/null 2>&1; then
|
|
echo -e "${GREEN}✓ 可以连接到负载均衡器${NC}"
|
|
else
|
|
echo -e "${RED}✗ 无法连接到负载均衡器 ${LB_IP}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 检查端口
|
|
echo -e "${YELLOW}[2/6] 检查端口...${NC}"
|
|
if timeout 5 bash -c "cat < /dev/null > /dev/tcp/${FIRST_MASTER_IP}/6443" 2>/dev/null; then
|
|
echo -e "${GREEN}✓ Master 节点端口 6443 可访问${NC}"
|
|
else
|
|
echo -e "${RED}✗ Master 节点端口 6443 无法访问${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 3. 系统准备
|
|
echo -e "${YELLOW}[3/6] 准备系统环境...${NC}"
|
|
|
|
# 禁用 swap
|
|
swapoff -a
|
|
sed -i '/ swap / s/^/#/' /etc/fstab
|
|
echo -e "${GREEN}✓ 已禁用 swap${NC}"
|
|
|
|
# 安装依赖
|
|
apt-get update -qq
|
|
apt-get install -y curl open-iscsi nfs-common > /dev/null 2>&1
|
|
systemctl enable --now iscsid > /dev/null 2>&1
|
|
echo -e "${GREEN}✓ 已安装必要依赖${NC}"
|
|
|
|
# 4. 设置主机名
|
|
echo -e "${YELLOW}[4/6] 配置主机名...${NC}"
|
|
read -p "请输入此节点的主机名 (例如: master-2): " HOSTNAME
|
|
if [ -n "$HOSTNAME" ]; then
|
|
hostnamectl set-hostname $HOSTNAME
|
|
echo -e "${GREEN}✓ 主机名已设置为: $HOSTNAME${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠ 跳过主机名设置${NC}"
|
|
fi
|
|
|
|
# 5. 安装 k3s server
|
|
echo -e "${YELLOW}[5/6] 安装 k3s server (HA 模式)...${NC}"
|
|
echo -e "${YELLOW}这可能需要几分钟时间...${NC}"
|
|
|
|
curl -sfL https://get.k3s.io | sh -s - server \
|
|
--server https://${FIRST_MASTER_IP}:6443 \
|
|
--token ${NODE_TOKEN} \
|
|
--tls-san=${LB_IP} \
|
|
--write-kubeconfig-mode 644 > /dev/null 2>&1
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ k3s server 安装成功${NC}"
|
|
else
|
|
echo -e "${RED}✗ k3s server 安装失败${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 6. 验证安装
|
|
echo -e "${YELLOW}[6/6] 验证安装...${NC}"
|
|
sleep 15
|
|
|
|
if systemctl is-active --quiet k3s; then
|
|
echo -e "${GREEN}✓ k3s 服务运行正常${NC}"
|
|
else
|
|
echo -e "${RED}✗ k3s 服务未运行${NC}"
|
|
echo -e "${YELLOW}查看日志: sudo journalctl -u k3s -f${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}================================${NC}"
|
|
echo -e "${GREEN}✓ Master 节点加入成功!${NC}"
|
|
echo -e "${GREEN}================================${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}下一步操作:${NC}"
|
|
echo -e "1. 在任意 Master 节点执行以下命令查看节点状态:"
|
|
echo -e " ${GREEN}kubectl get nodes${NC}"
|
|
echo ""
|
|
echo -e "2. 检查 etcd 集群状态:"
|
|
echo -e " ${GREEN}kubectl get pods -n kube-system | grep etcd${NC}"
|
|
echo ""
|
|
echo -e "3. 查看节点详细信息:"
|
|
echo -e " ${GREEN}kubectl describe node $HOSTNAME${NC}"
|
|
echo ""
|
|
echo -e "4. 更新负载均衡器配置,添加此节点的 IP"
|
|
echo ""
|