问题描述
我已经在Kubernetes上部署了一个应用程序,并想测试hpa。 使用kubectl top nodes命令时,我注意到cpu和内存在不增加压力的情况下增加了。 有道理吗?
在强调使用Apache Bench进行部署的同时,cpu和内存也没有增加到足以传递目标并制作副本的程度。
我的Deployment yaml文件太大,无法提供。这是我的容器之一。
- name: web
image: PHP_apache:1.0
imagePullPolicy: Always
resources:
requests:
memory: 50Mi
cpu: 80m
limits:
memory: 100Mi
cpu: 120m
volumeMounts:
- name: shared-data
mountPath: /var/www/html
ports:
- containerPort: 80
它由15个容器组成 我有一个包含一个包含2个节点(主节点,工作节点)的群集的VM。
我想强调部署,以便我可以看到它的扩展。 但是我觉得这里有问题!无需强调应用,
来自Pod的cpu /内存已通过目标,并已创建2个副本(不加强调)。 我知道我提供给容器的请求越多,该百分比就越少。 但是,从一开始就增加内存/ cpu的使用量,而不用强调它是否有意义?
我希望目标的左侧部分(pod中的内存使用量)处于0%的初始值,并尽我所能增加并创建副本。 但是随着我在apache bench上的压力,该值最多增加了10%
我们可以在这里看到cpu的使用情况: kubectl顶部豆荚 @H_404_24@
NAME cpu(cores) MEMORY(bytes)
x-app-55b54b6fc8-7dqjf 76m 765Mi
!!!! 59%是Pod中的内存使用量@H_404_24@,由内存请求总数/内存(内存使用量)描述。在我的情况下 59%= 765Mi / 1310Mi
HPA Yaml文件:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
Metadata:
name: hpa
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
metrics:
- type: Resource
resource:
name: memory
target:
type: utilization
averageutilization: 35
解决方法
使用kubectl top nodes命令时,我注意到CPU和内存在不增加压力的情况下增加了。有道理吗?
是的,这很有道理。如果您要检查Google Cloud
关于Requests and Limits
请求和限制是Kubernetes用于控制CPU和内存等资源的机制。 请求是保证容器能够得到的东西。如果容器请求资源,Kubernetes只会将其安排在可以提供该资源的节点上。另一方面,限制条件是确保容器的价值永远不会超过特定值。只能使容器上升到极限,然后再对其进行限制。
但是从一开始就增加内存/ cpu的使用量,而不用强调它是否有意义?
是的,例如您的容器www
可以以memory: 50Mi
和cpu: 80m
开头,但可以增加到memory: 100Mi
和cpu: 120m
。另外,正如您提到的,您总共有15个容器,因此取决于它们的request
,limits
,它可以达到35%
的{{1}}个以上。
在HPA documentation - algorithm-details中,您可以找到信息:
当指定了targetAverageValue或targetAverageUtilization时,currentMetricValue的计算方法是对HorizontalPodAutoscaler缩放目标中所有Pod的给定指标取平均值。但是,在检查公差并确定最终值之前,我们会考虑吊舱准备情况和缺少的指标。
设置了删除时间戳记的所有Pod(即处于关闭状态的Pod)和所有失败的Pod将被丢弃。
如果特定的Pod缺少指标,则将其保留以备后用;缺少指标的Pod将用于调整最终缩放比例。
不确定最后一个问题:
!! 59%是Pod中的内存使用量,由“内存请求总数/内存(内存使用量)”描述。在我的情况下,59%= 765Mi / 1310Mi
在memory
中,当HPA
将达到pod
中的averageUtilization:
时,您将创建另一个35%
。它到达memory
,并创建了另一个广告连播。由于HPA目标是59%
,因此memory
根本不算HPA
。另外请记住,这是CPU
,大约需要1分钟才能更改值。
为更好地了解average
的工作方式,请尝试this walkthrough。
如果这没有帮助,请澄清您的确切要求。