Как настроить бюджет сброса pod для слива узла kubernetes? - PullRequest
0 голосов
/ 07 декабря 2018

Я бы хотел настроить автоскалер кластера на 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

Всем системным модулям назначено 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?), Чтобы уменьшить масштабирование для работы?

1 Ответ

0 голосов
/ 10 декабря 2018

По сути, это проблемы администрирования при сливе узлов, настроенных с помощью PDB (бюджет прерывания работы подсистемы)

Это связано с тем, что выселения вынуждены уважать указанную вами 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"
  }
}

Во всяком случае, API-интерфейс стока или вытеснения пытается удалить на модуле, чтобы они могли быть запланированы в другом месте, прежде чем полностью опустошить узел

Как указано в документации:

APIможет ответить одним из трех способов:

  1. Если выселение разрешено, то модуль удаляется так же, как если бы вы отправили запрос DELETE на URL-адрес модуля, и вы получили обратно 200 OK.
  2. Если текущее положение дел не позволит выселить по правилам, изложенным в бюджете, вы получите 429 Too Many Requests.Обычно это используется для общего ограничения скорости любых запросов
  3. Если есть какая-то неверная конфигурация, например, несколько бюджетов, указывающих на один модуль, вы получите 500 Internal Server Error.

Для данного запроса на выселение существует два случая:

  1. Нет бюджета, соответствующего этому модулю.В этом случае сервер всегда возвращает 200 OK.

  2. Существует как минимум один бюджет.В этом случае может подойти любой из трех приведенных выше ответов.

Если он застрянет, возможно, вам придется сделать это вручную

Вы можете прочитать меня здесь или здесь

...