2

我在 Kubernetes 上部署了一个应用程序并想测试 hpa。使用 kubectl top nodes 命令,我注意到 cpu 和内存在没有压力的情况下增加了。是否有意义?

此外,在强调使用 apache bench 部署时,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 个容器组成,我有一个 VM,其中包含一个具有 2 个节点(主节点、工作节点)的集群。

我想强调部署,以便我可以看到它扩大规模。但是这里我觉得有问题!在不强调应用程序的情况下,

Pod 的 CPU/内存已经超过了目标,并且已经制作了 2 个副本(没有强调它)。我知道我向容器提供的请求越多,这个百分比就越少。但是,从一开始就增加内存/cpu 的使用量而不强调它是否有意义?

我希望,目标的左侧部分(pod 中内存的使用)处于开始的 0%,并且尽可能多地强调它要增加并创建副本。但是当我强调 apache bench 时,该值最多增加 10%

我们可以在这里看到 CPU 的使用情况: kubectl top pods

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 
4

1 回答 1

0

使用 kubectl top nodes 命令,我注意到 cpu 和内存在没有压力的情况下增加了。是否有意义?

是的,这是有道理的。如果您要检查Google Cloud请求和限制

请求和限制是 Kubernetes 用来控制 CPU 和内存等资源的机制。请求是容器保证得到的。如果容器请求资源,Kubernetes 只会将其调度到可以为其提供该资源的节点上。另一方面,限制确保容器永远不会超过某个值。容器只允许上升到极限,然后被限制。

但是,从一开始就增加内存/cpu 的使用量而不强调它是否有意义?

是的,例如您的容器www,它可以从它开始,memory: 50Micpu: 80m它允许增加到memory: 100Miand cpu: 120m。此外,正如您提到的,您总共有 15 个容器,因此取决于它们requestlimits它可以达到35%您的memory.

HPA 文档 - algorithm-details中,您可以找到以下信息:

当指定了 targetAverageValue 或 targetAverageUtilization 时,currentMetricValue 是通过对 Horizo​​ntalPodAutoscaler 的缩放目标中的所有 Pod 取给定指标的平均值来计算的。然而,在检查容差和决定最终值之前,我们会考虑 pod 的就绪情况和缺失的指标。

所有设置了删除时间戳的 Pod(即正在关闭的 Pod)和所有失败的 Pod 都被丢弃。

如果某个特定 Pod 缺少指标,则将其留待以后使用;缺少指标的 Pod 将用于调整最终的缩放量。

不确定最后一个问题:

!!59% 是 pod 的内存使用量,由内存请求/内存的总和(内存使用量)描述。在我的情况下 59% = 765Mi/1310Mi

HPA你设置创建另一个的pod时候averageUtilization:会到达35%memory。它到达59%并创建了另一个吊舱。由于 HPA 目标是memoryHPA所以根本不算数CPU。另外请记住,因为这average需要大约 1 分钟来更改值。

为了更好地了解HPA其工作原理,请尝试此演练

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

于 2020-09-21T13:14:13.920 回答