Руководство по Масштабирование приложений в Службе Azure Kubernetes (AKS)
Если вы выполнили инструкции в руководствах, то у вас имеется работающий кластер Kubernetes в AKS, и вы развернули в нем пример приложения для голосования Azure. В этом руководстве (часть 5 из 7) описывается горизонтальное увеличение масштаба pod, содержащихся в приложении, и их автомасштабирование. Вы также узнаете, как масштабировать количество узлов виртуальной машины Azure, чтобы менять емкость кластера для размещения рабочих нагрузок. Вы узнаете, как выполнять следующие задачи:
- Масштабирование узлов Kubernetes.
- Масштабирование модулей pod Kubernetes вручную для выполнения приложения.
- Настройка модулей pod для автоматического масштабирования, которые запускают внешний интерфейс приложения.
В последующих руководствах описано, как обновить приложение Azure для голосования до новой версии.
Перед началом
В предыдущих руководствах приложение было упаковано в образ контейнера. Этот образ был передан в Реестр контейнеров Azure, и вы создали кластер AKS. Затем приложение было развернуто в кластере AKS. Если вы не выполнили эти действия, вы можете начать с раздела руководства 1 Создание образов контейнеров.
Для выполнения задач из этого руководства требуется Azure CLI 2.0.53 или более поздней версии. Чтобы узнать версию, выполните команду az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Масштабирование pod вручную
В рамках предыдущих руководств были развернуты внешний интерфейс приложения Azure для голосования и экземпляр Redis, а также создана одна реплика. Чтобы просмотреть число и состояние модулей pod в кластере, используйте команду kubectl get следующим образом:
kubectl get pods
В следующем примере выходных данных показано по одному интерфейсному и серверному модулю pod:
NAME READY STATUS RESTARTS AGE
azure-vote-back-2549686872-4d2r5 1/1 Running 0 31m
azure-vote-front-848767080-tf34m 1/1 Running 0 31m
Чтобы вручную изменить количество модулей pod в развертывании azure-vote-front, используйте команду kubectl scale. В следующем примере увеличивает число интерфейсных модулей pod до 5.
kubectl scale --replicas=5 deployment/azure-vote-front
Выполните команду kubectl get pods еще раз, чтобы убедиться, что AKS успешно создает дополнительные модули pod. Они станут доступны в кластере примерно через минуту.
kubectl get pods
READY STATUS RESTARTS AGE
azure-vote-back-2606967446-nmpcf 1/1 Running 0 15m
azure-vote-front-3309479140-2hfh0 1/1 Running 0 3m
azure-vote-front-3309479140-bzt05 1/1 Running 0 3m
azure-vote-front-3309479140-fvcvm 1/1 Running 0 3m
azure-vote-front-3309479140-hrbf2 1/1 Running 0 15m
azure-vote-front-3309479140-qphz8 1/1 Running 0 3m
Автомасштабирование pod
Kubernetes поддерживает горизонтальное автомасштабирование pod для изменения числа pod в развертывании в зависимости от использования ЦП или других выбранных метрик. Сервер метрик используется для предоставления сведений об использовании ресурсов в Kubernetes. Он автоматически развертывается в кластерах AKS версии 1.10 и последующих. Чтобы узнать версию кластера AKS, используйте команду az aks show, как показано в следующем примере:
az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion --output table
Примечание
Если версия кластера AKS предшествует 1.10, сервер метрик не устанавливается автоматически. Манифесты установки сервера метрик доступны в качестве ресурса components.yaml
в выпусках сервера метрик. Это означает, что их можно установить с помощью URL-адреса. Дополнительные сведения об этих определениях YAML см. в разделе файла сведений, посвященном развертыванию.
Пример установки:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
Чтобы использовать инструмент автомасштабирования, для всех контейнеров в группах pod и всех групп pod необходимо определить запросы и лимиты ресурсов ЦП. В развертывании azure-vote-front
контейнер внешнего приложения уже запрашивает 0,25 ресурсов ЦП с лимитом в 0,5 ресурсов ЦП.
Эти запросы и ограничения ресурсов определены для каждого контейнера, как показано в следующем фрагменте кода:
containers:
- name: azure-vote-front
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
limits:
cpu: 500m
В следующем примере используется команда kubectl autoscale для автомасштабирования числа модулей pod в развертывании azure-vote-front. Если среднее использование ЦП всеми pod превышает 50% их запрошенного использования, инструмент автомасштабирования увеличивает количество pod максимум до 10 экземпляров. Затем для развертывания определяются как минимум 3 экземпляра:
kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10
Либо можно создать файл манифеста, чтобы определить поведение автомасштабирования и ограничения ресурсов. Ниже приведен пример файла манифеста azure-vote-hpa.yaml
.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: azure-vote-back-hpa
spec:
maxReplicas: 10 # define max replica count
minReplicas: 3 # define min replica count
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: azure-vote-back
targetCPUUtilizationPercentage: 50 # target CPU utilization
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: azure-vote-front-hpa
spec:
maxReplicas: 10 # define max replica count
minReplicas: 3 # define min replica count
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: azure-vote-front
targetCPUUtilizationPercentage: 50 # target CPU utilization
Используйте kubectl apply
, чтобы применить инструмент автомасштабирования, определенный в файле манифеста azure-vote-hpa.yaml
.
kubectl apply -f azure-vote-hpa.yaml
Чтобы просмотреть состояние инструмента автомасштабирования, используйте команду kubectl get hpa
следующим образом:
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
azure-vote-front Deployment/azure-vote-front 0% / 50% 3 10 3 2m
Через несколько минут при минимальной нагрузке на приложение Azure для голосования число реплик модуля pod автоматически уменьшится до 3. Вы можете использовать команду kubectl get pods
еще раз, чтобы увидеть ненужные модули pod, которые были удалены.
Примечание
Дополнительные примеры использования горизонтального автомасштабирования pod см. на странице с HorizontalPodAutoscaler Walkthrough (Инструкции для HorizontalPodAutoscaler).
Масштабирование узлов AKS вручную
Если вы создали кластер Kubernetes с помощью команд в предыдущем руководстве, то у него два узла. Если вы планируете увеличение или уменьшение рабочих нагрузок контейнеров в кластере, то можете соответствующим образом изменить число узлов вручную.
В следующем примере в кластере Kubernetes myAKSCluster число узлов увеличивается до трех. Для выполнения этой команды требуется несколько минут.
az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3
Если кластер успешно масштабирован, выходные данные будут соответствовать приведенным ниже:
"agentPoolProfiles": [
{
"count": 3,
"dnsPrefix": null,
"fqdn": null,
"name": "myAKSCluster",
"osDiskSizeGb": null,
"osType": "Linux",
"ports": null,
"storageProfile": "ManagedDisks",
"vmSize": "Standard_D2_v2",
"vnetSubnetId": null
}
Дальнейшие действия
В этом руководстве вы использовали различные возможности масштабирования кластера Kubernetes. Вы ознакомились с выполнением следующих задач:
- Масштабирование модулей pod Kubernetes вручную для выполнения приложения.
- Настройка модулей pod для автоматического масштабирования, которые запускают внешний интерфейс приложения.
- Масштабирование узлов Kubernetes вручную.
Перейдите к следующему руководству, чтобы узнать, как обновить приложение в Kubernetes.