Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возможно, потребуется изменить размер виртуальных машин, чтобы вместить все большее количество развертываний или выполнить большую рабочую нагрузку. Изменение размера экземпляров AKS напрямую не поддерживается при использовании масштабируемых наборов виртуальных машин в AKS, как описано в политиках поддержки AKS:
Узлы агента AKS отображаются на портале Azure как обычные ресурсы Azure IaaS. Но эти виртуальные машины развертываются в настраиваемой группе ресурсов Azure (обычно с префиксом MC_*). Вы не можете вносить прямые настройки на эти узлы с помощью API или ресурсов IaaS. Любые пользовательские изменения, которые не выполняются через API AKS, не будут сохраняться при обновлении, масштабировании, обновлении или перезагрузке.
В этой статье описан рекомендуемый метод изменения размера пула узлов, создав новый пул узлов с требуемым размером SKU, кордонированием и очисткой существующих узлов, а затем удаление существующего пула узлов.
Important
Этот метод предназначен для кластеров AKS на основе масштабируемых наборов виртуальных машин. При использовании пулов узлов на основе виртуальных машин можно легко обновить размеры виртуальных машин в существующем пуле узлов с помощью одной команды Azure CLI и иметь несколько размеров виртуальных машин в одном пуле узлов. Дополнительные сведения см. в документации по пулам узлов виртуальных машин.
Создайте новый пул узлов с желаемым номером SKU
Note
Каждый кластер AKS должен содержать по крайней мере один системный пул узлов с по крайней мере одним узлом. В этом примере мы используем --mode и System для добавления пула системных узлов, чтобы заменить пул системных узлов, который мы хотим изменить в размере. Вы можете обновить режим пула узлов в любое время. Вы также можете добавить пул узлов пользователя, установив --mode в User.
При изменении размера убедитесь, что вы учитываете все требования к рабочей нагрузке, такие как зоны доступности, и настраиваете пул узлов VMSS соответствующим образом. Возможно, вам потребуется изменить следующую команду в соответствии с вашими потребностями. Полный список параметров конфигурации см. на az aks nodepool add странице справки.
Создайте пул узлов с помощью
az aks nodepool addкоманды. В этом примере мы создадим пулmynodepoolузлов с тремя узлами иStandard_DS3_v2номером SKU виртуальной машины для замены существующего пула узлов,nodepool1имеющегоStandard_DS2_v2номер SKU виртуальной машины.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Создание нового пула узлов занимает несколько минут.
Получите состояние нового пула узлов с помощью
kubectl get nodesкоманды.kubectl get nodesВыходные данные должны выглядеть примерно так, как в новом пуле
mynodepoolузлов, так и в существующем пулеnodepool1узлов:NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 23m v1.21.9 aks-nodepool1-12345678-vmss000000 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 10d v1.21.9
Ограничьте доступ к существующим узлам
Кордонирование помечает указанные узлы как недоступные для планирования и предотвращает добавление дополнительных pod в узлы.
Получите имена узлов, которые требуется оцепить с помощью команды
kubectl get nodes.kubectl get nodesВаши выходные данные должны быть оформлены как в следующем примере, показывающем узлы в существующем пуле
nodepool1, которые вы хотите оцепить:NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 7d21h v1.21.9Объедините существующие узлы с помощью
kubectl cordonкоманды, указав нужные узлы в разделенном пробелом списке. Рассмотрим пример.kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002Выходные данные должны выглядеть примерно так, как показано, что узлы оцеплены:
node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Очистка существующих узлов
Important
Для успешного очистки узлов и вытеснения запущенных модулей pod убедитесь, что все модули PodDisruptionBudgets (PDBS) позволяют перемещать по крайней мере одну реплику pod одновременно. В противном случае операция дренирования/выселения завершается ошибкой. Чтобы проверить это, можно запустить kubectl get pdb -A и убедиться, что ALLOWED DISRUPTIONS не меньше 1.
Когда вы освобождаете узлы, поды, работающие на них, вытесняются и воссоздаются на других узлах, доступных для планирования.
Выполните очистку существующих узлов с помощью
kubectl drainкоманды и--ignore-daemonsets--delete-emptydir-dataфлагов, указав нужные узлы в разделенном пробелом списке. Рассмотрим пример.Important
Использование
--delete-emptydir-dataтребуется для вытеснения pod, созданных AKS, таких какcorednsиmetrics-server. Если этот флаг не используется, вы получите ошибку. Дополнительные сведения см. в документации по emptydir.kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-dataПосле завершения операции очистки все поды (за исключением подов, управляемых демон-сетами) должны работать в новом пуле узлов. Это можно проверить с помощью
kubectl get podsкоманды.kubectl get pods -o wide -A
Устранение проблем с вытеснением pod
При очистке узлов может возникнуть следующая ошибка:
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
По умолчанию в вашем кластере имеются управляемые системой AKS бюджеты прерываний подов (например, coredns-pdb или konnectivity-agent) с параметром MinAvailable значением 1. Например, если выполняется два coredns модуля pod, одновременно может быть нарушено только одно из них. Хотя один из них создается повторно и недоступен, другой coredns модуль pod не может быть вытеснен из-за нарушения бюджета pod. Эта проблема устраняется после планирования и запуска начального coredns модуля, что позволяет второму модулю быть правильно вытесненным и заново созданным.
Tip
Рассмотрите возможность очистки узлов по одному для более плавного вытеснения и предотвращения регулирования. Дополнительные сведения можно найти здесь
Удаление существующего пула узлов
Important
При удалении пула узлов AKS не выполняет кордон и очистку. Чтобы свести к минимуму нарушение работы модулей pod, работающих в пуле узлов, который вы планируете удалить, выполните выставление ограничения и очистку всех узлов в этом пуле перед удалением.
Удалите исходный пул узлов с помощью
az aks nodepool deleteкоманды.az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1Убедитесь, что в вашем кластере AKS есть только новый пул узлов, и приложения и поды работают должным образом, используя команду
kubectl get nodes.kubectl get nodesВаш выходной результат должен быть следующим, показывая только новый пул узлов
mynodepool:NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 63m v1.21.9
Дальнейшие шаги
После изменения размера пула узлов путем кордонирования и очистки узнайте больше об использовании нескольких пулов узлов.
Azure Kubernetes Service