目前,如果我们想在kubernetes中使用Horizontal Pod自动缩放,我们需要为我们想要的服务指定以下内容:
Limits:
cpu: 150m
memory: 150Mi
Requests:
cpu: 42m
memory: 50Mi
我有一些服务可以使用HPA扩展。
我们可以过度配置这些服务吗?与这些服务一样,资源添加超出了VM可用的总资源。
考虑以下情况:假设pod的请求在总可用CPU范围内,但限制超出它
例如:
总可用CPU为1000m核心,2个容量为500m核心请求,每个限制 1000m。
首先,如果总数只有1000米,我可以设置这个限制,如1000m?
如果是的话? Update2:<我想我们可以这样做,因为我在图像>
中进行了如下所示的实验现在,如果pod 2没有使用它的整个500米核心CPU和pod 达到了要求的总限额500米,
这个吊舱现在可以使用超过500米的核心,这些核心没有被使用 第二个限制设置为1000?
如果没有? 更新2:我想这不再有效了
然后我猜想无法完成配置?
答案 0 :(得分:0)
让我们首先简要解释一下Autoscaling Algorithm:
每30秒一次(--horizontal-pod-autoscaler-sync-period
默认值),自动调节器控制循环对pod进行排队并收集其CPU利用率。然后,它将此值的算术平均值与配置的阈值进行比较,并调整副本数以匹配所需的CPU利用率目标。 CPU利用率是pod的最后1分钟CPU使用率除以pod请求的CPU的平均值。目前,CPU使用率取自Heapster服务(应存在于kube-system
命名空间中)。
在此部分,资源请求,资源限制和pod关联性没有用处。我们只获得了所需数量的副本。 然后,Scheduler会参与自动缩放过程,并根据副本编号开始调度pod。此时,将考虑资源请求,资源限制和pod亲缘关系,以确定将部署下一个pod副本的节点。
根据上面提到的,您可以在同一时间段内进行多次无法扩展到最大副本数量的部署。但是,如果资源不足,首先扩大规模 - 消耗资源,任何其他不适合剩余资源的容器将不会被安排,直到资源再次释放为止。
在GCP或GKE上,您可以使用autoscaler在需要更多计算容量时将新节点添加到群集,并在负载下降时将其删除。这将有助于避免“过度配置”,因为您可以始终拥有所需的计算容量,而不是更多,而不是更少。
<强>更新强> 调度程序根据可用资源,命名空间上设置的默认或配置限制以及pod关联来决定是否运行pod。
限制每个特定pod的工作,限制其资源消耗;它们的目的不是限制几个pod的摘要资源消耗。
使用请求中提到的资源量启动pod。
例如,如果节点上有1000个CPU,并且pod请求限制为1000的500,则调度程序会知道其他500个可用,即使此时该pod消耗所有资源达到限制。因此,在具有1000个CPU可用的节点上,您可以启动两个pod,其中包含请求500和每个限制1000。