我已经在Kubernetes上部署了一个应用程序,并想测试hpa。使用kubectl top-nodes命令,我注意到cpu和内存增加了,但没有给它带来压力。这有道理吗?
此外,在强调使用apachebench进行部署的同时,cpu和内存的增加不足以通过目标并制作副本。
我的部署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个节点(主节点、工作节点(的集群。
我想强调部署,这样我就可以看到它的规模扩大。但我觉得这里有个问题!在不给应用程序带来压力的情况下,
Pod的CPU/Memory已经通过目标,并且已经制作了2个副本(而没有强调(。我知道我向容器提供的请求越多,这个百分比就越低。但是,在不增加压力的情况下,从一开始就增加内存/cpu的使用量有意义吗?
我希望,目标的左侧部分(pod中内存的使用率(处于0%的起点,并尽我所强调的那样增加它并创建副本。但正如我在apache bench上强调的那样,该值最多增加了10%的
我们可以在这里看到CPU的使用情况:kubectl顶部吊舱
NAME CPU(cores) MEMORY(bytes)
x-app-55b54b6fc8-7dqjf 76m 765Mi
!!59%是pod的内存使用率,由内存请求/内存之和(内存使用率(描述。在我的情况下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
关于请求和限制
请求和限制是Kubernetes用来控制CPU和内存等资源的机制请求是容器保证得到的如果容器请求资源,Kubernetes只会将其安排在可以为其提供资源的节点上限制,另一方面,确保容器永远不会超过某个值。容器只允许上升到极限,然后就受到限制。
但是,从一开始就增加内存/cpu的使用量,而不增加压力,这有意义吗
是的,例如您的容器www
,它可以从memory: 50Mi
和cpu: 80m
开始,但可以增加到memory: 100Mi
和cpu: 120m
。此外,正如您所提到的,您总共有15个容器,因此根据它们的request
、limits
,它可以达到您的memory
中的35%
以上。
在HPA文档-算法细节中,您可以找到信息:
当指定targetAverageValue或targetAverageUtilization时,currentMetricValue是通过取HorizontalPodAutoscaler刻度目标中所有Pod的给定度量的平均值来计算的。然而,在检查公差并决定最终值之前,我们会考虑吊舱准备情况和缺失指标。
所有设置了删除时间戳的Pod(即处于关闭过程中的Pod(和所有失败的Pod都将被丢弃。
如果某个特定Pod缺少度量,则将其留作以后使用;缺少度量的Pods将用于调整最终缩放量。
不确定最后一个问题:
!!59%是pod的内存使用率,由内存请求/内存之和(内存使用率(描述。在我的情况下,59%=765Mi/1310Mi
在您的HPA
中,您设置在averageUtilization:
达到memory
的35%
时创建另一个pod
。它到达59%
,并创建了另一个吊舱。由于HPA目标是memory
,因此HPA
根本不计算CPU
。此外,请记住,由于这是average
,更改值大约需要1分钟。
为了更好地了解HPA
是如何工作的,请尝试此演练。
如果这没有帮助,请澄清你到底在问什么。