【问题标题】:Azure kubernetes pods showing high cpu usage when they get restarted or hpa works?Azure kubernetes pod 在重新启动或 hpa 工作时显示高 cpu 使用率?
【发布时间】:2021-10-08 01:47:30
【问题描述】:

我们使用的是 AKS 版本 1.19.11。

我们注意到,每当为我们的部署进行新的部署或作为 hpa 设置的一部分创建新的 Pod 或重新启动 Pod 时,我们都会收到 CPU 使用率过高的警报。

例如,-如果作为上述任何活动的一部分创建了一个新 pod,这会占用比允许的阈值更多的 CPU 吗? [ 部署规范中指定的 1 个核心的“最大限制”,应用程序重量轻,不需要太多 cpu anuyways ] ?反过来,它会在短时间内使 AzureMonitor 突然飙升,然后恢复正常。

为什么 pod 在启动或创建期间占用更多 CPU? 如果 pod 没有使用那么多 cpu,那么重复问题的原因是什么?

hpa 设置如下

Name:                                                  myapp
Namespace:                                             myapp
Labels:                                                app.kubernetes.io/managed-by=Helm
Annotations:                                           meta.helm.sh/release-name: myapp
                                                       meta.helm.sh/release-namespace: myapp
CreationTimestamp:                                     Mon, 26 Apr 2021 07:02:32 +0000
Reference:                                             Deployment/myapp
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  5% (17m) / 75%
Min replicas:                                          5
Max replicas:                                          12
Deployment pods:                                       1 current / 1 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range

在放置新的部署时添加事件。

根据从“myapp”命名空间中捕获的事件,为 myapp 推出了新的部署,如下所示。

在创建新的 pod 期间,它显示出更多的 CPU 峰值,因为我们从 Azuremonitor 收到警报,表明它超过了 80% 的阈值。[部署规范中指定的 1 个核心的“最大限制”]

30m         Normal    SuccessfulDelete    replicaset/myapp-1a2b3c4d5e   Deleted pod: myapp-1a2b3c4d5e-9fmrk
30m         Normal    SuccessfulDelete    replicaset/myapp-1a2b3c4d5e   Deleted pod: myapp-1a2b3c4d5e-hfr8w
29m         Normal    SuccessfulDelete    replicaset/myapp-1a2b3c4d5e   Deleted pod: myapp-1a2b3c4d5e-l2pnd
31m         Normal    ScalingReplicaSet   deployment/myapp              Scaled up replica set myapp-5ddc98fb69 to 1
30m         Normal    ScalingReplicaSet   deployment/myapp              Scaled down replica set myapp-1a2b3c4d5e to 2
30m         Normal    ScalingReplicaSet   deployment/myapp              Scaled up replica set myapp-5ddc98fb69 to 2
30m         Normal    ScalingReplicaSet   deployment/myapp              Scaled down replica set myapp-1a2b3c4d5e to 1
30m         Normal    ScalingReplicaSet   deployment/myapp              Scaled up replica set myapp-5ddc98fb69 to 3
29m         Normal    ScalingReplicaSet   deployment/myapp              Scaled down replica set myapp-1a2b3c4d5e to 0

警报设置

Period  Over the last 15 mins 
Value   100.274747 
Operator    GreaterThan 
Threshold   80 

【问题讨论】:

  • 您能否在应用新部署后粘贴kubectl get hpa myappEvents: 部分的输出?
  • 添加了新发布时的事件。我们再次收到高 CPU 使用率警报。当 pod 自动缩放也发生时,它也会发生
  • 您能否检查kubectl describe hpa myappEvents: 的输出,您是否有类似:New size: 9; reason: cpu resource utilization (percentage of request) above target 的内容?不确定您使用的是哪个 Azure 监控解决方案,但如果是一些标准的 pod / 容器监控,则它没有使用 HPA 作为信息源(检查此docs.microsoft.com/en-us/azure/aks/monitor-aks),因此问题与 HPA 无关。跨度>
  • 你也可以在部署过程中尝试在不同的终端运行watch -n 1 kubectl top pods --sort-by=cpu,也许会在这里得到一些有趣的东西。

标签: kubernetes azure-aks kubernetes-pod


【解决方案1】:

我不确定您在 AKS 监控中查看的具体指标是什么,因为您没有提到它,但这是可能的,

当您部署 POD 或 HPA 时,您的 AKS 会缩放副本,显示所有副本的总资源。

部署期间,有可能在某个阶段所有 POD 都处于运行阶段并占用和消耗资源。

您是否正在检查单个 POD 的特定资源? 超过阈值?

正如您所提到的应用程序是轻量级的,但是最初它可能会占用资源来启动进程,在这种情况下,您可能必须使用分析来检查资源。

【讨论】:

  • 刚刚将当前的 hpa 设置添加到上述问题中。所以想了解 hpa 是否会计算所有当前副本 cpu 使用率的平均值(比如当前正在运行的 5 个),并将与其目标阈值和相应的操作进行比较,或者它只会检查任何一个 pod 阈值高于75%。还想知道我们如何在使用 hpa 设置启动时微调 cpu 使用率,以便我们可以避免在 pod 启动期间的初始峰值上升。
  • HPA 将使用此算法管理副本:desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]kubernetes.io/docs/tasks/run-application/…
  • HPA 根据您设置的资源请求和限制计算 threasold 和 %,理想情况下您应该保持高一点。如果你保持它非常低,例如提到的最小 cpu 是 50m,最大限制是 70m,那么现在你的应用程序是轻量级的,只占用 60m,但在这种情况下它高于 80%,HPA 将扩展副本。
  • 所以 HPA 将通过计算该部署的所有副本的平均资源使用量来计算阈值和百分比,或者即使一个 pod 的资源使用量超过 hpa 阈值,它也会自动缩放?
  • 如果只有一个 pod 资源使用量超过 HPA 阈值,并不意味着 HPA 会自动扩展。为了更好地了解 HPA 的工作原理,您可以查看此处 stackoverflow.com/questions/48172151/…...(第二个答案)和此处 (stackoverflow.com/questions/60948575/…)。
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2022-07-15
相关资源
最近更新 更多