我在Google Kubernetes群集上启用了自动缩放功能,我可以看到其中一个使用的Pod更低
我总共有6个节点,并且我希望至少该节点会终止。我经历了以下几点: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-types-of-pods-can-prevent-ca-from-removing-a-node
我已将此注释添加到我的所有Pod中
cluster-autoscaler.kubernetes.io/safe-to-evict: true
但是,群集自动缩放器可以正确放大,但是并没有达到我的预期。
我有以下日志
$ kubectl logs kube-dns-autoscaler-76fcd5f658-mf85c -n kube-system
autoscaler/pkg/autoscaler/k8sclient/k8sclient.go:90: Failed to list *v1.Node: Get https://10.55.240.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.55.240.1:443: getsockopt: connection refused
E0628 20:34:36.187949 1 reflector.go:190] github.com/kubernetes-incubator/cluster-proportional-autoscaler/pkg/autoscaler/k8sclient/k8sclient.go:90: Failed to list *v1.Node: Get https://10.55.240.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.55.240.1:443: getsockopt: connection refused
E0628 20:34:47.191061 1 reflector.go:190] github.com/kubernetes-incubator/cluster-proportional-autoscaler/pkg/autoscaler/k8sclient/k8sclient.go:90: Failed to list *v1.Node: Get https://10.55.240.1:443/api/v1/nodes?resourceVersion=0: net/http: TLS handshake timeout
I0628 20:35:10.248636 1 autoscaler_server.go:133] ConfigMap not found: Get https://10.55.240.1:443/api/v1/namespaces/kube-system/configmaps/kube-dns-autoscaler: net/http: TLS handshake timeout, will create one with default params
E0628 20:35:17.356197 1 autoscaler_server.go:95] Error syncing configMap with apiserver: configmaps "kube-dns-autoscaler" already exists
E0628 20:35:18.191979 1 reflector.go:190] github.com/kubernetes-incubator/cluster-proportional-autoscaler/pkg/autoscaler/k8sclient/k8sclient.go:90: Failed to list *v1.Node: Get https://10.55.240.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.55.240.1:443: i/o timeout
我不确定以上是否是相关日志,调试此问题的正确方法是什么?
我的广告连播具有本地存储空间。我一直在尝试使用
调试此问题kubectl drain gke-mynode-d57ded4e-k8tt
error: DaemonSet-managed pods (use --ignore-daemonsets to ignore): fluentd-gcp-v3.1.1-qzdzs, prometheus-to-sd-snqtn; pods with local storage (use --delete-local-data to override): mydocs-585879b4d5-g9flr, istio-ingressgateway-9b889644-v8bgq, mydocs-585879b4d5-7lmzk
我认为忽略daemonsets
是安全的,因为CA可以将其逐出,但是我不确定如何使CA理解可以将mydocs逐出并在添加注释后移至另一个节点
答案 0 :(得分:1)
kubectl logs
命令用于DNS自动缩放器,而不用于群集自动缩放器。它将为您提供有关群集中kube-dns副本数量的信息,而不是节点数量或扩展决策的信息。
从cluster autoscaler FAQ(并考虑到您在问题中写的内容):
Kube系统吊舱:
- 默认情况下不在节点上运行
- 具有本地存储空间的豆荚
另外,限制性Pod Disruption Budgets
。但是,由于问题中未提及,因此我假设您尚未设置任何内容。
尽管您的Pod具有本地存储,但是您添加了注释以使其安全地逐出,从而使系统Pod在默认情况下不会在节点中运行。
由于GKE中的系统Pod已用reconciliation loop注释,因此您无法在其中添加此指令,这可能会阻止其驱逐。
在这种情况下,您可以考虑使用Pod Disruption Budget
configured to allow the autoscaler to evict them。
此Pod Disruption Budget
可以包含节点中默认未运行的DNS和日志记录Pod。
不幸的是,GKE是托管选项,因此自动缩放器常见问题解答中没有太多应用。但是,如果您想走得更远,则不妨考虑使用pod binpacking strategy,Affinity and anti-affinity和Taints and tolerations使requests and limits正确地适合它们,从而使缩小尺寸变得更容易。
最后,在GKE上,您可以使用cluster-autoscaler-status
ConfigMap来检查自动缩放器的决定。
答案 1 :(得分:0)
与此同时,GKE 添加了 autoscaling profiles
:
https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#autoscaling_profiles
<块引用>优化利用率:优先考虑优化利用率,而不是在集群中保留备用资源。选中后,集群自动缩放器会更积极地缩减集群:它可以删除更多节点,并更快地删除节点。此配置文件已针对对启动延迟不敏感的批处理工作负载进行了优化。我们目前不建议将此配置文件用于服务工作负载。
optimize-utilization
帮助将我们的暂存系统缩小到零节点,因为所有 Kubernetes 资源都已被删除。但是,GKE 做出反应并开始缩减节点池还需要几分钟的时间。