节点信息
- k8s-master:192.168.91.166
- k8s-node2:192.168.91.167
- k8s-node3:192.168.91.168
- 账号:root,密码:root

一、k8s关机
流程顺序:drain 排空 node2 → drain 排空 node3 → drain 排空 master → 查看节点确认调度关闭 → 关闭 node2、node3 → 最后关闭 master
1、安装 sshpass(centos)
yum install -y sshpass
2、k8s_cluster_shutdown.sh关机脚本
#!/bin/bash
# 节点配置
MASTER_IP="192.168.91.166"
NODE2_IP="192.168.91.167"
NODE3_IP="192.168.91.168"
USER="root"
PASS="root"
echo "===== 1. 排空 node2(k8s-node2) ====="
kubectl drain k8s-node2 --ignore-daemonsets --delete-emptydir-data --force
echo "===== 2. 排空 node3(k8s-node3) ====="
kubectl drain k8s-node3 --ignore-daemonsets --delete-emptydir-data --force
echo "===== 3. 排空 master(k8s-master) ====="
kubectl drain k8s-master --ignore-daemonsets --delete-emptydir-data --force
echo "===== 4. 校验节点状态,确认调度关闭 ====="
kubectl get node
echo "===== 5. 下发关机命令 node2、node3 ====="
# nohup后台执行关机,ssh连接断开不会打断本地脚本
sshpass -p "${PASS}" ssh -o StrictHostKeyChecking=no ${USER}@${NODE2_IP} "nohup shutdown -h now >/dev/null 2>&1 &"
sleep 2
sshpass -p "${PASS}" ssh -o StrictHostKeyChecking=no ${USER}@${NODE3_IP} "nohup shutdown -h now >/dev/null 2>&1 &"
echo "等待10秒,worker节点关机中..."
sleep 10
echo "===== 6. 下发master关机命令 ====="
sshpass -p "${PASS}" ssh -o StrictHostKeyChecking=no ${USER}@${MASTER_IP} "nohup shutdown -h now >/dev/null 2>&1 &"
echo "=== 全部节点关机命令已下发完成 ==="
echo "注意:master节点执行关机后本机shell会断开,属于正常现象"
3、执行脚本
####授权
chmod +x k8s_cluster_shutdown.sh
####执行脚本
./k8s_cluster_shutdown.sh
二、k8s_cluster_shutdown.sh启动脚本
流程顺序:机器层面先手动开机 master,等待 3‑5 分钟组件就绪开机成功,再开机 node2/node3;
然后在 master 执行脚本解除节点封锁(解除 k8s‑master 封锁 → 解除 k8s‑node2 封锁 → 解除 k8s‑node3 封锁),校验节点 Ready 状态
1、k8s_cluster_shutdown.sh开机脚本
#!/bin/bash
set -e
echo "====================================="
echo "K8s集群开机恢复:执行uncordon解除节点封锁"
echo "前提:服务器硬件已经全部开机,master等待3‑5分钟组件就绪"
echo "====================================="
echo "1. 解除 k8s‑master 封锁"
kubectl uncordon k8s-master
echo "2. 解除 k8s‑node2 封锁"
kubectl uncordon k8s-node2
echo "3. 解除 k8s‑node3 封锁"
kubectl uncordon k8s-node3
echo ""
echo "4. 检查全部节点状态,确认回到Ready"
kubectl get node
echo ""
echo "如果节点不是Ready,请等待容器组件启动后再次执行 kubectl get node 查看"
2、执行脚本
####授权
chmod +x k8s_cluster_startup.sh
在k8s-master节点执行
./k8s_cluster_startup.sh