Руководство по Масштабирование приложений в Службе 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.