Создание кластера Службы Azure Kubernetes (AKS), который использует зоны доступности
В этой статье показано, как создать кластер AKS и распределить компоненты узлов между зонами доступности.
Подготовка к работе
- Вам необходимо установить и настроить службу Azure CLI версии 2.0.76 или более поздней. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Ознакомьтесь с обзором зон доступности в AKS, чтобы понять преимущества и ограничения использования зон доступности в AKS.
Шаблоны Azure Resource Manager и зоны доступности
При создании кластера AKS с зонами доступности с помощью шаблона Azure Resource Manager следует учитывать следующие сведения:
- Если вы явно определяете значение NULL в шаблоне, например,
"availabilityZones": null
шаблон обрабатывает свойство как если бы оно не существует. Это означает, что кластер не развертывается в зоне доступности. - Если свойство не включено
"availabilityZones":
в шаблон, кластер не развертывается в зоне доступности. - Невозможно обновить параметры для зон доступности в существующем кластере, так как поведение отличается при обновлении кластера AKS с помощью шаблонов Azure Resource Manager. Если вы явно задали значение NULL в шаблоне для зон доступности и обновляете кластер, он не обновляет кластер для зон доступности. Однако если опустить свойство зон доступности, используя такой синтаксис, как
"availabilityZones": []
, то операция развертывания попытается отключить зоны доступности в существующем кластере AKS и завершится сбоем.
Создание кластера AKS в разных зонах доступности
При создании кластера с помощью az aks create
команды --zones
параметр указывает зоны доступности для развертывания узлов агента в. Зоны доступности, в которые развертываются компоненты управляемого уровня управления, не контролируются этим параметром. Они автоматически распределяются по всем зонам доступности (если они присутствуют) в регионе во время развертывания кластера.
В следующих примерах команд показано, как создать группу ресурсов и кластер AKS с тремя узлами. Один узел агента в зоне 1, один в 2, а затем один в 3.
Создайте группу ресурсов с помощью
az group create
команды.az group create --name $RESOURCE_GROUP --location $LOCATION
Создайте кластер AKS с помощью
az aks create
команды с параметром--zones
.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --generate-ssh-keys \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --node-count 3 \ --zones 1 2 3
Создание кластера AKS займет несколько минут.
При выборе зоны, к которой должен принадлежать новый узел, указанный пул узлов AKS использует оптимальное распределение зон усилий, предлагаемое базовой Масштабируемые наборы виртуальных машин Azure. Пул узлов AKS "балансируется", если каждая зона имеет одинаковое количество виртуальных машин или +- одну виртуальную машину во всех остальных зонах для масштабируемого набора.
Проверка распределения узлов между зонами
Когда кластер будет готов, укажите, в какой зоне доступности находятся узлы агента в масштабируемом наборе.
Получите учетные данные кластера AKS с помощью
az aks get-credentials
команды:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Вывод списка узлов в кластере с помощью
kubectl describe
команды и фильтрации по значениюtopology.kubernetes.io/zone
.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
В следующем примере выходных данных показаны три узла, распределенные по заданному региону и зонам доступности, такие как eastus2-1 для первой зоны доступности и eastus2-2 для второй зоны доступности.
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3
При добавлении дополнительных узлов в пул агентов платформа Azure автоматически распределяет базовые виртуальные машины по указанным зонам доступности.
При использовании Kubernetes версии 1.17.0 и более поздних версий AKS использует topology.kubernetes.io/zone
метку и устаревшую failure-domain.beta.kubernetes.io/zone
версию. Вы можете получить тот же результат выполнения kubectl describe nodes
команды в предыдущем примере с помощью следующей команды:
kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'
Следующий пример напоминает выходные данные с более подробными сведениями:
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
Проверка распределения узлов между зонами
Как описано в статье Хорошо известные метки, заметки и taint, Kubernetes использует метку topology.kubernetes.io/zone
для автоматического распределения модулей pod в контроллере или службе репликации в разных доступных зонах. В этом примере вы протестируете метку и масштабируйте кластер с 3 до 5 узлов, чтобы проверить правильность распространения модуля pod.
Масштабирование кластера AKS с 3 до 5 узлов с помощью
az aks scale
команды с заданным значением--node-count
5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
После завершения операции масштабирования проверьте распределение pod по зонам с помощью следующей
kubectl describe
команды:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
В следующем примере выходных данных показаны пять узлов, распределенных по указанному региону и зонам доступности, например eastus2-1 для первой зоны доступности и eastus2-2 для второй зоны доступности:
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3 Name: aks-nodepool1-28993262-vmss000003 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000004 topology.kubernetes.io/zone=eastus2-2
Разверните приложение NGINX с тремя репликами с помощью следующих
kubectl create deployment
команд иkubectl scale
команд:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
Проверьте распределение pod по зонам с помощью следующей
kubectl describe
команды:kubectl describe pod | grep -e "^Name:" -e "^Node:"
В следующем примере выходных данных показаны три модуля pod, распределенные по указанному региону и зонам доступности, например eastus2-1 для первой зоны доступности и eastus2-2 для второй зоны доступности:
Name: nginx-6db489d4b7-ktdwg Node: aks-nodepool1-28993262-vmss000000/10.240.0.4 Name: nginx-6db489d4b7-v7zvj Node: aks-nodepool1-28993262-vmss000002/10.240.0.6 Name: nginx-6db489d4b7-xz6wj Node: aks-nodepool1-28993262-vmss000004/10.240.0.8
Как видно из предыдущих выходных данных, первый модуль pod выполняется на узле 0, расположенном в зоне
eastus2-1
доступности. Второй модуль pod выполняется на узле 2, соответствующемeastus2-3
, а третий — в узле 4eastus2-2
. Без дополнительной настройки Kubernetes правильно распределяет модули pod по всем трем зонам доступности.
Следующие шаги
В этой статье описано, как создать кластер AKS с помощью зон доступности. Дополнительные рекомендации о высокодоступных кластерах см. в руководстве по обеспечению непрерывности бизнеса и аварийного восстановления в AKS.
Azure Kubernetes Service