gpt4 book ai didi

kubernetes - GKE 集群未缩减

转载 作者:行者123 更新时间:2023-12-02 11:30:39 26 4
gpt4 key购买 nike

我在 Google Kubernetes 集群上启用了自动缩放功能,其中一个 pod 的使用率要低得多

enter image description here

我总共有 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

我不确定以上是相关日志,调试此问题的正确方法是什么?

我的 pod 有本地存储。我一直在尝试使用调试这个问题
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 可以在添加注释后被驱逐并移动到另一个节点

编辑

如 GCP 控制台所示,已正确设置最小和最大节点
enter image description here

最佳答案

kubectl logs命令用于 DNS 自动缩放器,而不是集群自动缩放器。它将为您提供有关集群中 kube-dns 副本数量的信息,而不是节点数量或扩展决策。

来自 cluster autoscaler FAQ (并考虑到您在问题中所写的内容):

Kube-system pods that:

  • are not run on the node by default
  • Pods with local storage


此外,限制性 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 tolerationsrequests and limits适本地安装它们,尽可能使缩小规模更容易。

最后,在 GKE 上,您可以使用 cluster-autoscaler-status ConfigMap检查自动缩放器正在做出哪些决定。

关于kubernetes - GKE 集群未缩减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com