fly*_*yer 4 kubernetes kubernetes-pod
从这PodInterface
两个操作来看Delete
,Evict
似乎效果是一样的:删除旧 Pod 并创建新 Pod。
如果两个操作效果一样,为什么删除一个Pod并创建一个新的Pod需要两个API?
Pod 的删除是由最终用户完成的,属于正常活动。这意味着 pod 将从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,例如部署、守护进程、状态集等,否则不会再次创建 pod 并将其调度到 kubernetes 工作节点。
如果 pod 的资源消耗超过限制并且 kubelet 触发 pod 的驱逐,或者用户执行kubectl drain
或手动调用eviction API
. 这通常不是不正常的活动。有时被驱逐的 pod 不会从 ETCD 和 kubernetes 控制平面中自动删除。除非有更高级别的控制器,例如部署、守护进程集、状态集等,否则不会再次创建被驱逐的 pod 并调度到 kubernetes 工作节点。
最好使用 delete 而不是 evict,因为与 delete 相比,evict 带来更大的风险,因为在某些情况下,如果应用程序的控制器(部署等)创建的替换 pod 没有准备好,驱逐可能会导致应用程序处于损坏状态,或者如果最后一个被驱逐的 pod 有很长的终止宽限期