Add k3s cluster expansion documentation and scripts
- 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
This commit is contained in:
84
scripts/check-node-health.sh
Executable file
84
scripts/check-node-health.sh
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 节点健康检查脚本
|
||||
# 使用方法: bash check-node-health.sh
|
||||
#
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
echo -e "${BLUE}K3s 集群健康检查${NC}"
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 1. 检查节点状态
|
||||
echo -e "${YELLOW}[1/8] 检查节点状态...${NC}"
|
||||
kubectl get nodes -o wide
|
||||
echo ""
|
||||
|
||||
# 2. 检查节点资源
|
||||
echo -e "${YELLOW}[2/8] 检查节点资源使用...${NC}"
|
||||
kubectl top nodes 2>/dev/null || echo -e "${YELLOW}⚠ metrics-server 未就绪${NC}"
|
||||
echo ""
|
||||
|
||||
# 3. 检查系统 Pods
|
||||
echo -e "${YELLOW}[3/8] 检查系统组件...${NC}"
|
||||
kubectl get pods -n kube-system
|
||||
echo ""
|
||||
|
||||
# 4. 检查 Longhorn
|
||||
echo -e "${YELLOW}[4/8] 检查 Longhorn 存储...${NC}"
|
||||
kubectl get pods -n longhorn-system | head -10
|
||||
echo ""
|
||||
|
||||
# 5. 检查 PVC
|
||||
echo -e "${YELLOW}[5/8] 检查持久化存储卷...${NC}"
|
||||
kubectl get pvc -A
|
||||
echo ""
|
||||
|
||||
# 6. 检查应用 Pods
|
||||
echo -e "${YELLOW}[6/8] 检查应用 Pods...${NC}"
|
||||
kubectl get pods -A | grep -v "kube-system\|longhorn-system\|cert-manager" | head -20
|
||||
echo ""
|
||||
|
||||
# 7. 检查 Ingress
|
||||
echo -e "${YELLOW}[7/8] 检查 Ingress 配置...${NC}"
|
||||
kubectl get ingress -A
|
||||
echo ""
|
||||
|
||||
# 8. 检查证书
|
||||
echo -e "${YELLOW}[8/8] 检查 SSL 证书...${NC}"
|
||||
kubectl get certificate -A
|
||||
echo ""
|
||||
|
||||
# 统计信息
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
echo -e "${BLUE}集群统计信息${NC}"
|
||||
echo -e "${BLUE}================================${NC}"
|
||||
|
||||
TOTAL_NODES=$(kubectl get nodes --no-headers | wc -l)
|
||||
READY_NODES=$(kubectl get nodes --no-headers | grep " Ready " | wc -l)
|
||||
TOTAL_PODS=$(kubectl get pods -A --no-headers | wc -l)
|
||||
RUNNING_PODS=$(kubectl get pods -A --no-headers | grep "Running" | wc -l)
|
||||
TOTAL_PVC=$(kubectl get pvc -A --no-headers | wc -l)
|
||||
BOUND_PVC=$(kubectl get pvc -A --no-headers | grep "Bound" | wc -l)
|
||||
|
||||
echo -e "节点总数: ${GREEN}${TOTAL_NODES}${NC} (就绪: ${GREEN}${READY_NODES}${NC})"
|
||||
echo -e "Pod 总数: ${GREEN}${TOTAL_PODS}${NC} (运行中: ${GREEN}${RUNNING_PODS}${NC})"
|
||||
echo -e "PVC 总数: ${GREEN}${TOTAL_PVC}${NC} (已绑定: ${GREEN}${BOUND_PVC}${NC})"
|
||||
echo ""
|
||||
|
||||
# 健康评分
|
||||
if [ $READY_NODES -eq $TOTAL_NODES ] && [ $RUNNING_PODS -gt $((TOTAL_PODS * 80 / 100)) ]; then
|
||||
echo -e "${GREEN}✓ 集群健康状态: 良好${NC}"
|
||||
elif [ $READY_NODES -gt $((TOTAL_NODES / 2)) ]; then
|
||||
echo -e "${YELLOW}⚠ 集群健康状态: 一般${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 集群健康状态: 异常${NC}"
|
||||
fi
|
||||
echo ""
|
||||
113
scripts/generate-join-script.sh
Executable file
113
scripts/generate-join-script.sh
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 快速配置脚本生成器
|
||||
# 为新节点生成定制化的加入脚本
|
||||
#
|
||||
|
||||
# 颜色输出
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo -e "${GREEN}K3s 节点加入脚本生成器${NC}"
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 获取当前配置
|
||||
MASTER_IP="134.195.210.237"
|
||||
NODE_TOKEN="K109d35a131f48b4d40b162398a828b766d60735f29dd7b4a37b030c1d1c0e26b23::server:72e04c3a9e3e762cbdefffc96f348a2d"
|
||||
|
||||
echo -e "${YELLOW}当前 Master 节点信息:${NC}"
|
||||
echo "IP: $MASTER_IP"
|
||||
echo "Token: ${NODE_TOKEN:0:20}..."
|
||||
echo ""
|
||||
|
||||
# 选择节点类型
|
||||
echo "请选择要加入的节点类型:"
|
||||
echo "1) Worker 节点 (推荐用于 2 节点方案)"
|
||||
echo "2) Master 节点 (用于 HA 高可用方案)"
|
||||
echo ""
|
||||
read -p "请输入选项 (1 或 2): " NODE_TYPE
|
||||
|
||||
if [ "$NODE_TYPE" == "1" ]; then
|
||||
SCRIPT_NAME="join-worker-custom.sh"
|
||||
echo ""
|
||||
echo -e "${GREEN}生成 Worker 节点加入脚本...${NC}"
|
||||
|
||||
cat > $SCRIPT_NAME << 'EOFWORKER'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 配置信息
|
||||
MASTER_IP="134.195.210.237"
|
||||
NODE_TOKEN="K109d35a131f48b4d40b162398a828b766d60735f29dd7b4a37b030c1d1c0e26b23::server:72e04c3a9e3e762cbdefffc96f348a2d"
|
||||
|
||||
echo "开始加入 Worker 节点..."
|
||||
|
||||
# 系统准备
|
||||
swapoff -a
|
||||
sed -i '/ swap / s/^/#/' /etc/fstab
|
||||
apt-get update -qq
|
||||
apt-get install -y curl open-iscsi nfs-common
|
||||
systemctl enable --now iscsid
|
||||
|
||||
# 安装 k3s agent
|
||||
curl -sfL https://get.k3s.io | K3S_URL=https://${MASTER_IP}:6443 \
|
||||
K3S_TOKEN=${NODE_TOKEN} sh -
|
||||
|
||||
echo "Worker 节点加入完成!"
|
||||
echo "在 Master 节点执行: kubectl get nodes"
|
||||
EOFWORKER
|
||||
|
||||
chmod +x $SCRIPT_NAME
|
||||
|
||||
elif [ "$NODE_TYPE" == "2" ]; then
|
||||
SCRIPT_NAME="join-master-custom.sh"
|
||||
echo ""
|
||||
read -p "请输入负载均衡器 IP: " LB_IP
|
||||
|
||||
echo -e "${GREEN}生成 Master 节点加入脚本...${NC}"
|
||||
|
||||
cat > $SCRIPT_NAME << EOFMASTER
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 配置信息
|
||||
FIRST_MASTER_IP="134.195.210.237"
|
||||
LB_IP="$LB_IP"
|
||||
NODE_TOKEN="K109d35a131f48b4d40b162398a828b766d60735f29dd7b4a37b030c1d1c0e26b23::server:72e04c3a9e3e762cbdefffc96f348a2d"
|
||||
|
||||
echo "开始加入 Master 节点 (HA 模式)..."
|
||||
|
||||
# 系统准备
|
||||
swapoff -a
|
||||
sed -i '/ swap / s/^/#/' /etc/fstab
|
||||
apt-get update -qq
|
||||
apt-get install -y curl open-iscsi nfs-common
|
||||
systemctl enable --now iscsid
|
||||
|
||||
# 安装 k3s server
|
||||
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
|
||||
|
||||
echo "Master 节点加入完成!"
|
||||
echo "在任意 Master 节点执行: kubectl get nodes"
|
||||
EOFMASTER
|
||||
|
||||
chmod +x $SCRIPT_NAME
|
||||
else
|
||||
echo "无效的选项"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✓ 脚本已生成: $SCRIPT_NAME${NC}"
|
||||
echo ""
|
||||
echo "使用方法:"
|
||||
echo "1. 将脚本复制到新节点"
|
||||
echo "2. 在新节点上执行: sudo bash $SCRIPT_NAME"
|
||||
echo ""
|
||||
137
scripts/join-master.sh
Executable file
137
scripts/join-master.sh
Executable file
@@ -0,0 +1,137 @@
|
||||
#!/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 ""
|
||||
116
scripts/join-worker.sh
Executable file
116
scripts/join-worker.sh
Executable file
@@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# K3s Worker 节点快速加入脚本
|
||||
# 使用方法: sudo bash join-worker.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 Worker 节点加入脚本${NC}"
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查是否为 root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 配置信息
|
||||
MASTER_IP="134.195.210.237"
|
||||
NODE_TOKEN="K109d35a131f48b4d40b162398a828b766d60735f29dd7b4a37b030c1d1c0e26b23::server:72e04c3a9e3e762cbdefffc96f348a2d"
|
||||
|
||||
echo -e "${YELLOW}Master 节点 IP: ${MASTER_IP}${NC}"
|
||||
echo ""
|
||||
|
||||
# 1. 检查网络连通性
|
||||
echo -e "${YELLOW}[1/6] 检查网络连通性...${NC}"
|
||||
if ping -c 2 ${MASTER_IP} > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✓ 网络连通正常${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 无法连接到 Master 节点 ${MASTER_IP}${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 检查端口
|
||||
echo -e "${YELLOW}[2/6] 检查 Master 节点端口 6443...${NC}"
|
||||
if timeout 5 bash -c "cat < /dev/null > /dev/tcp/${MASTER_IP}/6443" 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ 端口 6443 可访问${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 端口 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 "请输入此节点的主机名 (例如: worker-1): " HOSTNAME
|
||||
if [ -n "$HOSTNAME" ]; then
|
||||
hostnamectl set-hostname $HOSTNAME
|
||||
echo -e "${GREEN}✓ 主机名已设置为: $HOSTNAME${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 跳过主机名设置${NC}"
|
||||
fi
|
||||
|
||||
# 5. 安装 k3s agent
|
||||
echo -e "${YELLOW}[5/6] 安装 k3s agent...${NC}"
|
||||
echo -e "${YELLOW}这可能需要几分钟时间...${NC}"
|
||||
|
||||
curl -sfL https://get.k3s.io | K3S_URL=https://${MASTER_IP}:6443 \
|
||||
K3S_TOKEN=${NODE_TOKEN} \
|
||||
sh - > /dev/null 2>&1
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ k3s agent 安装成功${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ k3s agent 安装失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 6. 验证安装
|
||||
echo -e "${YELLOW}[6/6] 验证安装...${NC}"
|
||||
sleep 10
|
||||
|
||||
if systemctl is-active --quiet k3s-agent; then
|
||||
echo -e "${GREEN}✓ k3s-agent 服务运行正常${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ k3s-agent 服务未运行${NC}"
|
||||
echo -e "${YELLOW}查看日志: sudo journalctl -u k3s-agent -f${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo -e "${GREEN}✓ Worker 节点加入成功!${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. 为节点添加标签 (在 Master 节点执行):"
|
||||
echo -e " ${GREEN}kubectl label nodes $HOSTNAME node-role.kubernetes.io/worker=worker${NC}"
|
||||
echo ""
|
||||
echo -e "3. 查看节点详细信息:"
|
||||
echo -e " ${GREEN}kubectl describe node $HOSTNAME${NC}"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user