Pod 删除和 Pod 逐出有什么区别?
What's the difference between pod deletion and pod eviction?
从PodInterface
来看,Delete
和Evict
这两个操作似乎具有相同的效果:删除旧的Pod并创建新的Pod。
如果两个操作是一样的效果,为什么我们需要两个API来删除一个Pod并创建一个新的Pod?
pod 的删除由最终用户完成,属于正常情况 activity。这意味着 pod 将从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,如 deployment、daemonset、statefulset 等,否则不会再次创建 pod 并将其调度到 kubernetes 工作节点。
如果 pod 的资源消耗超过限制并且 kubelet 触发 pod 的驱逐或用户执行 kubectl drain
或手动调用 eviction API
,则会发生驱逐。它通常不是正常的 activity 。有时被驱逐的 pods 不会自动从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,如 deployment、daemonset、statefulset 等,否则不会再次创建被逐出的 pod 并将其调度到 kubernetes 工作节点。
最好使用 delete 而不是 evict,因为与 delete 相比,evict 具有更大的风险,因为在某些情况下,如果应用程序的控制器(部署等)创建的替换 pod 被删除,则应用程序可能会导致应用程序崩溃。 ) 没有准备好,或者如果最后一个被逐出的 pod 有很长的终止宽限期
Pod evict 操作(假设您指的是 Eviction API)是一种更智能的删除操作,它尊重 PodDisruptionBudget,因此它确实尊重应用程序的 high-availability 要求(只要 PodDisruptionBudget 配置正确)。通常您不会手动驱逐 Pod,但是 Pod 驱逐可以作为节点清空操作的一部分启动(可以通过 kubectl drain
命令手动调用或通过 Cluster Autoscaler组件)。
另一方面,Pod delete 操作不遵守 PodDisruptionBudget,因此可以影响应用程序的可用性。与 evict 操作相反,此操作通常手动调用(例如通过 kubectl delete
命令)。
此外,除了 驱逐 API,pods 可以被 kubelet 驱逐,因为 Node-pressure 条件,在这种情况下 PodDisruptionBudget 不受 Kubernetes 的尊重(参见 Node-pressure Eviction)
从PodInterface
来看,Delete
和Evict
这两个操作似乎具有相同的效果:删除旧的Pod并创建新的Pod。
如果两个操作是一样的效果,为什么我们需要两个API来删除一个Pod并创建一个新的Pod?
pod 的删除由最终用户完成,属于正常情况 activity。这意味着 pod 将从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,如 deployment、daemonset、statefulset 等,否则不会再次创建 pod 并将其调度到 kubernetes 工作节点。
如果 pod 的资源消耗超过限制并且 kubelet 触发 pod 的驱逐或用户执行 kubectl drain
或手动调用 eviction API
,则会发生驱逐。它通常不是正常的 activity 。有时被驱逐的 pods 不会自动从 ETCD 和 kubernetes 控制平面中删除。除非有更高级别的控制器,如 deployment、daemonset、statefulset 等,否则不会再次创建被逐出的 pod 并将其调度到 kubernetes 工作节点。
最好使用 delete 而不是 evict,因为与 delete 相比,evict 具有更大的风险,因为在某些情况下,如果应用程序的控制器(部署等)创建的替换 pod 被删除,则应用程序可能会导致应用程序崩溃。 ) 没有准备好,或者如果最后一个被逐出的 pod 有很长的终止宽限期
Pod evict 操作(假设您指的是 Eviction API)是一种更智能的删除操作,它尊重 PodDisruptionBudget,因此它确实尊重应用程序的 high-availability 要求(只要 PodDisruptionBudget 配置正确)。通常您不会手动驱逐 Pod,但是 Pod 驱逐可以作为节点清空操作的一部分启动(可以通过 kubectl drain
命令手动调用或通过 Cluster Autoscaler组件)。
Pod delete 操作不遵守 PodDisruptionBudget,因此可以影响应用程序的可用性。与 evict 操作相反,此操作通常手动调用(例如通过 kubectl delete
命令)。
此外,除了 驱逐 API,pods 可以被 kubelet 驱逐,因为 Node-pressure 条件,在这种情况下 PodDisruptionBudget 不受 Kubernetes 的尊重(参见 Node-pressure Eviction)