【问题标题】:Kubernetes Deployment makes great use of cpu and memory without stressing itKubernetes Deployment 充分利用了 cpu 和内存,而不会给它带来压力
【发布时间】:2020-12-31 17:00:22
【问题描述】:

我在 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 顶级吊舱

NAME CPU(cores) MEMORY(bytes) x-app-55b54b6fc8-7dqjf 76m 765Mi

!!59% 是 pod 的内存使用率,由 Sum of Memory Requests/Memory(usage of memory) 描述。在我的情况下 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 

【问题讨论】:

  • 一切都取决于您在配置 YAML 中包含的内容。你能提供那些 YAML 吗?你部署了什么应用程序,它应该做什么。您是否设置了 CPU/内存Request/Limits?你的环境是什么?您是如何尝试增加此负载的?您必须提供更多信息,因为这个问题太笼统了。
  • 感谢您的回答...我已经编辑了我的帖子!

标签: kubernetes deployment cpu-usage hpa


【解决方案1】:

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

是的,这是有道理的。如果你会检查Google Cloud 关于Requests and Limits

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

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

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

HPA documentation - 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% 并创建了另一个 pod。由于 HPA 目标是 memory,所以 HPA 根本不算 CPU。另外请记住,这是average,更改值需要大约 1 分钟。

为了更好地了解HPA 的工作原理,请尝试this walkthrough

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

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2018-11-26
    • 2020-12-03
    • 2014-12-28
    • 1970-01-01
    • 2013-12-08
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多