Pod 删除和 Pod 驱逐有什么区别?

fly*_*yer 4 kubernetes kubernetes-pod

从这PodInterface两个操作来看DeleteEvict似乎效果是一样的:删除旧 Pod 并创建新 Pod。

如果两个操作效果一样,为什么删除一个Pod并创建一个新的Pod需要两个API?

Arg*_*dhu 8

Pod 的删除是由最终用户完成的,属于正常活动。这意味着 pod 将从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,例如部署、守护进程、状态集等,否则不会再次创建 pod 并将其调度到 kubernetes 工作节点。

如果 pod 的资源消耗超过限制并且 kubelet 触发 pod 的驱逐,或者用户执行kubectl drain或手动调用eviction API. 这通常不是不正常的活动。有时被驱逐的 pod 不会从 ETCD 和 kubernetes 控制平面中自动删除。除非有更高级别的控制器,例如部署、守护进程集、状态集等,否则不会再次创建被驱逐的 pod 并调度到 kubernetes 工作节点。

最好使用 delete 而不是 evict,因为与 delete 相比,evict 带来更大的风险,因为在某些情况下,如果应用程序的控制器(部署等)创建的替换 pod 没有准备好,驱逐可能会导致应用程序处于损坏状态,或者如果最后一个被驱逐的 pod 有很长的终止宽限期

  • 驱逐可以通过 Pod Disruption 预算来控制,文档称“集群管理器和托管提供商应该通过调用 Eviction API 使用尊重 PodDisruptionBudgets 的工具,而不是直接删除 pod 或部署。” 所以这取决于你想要实现的目标。 (3认同)
  • 值得注意的是驱逐的“原因”。发生这种情况通常是因为 pod 已超出其资源最大值。这是 kubelet 调度程序采取的自主操作,而不是来自另一个进程的命令操作。 (2认同)