Развертывание контейнера Windows Server в кластере Служба Azure Kubernetes (AKS) с помощью Azure CLI

Служба Azure Kubernetes (AKS) — это управляемая служба Kubernetes, которая позволяет быстро развертывать кластеры и управлять ими. В этой статье вы используете Azure CLI для развертывания кластера AKS, на котором выполняются контейнеры Windows Server. Затем вы развернете в кластере пример приложения ASP.NET, помещенный в контейнер Windows Server.

Примечание.

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

Подготовка к работе

В этом руководстве предполагается, что у вас есть некоторое представление о функциях Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этой статьей требуется Azure CLI версии 2.0.64 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.
  • Убедитесь, что удостоверение, которое вы используете для создания кластера, имеет соответствующие минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в статье Возможности контроля доступа и идентификации в Службе Azure Kubernetes (AKS).
  • Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки, в котором необходимо выставлять счета за ресурсы с помощью команды az account set .

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

Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. Во время создания группы ресурсов вам будет предложено указать расположение. В этом расположении хранятся метаданные группы ресурсов и где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса.

  • Создайте группу ресурсов с помощью команды az group create. В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus. Введите эту команду и другие команды в этой статье в оболочку BASH:

    az group create --name myResourceGroup --location eastus
    

    В следующем примере выходных данных показана успешно созданная группа ресурсов:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": null
    }
    

Создание кластера AKS

В этом разделе мы создадим кластер AKS со следующей конфигурацией:

  • Кластер настроен с двумя узлами, чтобы обеспечить надежную работу. Узел — это виртуальная машина Azure, которая запускает компоненты узлов Kubernetes и среду выполнения контейнера.
  • Параметры --windows-admin-password и --windows-admin-username задают учетные данные администратора для всех узлов Windows Server в кластере и должны соответствовать требованиям к паролю Windows Server.
  • Пул узлов использует VirtualMachineScaleSets.

Чтобы создать кластер AKS с помощью Azure CLI, выполните следующие действия.

  1. Создайте имя пользователя для использования в качестве учетных данных администратора для узлов Windows Server в кластере. Следующая команда запрашивает имя пользователя и задает для него значение WINDOWS_USERNAME для использования в следующей команде.

    echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
    
  2. Создайте пароль для имени администратора, созданного на предыдущем шаге. Пароль должен быть не менее 14 символов и соответствовать требованиям к сложности паролей Windows Server.

    echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
    
  3. Создайте кластер с помощью команды az aks create и укажите --windows-admin-username параметры.--windows-admin-password В следующем примере команда создает кластер, используя значение из WINDOWS_USERNAME, заданное в предыдущей команде. Кроме того, можно указать другое имя пользователя непосредственно в параметре, а не использовать WINDOWS_USERNAME.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --enable-addons monitoring \
        --generate-ssh-keys \
        --windows-admin-username $WINDOWS_USERNAME \
        --windows-admin-password $WINDOWS_PASSWORD \
        --vm-set-type VirtualMachineScaleSets \
        --network-plugin azure
    

    Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON. Иногда кластер может занять больше нескольких минут. До 10 минут для подготовки.

    Если вы получаете ошибку проверки пароля, а пароль, заданный в соответствии с требованиями к длине и сложности, попробуйте создать группу ресурсов в другом регионе. Затем попытайтесь создать кластер с новой группой ресурсов.

    Если при создании пула узлов имя администратора и пароль не указаны, имя пользователя устанавливается в azureuser , а пароль имеет случайное значение. Дополнительные сведения см. в разделе Разделы справки изменение пароля администратора для узлов Windows Server в моем кластере?.

    Имя пользователя администратора нельзя изменить, но вы можете изменить пароль администратора, который использует кластер AKS для узлов Windows Server.az aks update Дополнительные сведения см. в разделе "Вопросы и ответы о пулах узлов Windows Server".

    Чтобы запустить кластер AKS, который поддерживает пулы узлов для контейнеров Windows Server, такой кластер должен использовать сетевую политику с подключаемым сетевым модулем Azure CNI (расширенным). Параметр --network-plugin azure указывает Azure CNI.

Добавление пула узлов

По умолчанию кластер AKS создается с пулом узлов, который может выполнять контейнеры Linux. Необходимо добавить другой пул узлов, который может запускать контейнеры Windows Server вместе с пулом узлов Linux.

Windows Server 2022 — это операционная система по умолчанию для Kubernetes версии 1.25.0 и выше. Windows Server 2019 — это ос по умолчанию для более ранних версий. Если вы не указываете определенный номер SKU ОС, Azure создает новый пул узлов с номером SKU по умолчанию для версии Kubernetes, используемой кластером.

Чтобы использовать номер SKU ОС по умолчанию, создайте пул узлов без указания номера SKU ОС. Пул узлов настроен для операционной системы по умолчанию на основе версии Kubernetes кластера.

Добавьте пул узлов Windows с помощью az aks nodepool add команды. Следующая команда создает пул узлов с именем npwin и добавляет его в myAKSCluster. Команда также использует подсеть по умолчанию в виртуальной сети по умолчанию, созданной при выполнении az aks create. Номер SKU операционной системы не указан, поэтому пул узлов устанавливается в операционную систему по умолчанию на основе версии Kubernetes кластера:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --os-type Windows \
    --name npwin \
    --node-count 1

Подключение к кластеру

Для управления кластерами Kubernetes используется kubectl, клиент командной строки Kubernetes. Если вы используете Azure Cloud Shell, kubectl уже установлен. Если вы хотите установить и запустить kubectl локально, вызовите команду az aks install-cli .

  1. Настройте в kubectl подключение к кластеру Kubernetes, выполнив команду az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Проверьте подключение к кластеру с помощью команды get kubectl, которая возвращает список узлов кластера.

    kubectl get nodes -o wide
    

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

    NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
    aks-nodepool1-20786768-vmss000000   Ready    agent   22h   v1.27.7   10.224.0.4    <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aks-nodepool1-20786768-vmss000001   Ready    agent   22h   v1.27.7   10.224.0.33   <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aksnpwin000000                      Ready    agent   20h   v1.27.7   10.224.0.62   <none>        Windows Server 2022 Datacenter   10.0.20348.2159     containerd://1.6.21+azure
    

    Примечание.

    Среда выполнения контейнеров для каждого пула узлов указана в разделе CONTAINER-RUNTIME. Значения среды выполнения контейнера начинаются с containerd://, что означает, что они используются containerd для среды выполнения контейнера.

Развертывание приложения

Файл манифеста Kubernetes используется для определения требуемого состояния кластера, включая образы контейнеров, которые нужно запустить. В этой статье вы используете манифест для создания всех объектов, необходимых для запуска примера приложения ASP.NET в контейнере Windows Server. Этот манифест включает развертывание Kubernetes для примера приложения ASP.NET и внешнюю службу Kubernetes для получения доступа к приложению через Интернет.

Пример приложения ASP.NET предоставляется в составе пакета примеров для .NET Framework и выполняется в контейнере Windows Server. AKS требует использовать контейнеры Windows Server на основе образов Windows Server 2019 или более поздней версии. Файл манифеста Kubernetes также должен определять средство выбора узла, чтобы кластер AKS выполнял pod этого примера приложения ASP.NET на узле с поддержкой контейнеров Windows Server.

  1. Создайте файл sample.yaml и скопируйте в него следующее определение YAML.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      replicas: 1
      template:
        metadata:
          name: sample
          labels:
            app: sample
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
          - name: sample
            image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
            resources:
              limits:
                cpu: 1
                memory: 800M
            ports:
              - containerPort: 80
      selector:
        matchLabels:
          app: sample
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: sample
    

    Сведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".

    Если вы создаете и сохраняете файл YAML локально, вы можете отправить файл манифеста в каталог по умолчанию в CloudShell, нажав кнопку "Отправить и скачать файлы " и выбрав файл из локальной файловой системы.

  2. Разверните приложение с помощью команды kubectl apply и укажите имя манифеста YAML.

    kubectl apply -f sample.yaml
    

    В следующем примере выходных данных показано, что развертывание и служба успешно созданы:

    deployment.apps/sample created
    service/sample created
    

Тестирование приложения

При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут. Иногда служба может занять больше нескольких минут. До 10 минут для подготовки.

  1. Проверьте состояние развернутых модулей pod с помощью команды kubectl get pods . Прежде чем продолжить, сделайте все модули pod Running .

    kubectl get pods
    
  2. Ход выполнения можно отслеживать с помощью команды kubectl get service с аргументом --watch.

    kubectl get service sample --watch
    

    Изначально выходные данные отображают внешний IP-адрес для примера службы в ожидании:

    NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    sample             LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s
    

    Когда значение EXTERNAL-IP изменится с состояния pending на фактический общедоступный IP-адрес, используйте команду CTRL-C, чтобы остановить процесс отслеживания kubectl. В следующем примере выходных данных показан допустимый общедоступный IP-адрес, назначенный службе:

    sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m
    
  3. Просмотрите пример приложения в действии, открыв веб-браузер для внешнего IP-адреса службы.

    Снимок экрана: поиск примера приложения ASP.NET.

Удаление ресурсов

Если вы не планируете использовать руководство ПО AKS, удалите кластер, чтобы избежать расходов На Azure.

Удалите группу ресурсов, службу контейнеров и все связанные ресурсы с помощью команды az group delete .

az group delete --name myResourceGroup --yes --no-wait

Примечание.

Кластер AKS был создан с управляемым удостоверением, назначенным системой (параметр удостоверения по умолчанию, используемый в этом кратком руководстве). Платформа Azure управляет этим удостоверением, поэтому не требует удаления.

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

В этом кратком руководстве вы развернули кластер Kubernetes, а затем развернули в нем пример приложения ASP.NET в контейнере Windows Server. Этот пример приложения предназначен только для демонстрационных целей и не представляет все рекомендации для приложений Kubernetes. Рекомендации по созданию полных решений с помощью AKS для рабочей среды см . в руководстве по решению AKS.

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