管理Pod 和容器可用的资源是 Kubernetes 管理的最佳实践步骤。您需要防止 Pod 贪婪地消耗集群的 CPU 和内存。一组 Pod 的过度使用可能会导致资源争用,从而减慢相邻容器的速度并破坏主机的稳定性。
但 Kubernetes 资源管理经常被误解。提供了两种机制来控制分配:请求和限制。如果您为 CPU 和内存设置请求和限制,这会导致每个 Pod 有四种可能的设置。
遵循这个简单的路径通常不是最优的:最好忽略 CPU 限制,因为它们会损害性能并浪费备用容量。本文将解释该问题,以便您可以运行更有效的集群。
请求和限制如何运作
请求用于调度。新的 Pod 只会分配给能够满足其请求的节点。如果没有匹配的 Node,Pod 将停留在 Pending 状态,直到资源可用。
限制定义了 Pod 允许的最大资源利用率。当达到限制时,Pod 无法使用更多资源,即使其节点上有空闲容量。达到限制的实际效果取决于所涉及的资源:超过 CPU 限制会导致限制,而超过内存限制将导致 Pod OOM Killer 终止容器进程。
在下面的示例中,具有这些约束的 Pod 将仅调度到可以提供 500m(相当于 0.5 个 CPU 核心)的 Node。如果节点有可用容量,则在节流之前其最大运行时间消耗可达 1000m。
resources:requests:cpu