1.4. pod 和容器的资源管理
指定 pod 时,您可以指定容器需要的每个资源量。要指定的最常见资源是 CPU 和内存 (RAM)。
当您为 Pod 中的容器指定资源请求时,kubernetes-scheduler 使用此信息来分配节点来放置 Pod。
当您为容器、kubelet 或节点代理指定资源限值时,会强制实施这些限制,以便允许正在运行的容器使用该资源比您设置的限制更多。kubelet 还至少保留针对该容器使用的系统资源的请求数量。
1.4.1. 请求和限值 复制链接链接已复制到粘贴板!
如果运行 pod 的节点有足够的可用资源,则容器可以使用的资源超过其对该资源的请求数量。但是,容器不允许使用超过其资源的限值。
例如,如果您为容器设置了 256 MiB 的内存请求,并且该容器位于调度到具有 8GiB 内存且没有其他 pod 的节点的 pod 中,则容器可以尝试使用更多 RAM。
如果为该容器设置了 4GiB 的内存限值,kubelet 和容器运行时会强制实施限制。运行时可防止容器使用超过配置的资源限值。
如果容器中的进程尝试消耗超过允许的内存量,系统内核会终止尝试分配的进程,并显示 Out Of Memory (OOM) 错误。
您可以通过两种方式实施限制:
- 通过重新主动:系统在看到违反情况后进行干预。
- 通过强制:系统可防止容器超过限制。
不同的运行时可以有不同的方法来实施相同的限制。
如果您为资源指定限制,但没有指定任何请求,且没有为该资源应用一个默认请求,则 Kubernetes 会复制您指定的限制,并将它用作资源的请求值。