Statefulset 在明确知道一个 pod 不再运行之前, 它不能或者不应该创建一个替换 pod.

  • 需要 admin 告诉 Statefulseet

10.5.1 模拟一个节点的网络断开

关闭节点的网络适配器

  1. 登录一个节点

image.png

  1. 关闭网络接口

image.png

通过 Kubernetes 管理节点检查节点的状态

观察节点状态:

image.png

查看 pod 状态:

image.png

当一个 pod 状态为 Unknow 时会发生什么

  • node 重新连接后, pod 会被重新标记为 Runing
  • 如果 pod 持续未知状态几分钟后 (时间可配置), 这个 pod 就会自动从节点上驱逐
    • Kubelet 发现 pod 被标记删除后, 将会停止该 pod

查看未知状态的 pod 的详情:

image.png

注意:

  • 离线的 node 上的 pod 可能还在运行

10.5.2 手动删除 pod

正常删除 pod

image.png

查看 pod:

  • 下面 kubia-0 是旧的 pod

image.png

为什么 pod 没有被删除

  • 手动删除 pod 前, k8s 已标记了删除
  • k8s 需要 kubelet 的反馈才能彻底删除

强制删除 pod

不必等待 kubelet 反馈:

image.png

查看删除结果:

image.png

恢复网络:

  1. $ gcloud compute instances reset <node name>