Поделиться через


Развертывание контейнера 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).

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

Установите расширение aks-preview

Это важно

Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

  1. aks-preview Установите расширение Azure CLI с помощью az extension add команды.
az extension add --name aks-preview
  1. Обновите до последней версии расширения с помощью az extension update команды. Для Windows Server 2025 требуется не менее 18.0.0b40.
az extension update --name aks-preview

Регистрация флага компонента AksWindows2025Preview

  1. AksWindows2025Preview Зарегистрируйте флаг компонента с помощью команды [az feature register][az-feature-register].
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Проверьте состояние регистрации с помощью команды [az feature show][az-feature-show]. Через несколько минут отобразится состояние Registered (Зарегистрировано).
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды [az provider register][az-provider-register].

    az provider register --namespace Microsoft.ContainerService
    

Создайте группу ресурсов

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

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

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export REGION="canadacentral"
    export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
    

    Результаты:

    {
      "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupxxxxx",
      "location": "WestUS2",
      "managedBy": null,
      "name": "myResourceGroupxxxxx",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

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

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

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

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

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

    export WINDOWS_USERNAME="winadmin"
    
  2. Создайте пароль для имени администратора, созданного на предыдущем шаге. Пароль должен быть не менее 14 символов и соответствовать требованиям к сложности паролей Windows Server.

    export WINDOWS_PASSWORD=$(echo "P@ssw0rd$(openssl rand -base64 10 | tr -dc 'A-Za-z0-9!@#$%^&*()' | cut -c1-6)")
    
  3. Создайте кластер с помощью команды az aks create и укажите параметры --windows-admin-username и --windows-admin-password. Следующая команда создает кластер с помощью значений из WINDOWS_USERNAME и WINDOWS_PASSWORD предыдущих команд. Случайный суффикс добавляется к имени кластера для уникальности.

    export MY_AKS_CLUSTER="myAKSCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RESOURCE_GROUP_NAME \
        --name $MY_AKS_CLUSTER \
        --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 (advanced). Параметр --network-plugin azure указывает Azure CNI.

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

По умолчанию все кластеры AKS создаются с пулом узлов, который может запускать контейнеры Linux. Необходимо добавить пул узлов Windows, который может запускать контейнеры Windows Server вместе с пулом узлов Linux. Чтобы проверить наличие пула узлов Windows в кластере, можно просмотреть узлы в кластере kubectl get nodes -o wide с помощью команды.

Чтобы создать пул узлов Windows, необходимо указать поддерживаемый OsType и OsSku. Используйте сведения в следующей таблице, чтобы определить, какой вариант подходит для кластера:

OsType OsSku По умолчанию Поддерживаемые версии K8s Сведения
windows Windows2025 В настоящее время находится на этапе предварительной версии. Не является параметром по умолчанию. 1.32+ Обновленные значения по умолчанию: containerd 2.0 и образ поколения 2 используются по умолчанию.
windows Windows2022 По умолчанию в версии «K8s» 1.25-1.35 Недоступно в K8s 1.36+ Уходит в отставку в марте 2027 года. Обновленные значения по умолчанию: FIPS включен по умолчанию.
windows Windows2019 Значение по умолчанию в K8s 1.24 и ниже Недоступно в K8s 1.33+ Уходит в отставку в марте 2026 года.

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

Замечание

  • Windows Server 2019 выходит на пенсию 1 марта 2026 г. После этой даты AKS больше не будет создавать новые образы узлов или предоставлять исправления безопасности. После этой даты вы не сможете создавать пулы узлов с Windows Server 2019 в любой версии Kubernetes. Все существующие пулы узлов с Windows Server 2019 будут неподдерживаться. Windows Server 2019 не поддерживается в Kubernetes версии 1.33 и выше. Начиная с 1 апреля 2027 года AKS удалит все существующие образы узлов для Windows Server 2019, что означает, что операции по масштабированию не удастся.
  • Windows Server 2022 выходит на пенсию 15 марта 2027 г. После этой даты AKS больше не будет создавать новые образы узлов или предоставлять исправления безопасности. После этой даты вы не сможете создавать пулы узлов с Windows Server 2022 в любой версии Kubernetes. Все существующие пулы узлов с Windows Server 2022 будут неподдерживаемые. Windows Server 2022 не поддерживается в Kubernetes версии 1.36 и выше. Начиная с 1 апреля 2028 г. AKS удаляет все существующие образы узлов для Windows Server 2022, что означает, что операции масштабирования завершаются сбоем.

Смотрите заметки о выпуске AKS для получения дополнительной информации. Чтобы оставаться в курсе последних версий ОС Windows Server и узнать больше о нашей стратегии поддержки в AKS, ознакомьтесь с нашей общедоступной стратегией развития AKS.

  • Добавьте пул узлов Windows с использованием команды az aks nodepool add с указанными параметрами OsType и OsSku. Если вы не указываете определенный номер SKU ОС, Azure создает новый пул узлов с номером SKU по умолчанию для версии Kubernetes, используемой кластером.

    az aks nodepool add \
      --resource-group $MY_RESOURCE_GROUP_NAME \
      --cluster-name $MY_AKS_CLUSTER \
      --os-type Windows \
      --os-sku Windows2022 \
      --name npwin \
      --node-count 1
    

    Эта команда создает пул узлов с именем npwin и добавляет его в myAKSCluster. Команда также использует подсеть по умолчанию в виртуальной сети по умолчанию, созданной при выполнении az aks create.

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

Для управления кластерами 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 $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER
    
  2. Проверьте подключение к кластеру с помощью команды kubectl get, которая возвращает список узлов кластера.

    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. Проверьте состояние развернутых подов с помощью команды kubectl get pods. Убедитесь, что все поды имеют статус Running, прежде чем продолжить.

    kubectl get pods
    
  2. Отслеживайте ход выполнения, используя команду kubectl get service с аргументом --watch.

    while true; do
      export EXTERNAL_IP=$(kubectl get service sample -o jsonpath="{.status.loadBalancer.ingress[0].ip}" 2>/dev/null)
      if [[ -n "$EXTERNAL_IP" && "$EXTERNAL_IP" != "<pending>" ]]; then
        kubectl get service sample
        break
      fi
      echo "Still waiting for external IP assignment..."
      sleep 5
    done
    

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

    NAME     TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
    sample   LoadBalancer   xx.xx.xx.xx    pending          xx:xxxx/TCP     2m
    
  3. Когда значение EXTERNAL-IP изменится с состояния pending на фактический общедоступный IP-адрес, используйте команду CTRL-C, чтобы остановить процесс отслеживания kubectl.

    В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.

    {
      "NAME": "sample",
      "TYPE": "LoadBalancer",
      "CLUSTER-IP": "10.0.37.27",
      "EXTERNAL-IP": "52.179.23.131",
      "PORT(S)": "80:30572/TCP",
      "AGE": "2m"
    }
    
  4. Просмотрите пример приложения в действии, открыв веб-браузер на внешний IP-адрес службы через несколько минут.

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

Дальнейшие шаги

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

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