Поделиться через


Изменение размера пулов узлов в Службе Azure Kubernetes (AKS)

Из-за увеличения числа развертываний или для выполнения большей рабочей нагрузки может потребоваться изменить план масштабируемого набора виртуальных машин или изменить размер экземпляров AKS. Но в соответствии с политиками поддержки для AKS:

Узлы агента AKS отображаются на портале Azure как обычные ресурсы IaaS Azure. Но эти виртуальные машины развертываются в настраиваемой группе ресурсов Azure (обычно с префиксом MC_*). Нельзя выполнить любые прямые настройки для этих узлов с помощью API IaaS или ресурсов. Любые пользовательские изменения, которые не выполняются через API AKS, не будут сохраняться при обновлении, масштабировании, обновлении или перезагрузке.

Это применимо также к операции изменения размера, поэтому изменение размера экземпляров AKS таким образом не поддерживается. В этом практическом руководстве описан рекомендуемый метод решения этой проблемы.

Внимание

Этот метод применим к кластерам AKS на основе масштабируемого набора виртуальных машин. При использовании наборов доступности виртуальных машин вы ограничены только одним пулом узлов на кластер.

Примеры ресурсов

Предположим, что необходимо изменить размер существующего пула узлов, который вызывается nodepool1, с размера SKU Standard_DS2_v2 на Standard_DS3_v2. Для выполнения этой задачи вам потребуется создать новый пул узлов с SKU Standard_DS3_v2, переместить рабочие нагрузки из nodepool1 в новый пул узлов и удалить nodepool1. В этом примере мы назовем этот новый пул узлов mynodepool.

Снимок экрана: страница портал Azure кластера, перейдите к пулам > узлов параметров. Отображается один пул узлов с именем пула узлов 1.

kubectl get nodes

NAME                                STATUS   ROLES   AGE   VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   10d   v1.21.9
kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          93m     10.244.1.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-pfgbh           1/1     Running   0          94m     10.244.1.5   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-845757d86-dtvvs               1/1     Running   0          10d     10.244.0.2   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   coredns-845757d86-x27pp               1/1     Running   0          10d     10.244.2.3   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-nfrmh   1/1     Running   0          10d     10.244.2.4   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d10h   10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d10h   10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d10h   10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-ngdlb   1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-rvvqt   1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-h52hn       1/1     Running   1          3d10h   10.244.1.3   aks-nodepool1-31721111-vmss000002   <none>           <none>

Создание нового пула узлов с нужным SKU

Выполните команду az aks nodepool add, чтобы создать новый пул узлов с именем mynodepool с тремя узлами, использующими номер SKU виртуальной машины Standard_DS3_v2.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3 \
    --node-vm-size Standard_DS3_v2 \
    --mode System \
    --no-wait

Примечание.

Каждый кластер AKS должен содержать хотя бы один пул системных узлов с по меньшей мере одним узлом. В приведенном выше примере мы используем --mode из System, так как предполагается, что кластер имеет только один пул узлов, поэтому для его замены требуется пул узлов System. Режим пула узлов можно обновить в любое время.

При изменении размера обязательно учитывайте другие требования и соответствующим образом настройте пул узлов. Может потребоваться изменить указанную выше команду. Полный список параметров конфигурации см. на странице справки по az aks nodepool add.

Через несколько минут будет создан новый пул узлов.

Снимок экрана: страница портал Azure кластера, перейдите к пулам > узлов параметров. Отображаются два пула узлов с именованным пулом узлов 1 и пулом узлов.

kubectl get nodes

NAME                                 STATUS   ROLES   AGE   VERSION
aks-mynodepool-20823458-vmss000000   Ready    agent   23m   v1.21.9
aks-mynodepool-20823458-vmss000001   Ready    agent   23m   v1.21.9
aks-mynodepool-20823458-vmss000002   Ready    agent   23m   v1.21.9
aks-nodepool1-31721111-vmss000000    Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000001    Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000002    Ready    agent   10d   v1.21.9

Блокировка существующих узлов

Блокировка помечает указанные узлы как непригодные к назначению и предотвращает добавление дополнительных pod к узлам.

Сначала получите имена узлов, которые вы хотите заблокировать с использованием kubectl get nodes. Выходные данные должны выглядеть следующим образом.

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   7d21h   v1.21.9

Затем, используя kubectl cordon <node-names>,укажите нужные узлы в списке с разделителями-пробелами.

kubectl cordon aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002
node/aks-nodepool1-31721111-vmss000000 cordoned
node/aks-nodepool1-31721111-vmss000001 cordoned
node/aks-nodepool1-31721111-vmss000002 cordoned

Сток существующих узлов

Внимание

Для успешного очистки узлов и вытеснения запущенных модулей pod убедитесь, что все модули PodDisruptionBudgets (PDBS) позволяют перемещать по крайней мере одну реплику pod одновременно. В противном случае операция очистки и вытеснения завершится ошибкой. Чтобы проверить это, можно запустить kubectl get pdb -A и проверить ALLOWED DISRUPTIONS наличие по крайней мере одного или более поздней версии.

Сток узлов приведет к тому, что работающие на них pod будут исключены и воссозданы на других пригодных к назначению узлах.

Чтобы выполнить сток узлов, используйте kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data, снова используя список имен узлов с разделителями-пробелами.

Внимание

Использование --delete-emptydir-data требуется для исключения созданных с помощью AKS pod coredns и metrics-server. Если этот флаг не используется, ожидается ошибка. Дополнительные сведения см. в документации по emptydir.

kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data

После завершения операции стока все pod, кроме тех, которые контролируются наборами управляющих программ, работают в новом пуле узлов.

kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                 NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          15m     10.244.4.5   aks-mynodepool-20823458-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-rhmzq           1/1     Running   0          16m     10.244.4.3   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   azure-ip-masq-agent-sxn96             1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-tsq98             1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   azure-ip-masq-agent-xzrdl             1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-d2pkc               1/1     Running   0          17m     10.244.3.2   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-f8g9s               1/1     Running   0          17m     10.244.5.2   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-f8xh2   1/1     Running   0          17m     10.244.4.2   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-7md2w              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azuredisk-node-lcmtz              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-mmncr              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-29w6z              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-4nrx7              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d11h   10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d11h   10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azurefile-node-gqqnv              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d11h   10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-2bbp5   1/1     Running   0          17m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-7xzxj   1/1     Running   0          16m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   kube-proxy-7h8r5                      1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   kube-proxy-nqmnj                      1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   kube-proxy-zn77s                      1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-2x6x8       1/1     Running   0          16m     10.244.4.4   aks-mynodepool-20823458-vmss000002   <none>           <none>

Устранение неполадок

Вы можете увидеть сообщение об ошибке следующего вида.

Ошибка при исключении pods/[имя_pod] -n [пространство_имен] (повторная попытка через 5 с). Не удается исключить pod так как это нарушит бюджет неработоспособности pod.

По умолчанию в вашем кластере есть AKS_managed бюджеты неработоспособности pod (например, coredns-pdb или konnectivity-agent), где для MinAvailable задано значение 1. Если, например, есть две запущенных группы pod coredns, в то время как одна из них создается заново и недоступна, другая не может быть затронута из-за бюджета неработоспособности pod. Это решается само собой после того, как исходная группа pod coredns будет назначена и запущена, что позволяет правильно исключить и воссоздать вторую группу pod.

Совет

Рассмотрите возможность выполнения стока узлов по очереди, чтобы оптимизировать процесс исключения и предотвратить регулирование. Дополнительные сведения см. в разделе:

Удаление существующего пула узлов

Чтобы удалить существующий пул узлов, используйте портал Azure или команду az aks nodepool delete:

az aks nodepool delete \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1

После завершения окончательным результатом будет кластер AKS с одним новым пулом узлов с новым желаемым размером SKU и всеми правильно работающими приложениями и pod:

Снимок экрана: страница портал Azure кластера, перейдите к пулам > узлов параметров. Отображается один пул узлов с именем пула узлов.

kubectl get nodes

NAME                                 STATUS   ROLES   AGE   VERSION
aks-mynodepool-20823458-vmss000000   Ready    agent   63m   v1.21.9
aks-mynodepool-20823458-vmss000001   Ready    agent   63m   v1.21.9
aks-mynodepool-20823458-vmss000002   Ready    agent   63m   v1.21.9

Следующие шаги

После изменения размера пула узлов путем блокировки и стока, узнайте об использовании нескольких пулов узлов.