当前位置: 首页 > web >正文

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设置为开机启动可跳过。

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

kubectl uncordon k8s-node1
kubectl uncordon k8s-node2
kubectl uncordon k8s-node3

懒人教程

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

shutdown -h now

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

http://www.xdnf.cn/news/3933.html

相关文章:

  • 生成式AI服务内容被滥用的法律责任划分
  • Matlab实现CNN-BiLSTM时间序列预测未来
  • 进程间通信——管道
  • Paramiko 核心类关系图解析
  • Android Compose 中 CompositionLocal 的全面解析与最佳实践
  • ARM介绍及其体系结构
  • 【Linux我做主】进度条小程序深度解析
  • 浅析AI大模型为何需要向量数据库?【入门基础】
  • 2021年第十二届蓝桥杯省赛B组Java题解
  • KaiwuDB X 遨博智能 | 构建智能产线监测管理新系统
  • Python推导式:简洁高效的数据处理利器
  • PCB实战篇
  • Java 基础语法篇
  • 编程学习思考
  • 基于多策略混合改进哈里斯鹰算法的混合神经网络多输入单输出回归预测模型HPHHO-CNN-LSTM-Attention
  • BUCK电路制作负电源原理
  • Linux网络:bond简介与配置
  • AVL树(2):
  • 0.1 数学错题---基础
  • 嵌入式按键原理、中断过程与中断程序设计(键盘扫描程序)
  • chrome 浏览器怎么不自动提示是否翻译网站
  • C++ STL简介:构建高效程序的基石
  • SwinTransformer 改进:与PSConv结合的创新设计
  • 管理配置信息和敏感信息
  • 前端开发,文件在镜像服务器上不存在问题:Downloading binary from...Cannot download...
  • 在JSP写入Text文件方法指南
  • 【IP101】边缘检测技术全解析:从Sobel到Canny的进阶之路
  • 2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】
  • Spark,Idea中编写Spark程序 2
  • 题解:AT_abc245_e [ABC245E] Wrapping Chocolate