节点资源不足时的 Kubernetes 节点扩展
Kubernetes node scaling when nodes are low on resources
从文档中可以清楚地看出,每当 pods 处于 Pending 状态时,因为没有节点有足够的可用资源来满足 pods 资源请求 - 集群自动缩放器将创建另一个节点在 pod 创建后 30 秒内(对于合理大小的集群)。
但是,请考虑节点非常紧凑的情况。假设节点有 2 CPU 个核心,它包含 4 个 pods,定义 0.5 CPU 请求和 1.0 CPU 限制。
突然有负载,所有 4 pods 突然请求节点无法提供的额外 0.5 CPU,因为它的所有 CPU 已经被 4 运行 pods.
在这种情况下,我希望 Kubernetes 'understand' 有 运行 pods 无法处理的未决资源请求和 'move'(销毁和创建)那些 pods 到另一个可以尊重他们的请求(加上他们当前正在使用的资源)的节点。如果不存在这样的节点 - 我希望 Kubernetes 创建一个额外的节点并将 pods 移到那里。
但是,我没有看到这种情况发生。我看到 pods 在同一个节点上 运行(我猜该节点可以称为过度配置),而不管资源请求不能得到尊重并且性能因此受到影响。
我的问题是,除了将 pod 资源请求和限制之间的比率设置为 1:1(其中 pod 不能请求比最初分配的资源更多)之外,是否可以通过任何方式避免这种行为。显然,我会避免将请求和限制设置为相同,以避免供应不足和支付超过我需要的费用。
重要的是要认识到 PodSpec 中的 CPU request
与进程尝试使用的 cpu 数量之间的区别。 Kubernetes 配置和集群自动缩放完全基于 PodSpec 中的 request
。实际使用与这些决定无关。
在您描述的情况下,Pod 仍然只请求 0.5 CPU - 该字段是不可变的。该进程现在正在尝试使用 1 CPU - 但未查看。
CPU 限制高于请求允许 best-efforts 使用该容量,但如您所见,这不是保证。
在这种情况下,听起来您可能想要同时使用 Horizontal Pod Autoscaler 和 cluster autoscaler。在负载增加的情况下(例如,Pods 开始使用 CPU request
的 >80%),HPA 将增加 Pods 的数量服务,处理需求。如果那些 Pods 无处可放,集群自动缩放器将提供更多节点。这样,你的Pods仍然可以用完请求值,只有当他们开始接近它时才会提供更多的节点,所以你不会over-provision资源up-front.
从文档中可以清楚地看出,每当 pods 处于 Pending 状态时,因为没有节点有足够的可用资源来满足 pods 资源请求 - 集群自动缩放器将创建另一个节点在 pod 创建后 30 秒内(对于合理大小的集群)。
但是,请考虑节点非常紧凑的情况。假设节点有 2 CPU 个核心,它包含 4 个 pods,定义 0.5 CPU 请求和 1.0 CPU 限制。 突然有负载,所有 4 pods 突然请求节点无法提供的额外 0.5 CPU,因为它的所有 CPU 已经被 4 运行 pods.
在这种情况下,我希望 Kubernetes 'understand' 有 运行 pods 无法处理的未决资源请求和 'move'(销毁和创建)那些 pods 到另一个可以尊重他们的请求(加上他们当前正在使用的资源)的节点。如果不存在这样的节点 - 我希望 Kubernetes 创建一个额外的节点并将 pods 移到那里。
但是,我没有看到这种情况发生。我看到 pods 在同一个节点上 运行(我猜该节点可以称为过度配置),而不管资源请求不能得到尊重并且性能因此受到影响。
我的问题是,除了将 pod 资源请求和限制之间的比率设置为 1:1(其中 pod 不能请求比最初分配的资源更多)之外,是否可以通过任何方式避免这种行为。显然,我会避免将请求和限制设置为相同,以避免供应不足和支付超过我需要的费用。
重要的是要认识到 PodSpec 中的 CPU request
与进程尝试使用的 cpu 数量之间的区别。 Kubernetes 配置和集群自动缩放完全基于 PodSpec 中的 request
。实际使用与这些决定无关。
在您描述的情况下,Pod 仍然只请求 0.5 CPU - 该字段是不可变的。该进程现在正在尝试使用 1 CPU - 但未查看。
CPU 限制高于请求允许 best-efforts 使用该容量,但如您所见,这不是保证。
在这种情况下,听起来您可能想要同时使用 Horizontal Pod Autoscaler 和 cluster autoscaler。在负载增加的情况下(例如,Pods 开始使用 CPU request
的 >80%),HPA 将增加 Pods 的数量服务,处理需求。如果那些 Pods 无处可放,集群自动缩放器将提供更多节点。这样,你的Pods仍然可以用完请求值,只有当他们开始接近它时才会提供更多的节点,所以你不会over-provision资源up-front.