Kubernetes 虚拟机安全关机操作流程

不规范关机的危害

Kubernetes集群(尤其是基于VirtualBox搭的)关机/暂停时,如果不规范操作,会导致:

  • etcd 数据损坏

  • kubelet 容器状态丢失

  • PV 挂载紊乱(尤其用了 local PV / hostPath)

  • 集群启动卡住或组件 crash

下面是安全关机的操作流程,分为简单版和完整版,学习和测试环境可按简单版执行即可

假设为3个节点,k8s-node1为master节点,k8s-node2和k8s-node3为工作节点

简单版关机流程

1️⃣ 先驱逐节点上的 Pod

kubectl drain k8s-node1 --ignore-daemonsets

kubectl drain k8s-node2 --ignore-daemonsets

kubectl drain k8s-node3 --ignore-daemonsets

2️⃣ 关闭节点

将各节点虚拟机关闭

在虚拟机里安全关机,最好先关闭子节点,再关闭master节点,依次在k8s-node2,k8s-node3上执行,最后再k8s-node1 master节点执行关机命令

shutdown -h now

3️⃣ 下次启动虚拟机后,让节点恢复调度

前提是docker和kubelet设置为开机启动,

启动时先启动master节点,然后等 30秒-1分钟 etcd 起稳,再启动子节点

kubectl uncordon k8s-node1

kubectl uncordon k8s-node2

kubectl uncordon k8s-node3

完整版关机流程

1️⃣ 先优雅停止 Kubernetes 集群

只需要在 master 节点 执行以下命令即可(不用每个节点跑):

kubectl drain k8s-node1 --ignore-daemonsets

kubectl drain k8s-node2 --ignore-daemonsets

kubectl drain k8s-node3 --ignore-daemonsets

上面的命令是针对v1.17及以下版本的,如果高于或等于v1.18,还需加上参数--delete-emptydir-data。

作用:

  • 通知集群「我要关机」,驱逐 Pod,卸载 Volume

  • 防止 etcd 或挂载数据未同步导致数据丢失

如果只是实验环境,可以跳过 drain,但生产环境建议做

2️⃣ 停止 kubelet + docker/containerd

三台机器都执行:

systemctl stop kubelet

systemctl stop docker # 如果你用 containerd 就改成 systemctl stop containerd

作用:

  • 干净卸载 Pod、清理网络 namespace、detach 卷

  • 防止「虚拟机强制关机」导致 Container runtime metadata 损坏

3️⃣ 优雅关机虚拟机

不要直接强制 power off!

在 VirtualBox 里,依次选每个节点:

  • VirtualBox → 关闭 → 发送关机信号 (ACPI Shutdown)
    等机器自己关机,类似执行 shutdown -h now

如果 ACPI 关机无效(有些系统不响应),虚拟机内执行:

shutdown -h now

✅ 下次启动时

  1. 先启动etcd 节点 / master 节点

  2. 等 30秒-1分钟 etcd 起稳,再启动 node 节点

  3. 每台机开机后,执行:

systemctl start docker

systemctl start kubelet

如果docker和kubelet设置为开机启动可跳过。

  1. master 节点上执行下面的命令,让节点重新加入调度:

kubectl uncordon k8s-node1

kubectl uncordon k8s-node2

kubectl uncordon k8s-node3

懒人教程

实验环境不怕数据丢 → 直接执行虚拟机内关机命令:

shutdown -h now

等机器都关了,再关 VirtualBox。
别直接 VirtualBox → 强制关机(power off),这样最容易损坏 etcd。

相关推荐
Alex艾力的IT数字空间5 小时前
在 Kylin(麒麟)操作系统上搭建 Docker 环境
大数据·运维·缓存·docker·容器·负载均衡·kylin
SPC的存折12 小时前
2、Docker命令与镜像、容器管理
linux·运维·服务器·docker·容器·eureka
Hachi被抢先注册了13 小时前
Docker学习记录
java·云原生·eureka
阿里云云原生13 小时前
安全养虾实践:当 AI 管家遇到线上预警,我的提效破局之路
云原生
香蕉鼠片14 小时前
Docker
运维·docker·容器
阿里云云原生15 小时前
相约 GenAICon 北京站:聊聊从环境工程出发,如何“简化”多源实时上下文?
云原生
Cat_Rocky16 小时前
docker简单学习
学习·docker·容器
数字化顾问17 小时前
(88页PPT)DG1092D1S4培训课件EASGERP总体架构基础(附下载方式)
微服务·云原生·架构
x10n917 小时前
基于提示词驱动的Function Call实现K8s Pod智能诊断
ai·云原生·容器·kubernetes
阿里云云原生17 小时前
当运维遇见本体论:Umodel 打造 IT 世界的统一认知地图
云原生