首页 > 解决方案 > 如何配置 pod 中断预算以耗尽 kubernetes 节点?

问题描述

我想在 AKS 上配置群集自动缩放器。缩小时由于 PDB 而失败:

I1207 14:24:09.523313       1 cluster.go:95] Fast evaluation: node aks-nodepool1-32797235-0 cannot be removed: no enough pod disruption budget to move kube-system/metrics-server-5cbc77f79f-44f9w
I1207 14:24:09.523413       1 cluster.go:95] Fast evaluation: node aks-nodepool1-32797235-3 cannot be removed: non-daemonset, non-mirrored, non-pdb-assignedkube-system pod present: cluster-autoscaler-84984799fd-22j42
I1207 14:24:09.523438       1 scale_down.go:490] 2 nodes found to be unremovable in simulation, will re-check them at 2018-12-07 14:29:09.231201368 +0000 UTC m=+8976.856144807

所有系统 pod 都minAvailable: 1手动分配了 PDB。我可以想象这不适用于只有一个副本的 POD,例如metrics-server

❯ k get nodes -o wide
NAME                       STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-32797235-0   Ready    agent   4h    v1.11.4   10.240.0.4    <none>        Ubuntu 16.04.5 LTS   4.15.0-1030-azure   docker://3.0.1
aks-nodepool1-32797235-3   Ready    agent   4h    v1.11.4   10.240.0.6    <none>        Ubuntu 16.04.5 LTS   4.15.0-1030-azure   docker://3.0.1

❯ ks get pods -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE                       NOMINATED NODE
cluster-autoscaler-84984799fd-22j42     1/1     Running   0          2h    10.244.1.5    aks-nodepool1-32797235-3   <none>
heapster-5d6f9b846c-g7qb8               2/2     Running   0          1h    10.244.0.16   aks-nodepool1-32797235-0   <none>
kube-dns-v20-598f8b78ff-8pshc           4/4     Running   0          3h    10.244.1.4    aks-nodepool1-32797235-3   <none>
kube-dns-v20-598f8b78ff-plfv8           4/4     Running   0          1h    10.244.0.15   aks-nodepool1-32797235-0   <none>
kube-proxy-fjvjv                        1/1     Running   0          1h    10.240.0.6    aks-nodepool1-32797235-3   <none>
kube-proxy-szr8z                        1/1     Running   0          1h    10.240.0.4    aks-nodepool1-32797235-0   <none>
kube-svc-redirect-2rhvg                 2/2     Running   0          4h    10.240.0.4    aks-nodepool1-32797235-0   <none>
kube-svc-redirect-r2m4r                 2/2     Running   0          4h    10.240.0.6    aks-nodepool1-32797235-3   <none>
kubernetes-dashboard-68f468887f-c8p78   1/1     Running   0          4h    10.244.0.7    aks-nodepool1-32797235-0   <none>
metrics-server-5cbc77f79f-44f9w         1/1     Running   0          4h    10.244.0.3    aks-nodepool1-32797235-0   <none>
tiller-deploy-57f988f854-z9qln          1/1     Running   0          4h    10.244.0.8    aks-nodepool1-32797235-0   <none>
tunnelfront-7cf9d447f9-56g7k            1/1     Running   0          4h    10.244.0.2    aks-nodepool1-32797235-0   <none>

需要更改哪些内容(副本数量?PDB 配置?)才能使缩减工作?

标签: azurekubernetesautoscalingazure-aks

解决方案


基本上,这是排空 PDB 配置的节点时的管理问题(Pod Disruption Budget)

这是因为驱逐被迫尊重您指定的 PDB

你有两个选择:

要么强迫手:

kubectl drain foo --force --grace-period=0

您可以从文档中检查其他选项 - > https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain

或使用驱逐 api:

{
  "apiVersion": "policy/v1beta1",
  "kind": "Eviction",
  "metadata": {
    "name": "quux",
    "namespace": "default"
  }
}

无论如何,drain 或 eviction api 尝试在 pod 上删除,以便在完全耗尽节点之前将它们安排到其他地方

如文档中所述:

API 可以通过以下三种方式之一进行响应:

  1. 如果驱逐被批准,那么 pod 就会被删除,就像您向 pod 的 URL 发送了 DELETE 请求一样,您会返回 200 OK。
  2. 如果当前的事态不允许根据预算中规定的规则进行驱逐,您会收到 429 Too Many Requests。这通常用于任何请求的通用速率限制
  3. 如果存在某种错误配置,例如多个预算指向同一个 pod,您将收到 500 Internal Server Error。

对于给定的驱逐请求,有两种情况:

  1. 没有与此 pod 匹配的预算。在这种情况下,服务器总是返回 200 OK。

  2. 至少有一个预算。在这种情况下,上述三个响应中的任何一个都可能适用。

如果卡住了,那么您可能需要手动进行

你可以在这里这里读到我


推荐阅读