Kubernetes Deployment充分利用了cpu和内存而无须强调

问题描述

我已经在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: 50Micpu: 80m开头,但可以增加到memory: 100Micpu: 120m。另外,正如您提到的,您总共有15个容器,因此取决于它们的requestlimits,它可以达到35%的{​​{1}}个以上。

HPA documentation - algorithm-details中,您可以找到信息:

当指定了targetAverageValue或targetAverageUtilization时,currentMetricValue的计算方法是对Horizo​​ntalPodAutoscaler缩放目标中所有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

如果这没有帮助,请澄清您的确切要求。