群集自动缩放器不降尺寸

Jim*_*ell 12 google-cloud-platform kubernetes google-kubernetes-engine

我在google kubernetes引擎(GKE)中设置了一个区域群集.节点组是每个区域中的单个vm(总共3个).我有一个部署,最少由HPA控制3个副本.所述节点组被配置为自动缩放(簇自动缩放又名CA).问题场景:

更新部署映像.Kubernetes自动创建新的pod,CA确定需要新节点.我现在有了4.当所有新的pod已经启动时,旧的pod会被删除,这意味着我拥有与前一分钟完全相同的CPU请求.但是在10分钟后最大缩小时间我还有4个节点.

现在,CPU对节点的请求是:

CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  358m (38%)    138m (14%)  516896Ki (19%)   609056Ki (22%)
--
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  800m (85%)    0 (0%)      200Mi (7%)       300Mi (11%)
--
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  510m (54%)    100m (10%)  410Mi (15%)      770Mi (29%)
--
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  823m (87%)    158m (16%)  484Mi (18%)      894Mi (33%)
Run Code Online (Sandbox Code Playgroud)

38%的节点正在运行:

Namespace                  Name                                                            CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                                            ------------  ----------  ---------------  -------------
  kube-system                event-exporter-v0.1.9-5c8fb98cdb-8v48h                          0 (0%)        0 (0%)      0 (0%)           0 (0%)
  kube-system                fluentd-gcp-v2.0.17-q29t2                                       100m (10%)    0 (0%)      200Mi (7%)       300Mi (11%)
  kube-system                heapster-v1.5.2-585f569d7f-886xx                                138m (14%)    138m (14%)  301856Ki (11%)   301856Ki (11%)
  kube-system                kube-dns-autoscaler-69c5cbdcdd-rk7sd                            20m (2%)      0 (0%)      10Mi (0%)        0 (0%)
  kube-system                kube-proxy-gke-production-cluster-default-pool-0fd62aac-7kls    100m (10%)    0 (0%)      0 (0%)           0 (0%)
Run Code Online (Sandbox Code Playgroud)

我怀疑它不会降级,因为heapster或kube-dns-autoscaler.但85%的pod包含:

Namespace                  Name                                                            CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                                            ------------  ----------  ---------------  -------------
  kube-system                fluentd-gcp-v2.0.17-s25bk                                       100m (10%)    0 (0%)      200Mi (7%)       300Mi (11%)
  kube-system                kube-proxy-gke-production-cluster-default-pool-7ffeacff-mh6p    100m (10%)    0 (0%)      0 (0%)           0 (0%)
  my-deploy                  my-deploy-54fc6b67cf-7nklb                                      300m (31%)    0 (0%)      0 (0%)           0 (0%)
  my-deploy                  my-deploy-54fc6b67cf-zl7mr                                      300m (31%)    0 (0%)      0 (0%)           0 (0%)
Run Code Online (Sandbox Code Playgroud)

流利的和kube-proxy pod存在于每个节点上,因此我假设没有节点就不需要它们.这意味着我的部署可以重新定位到其他节点,因为它只有300米的请求(31%,因为只有94%的节点CPU是可分配的).

所以我想我会检查日志.但如果我运行kubectl get pods --all-namespaces,那么CA的GKE上没有可见的pod.如果我使用该命令kubectl get configmap cluster-autoscaler-status -n kube-system -o yaml,它只告诉我它是否即将扩展,而不是为什么或为什么不.另一种选择是/var/log/cluster-autoscaler.log在主节点中查看.我SSH:在所有4个节点中编辑,只找到一个gcp-cluster-autoscaler.log.pos文件说:/var/log/cluster-autoscaler.log 0000000000000000 0000000000000000意味着文件应该就在那里但是是空的.根据FAQ的最后一个选项是检查pod的事件,但据我所知,它们是空的.

任何人都知道为什么它不会缩减或至少在哪里找到日志?

Jim*_*ell 6

回答自己的知名度。

问题在于,除非同时满足FAQ中提到的所有要求,否则CA永远不会考虑移动任何东西。因此,可以说我有100个具有51%CPU请求的节点。它仍然不会考虑缩小规模。

一种解决方案是将CA检查的价值提高到现在的50%。但是很遗憾,GKE不支持,请参阅Google支持@GalloCedrone的回答:

此外,我知道这个值听起来可能太低了,有人可能会对保持85%或90%的利率感兴趣,以避免出现这种情况。当前有一个开放的功能请求,使用户可以修改标志“ --scale-down-utilization-threshold”,但尚未实现。

我发现的解决方法是减少吊舱的CPU请求(从100m而不是300m),并使Horizo​​ntal Pod Autoscaler(HPA)按需创建更多。这对我来说很好,但是如果您的应用程序不适合许多小型实例,那么您就不走运了。如果总利用率低,也许是一项计划任务,该任务会封锁节点?