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的事件,但据我所知,它们是空的.
任何人都知道为什么它不会缩减或至少在哪里找到日志?
回答自己的知名度。
问题在于,除非同时满足FAQ中提到的所有要求,否则CA永远不会考虑移动任何东西。因此,可以说我有100个具有51%CPU请求的节点。它仍然不会考虑缩小规模。
一种解决方案是将CA检查的价值提高到现在的50%。但是很遗憾,GKE不支持,请参阅Google支持@GalloCedrone的回答:
此外,我知道这个值听起来可能太低了,有人可能会对保持85%或90%的利率感兴趣,以避免出现这种情况。当前有一个开放的功能请求,使用户可以修改标志“ --scale-down-utilization-threshold”,但尚未实现。
我发现的解决方法是减少吊舱的CPU请求(从100m而不是300m),并使Horizontal Pod Autoscaler(HPA)按需创建更多。这对我来说很好,但是如果您的应用程序不适合许多小型实例,那么您就不走运了。如果总利用率低,也许是一项计划任务,该任务会封锁节点?
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |