Создание контейнеров Windows Server

Область применения: Azure Stack HCI, версия 23H2

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

Предварительные требования

Создайте кластер AKS, следуя инструкциям в статье Создание кластеров AKS.

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

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

Добавьте пул узлов с узлами контейнеров Windows с az aksarc nodepool add помощью команды с параметром --os-type Windows. Если номер SKU операционной системы не указан, для пула узлов устанавливается ОС по умолчанию на основе версии Кластера Kubernetes. Windows Server 2022 — это операционная система по умолчанию для Kubernetes версии 1.25.0 и более поздних версий. Windows Server 2019 является ОС по умолчанию для более ранних версий.

  • Чтобы использовать Windows Server 2019, укажите следующие параметры:
    • os-type Задайте значение Windows.
    • os-sku Задайте значение Windows2019.
  • Чтобы использовать Windows Server 2022, укажите следующие параметры:
    • os-type Задайте значение Windows.
    • os-sku задайте значение Windows2022 (необязательно).

Следующая команда создает пул узлов с именем $mynodepool и добавляет его в $myAKSCluster с одним узлом Windows 2019.

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2019

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

Теперь вы можете подключиться к кластеру Kubernetes, выполнив команду с локального az connectedk8s proxy компьютера. Перед выполнением этой команды убедитесь, что вы войли в Azure. Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки с помощью команды az account set .

Эта команда скачивает kubeconfig кластера Kubernetes на локальный компьютер и открывает прокси-канал подключения к локальному кластеру Kubernetes. Канал открыт до тех пор, пока выполняется эта команда. Пусть эта команда выполняется до тех пор, пока вы хотите получить доступ к кластеру. Если время ожидания команды истекло, закройте окно CLI, откройте новое, а затем выполните команду еще раз.

Чтобы успешно выполнить следующую команду, необходимо иметь разрешения участника на группу ресурсов, в которой размещен кластер AKS:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Ожидаемые выходные данные:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.

Сохраните этот сеанс и подключитесь к кластеру Kubernetes из другого терминала или командной строки. Убедитесь, что вы можете подключиться к кластеру Kubernetes, выполнив команду kubectl get. Эта команда возвращает список узлов кластера:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

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

NAME              STATUS   ROLES           AGE     VERSION
moc-lesdc78871d   Ready    control-plane   6d8h    v1.26.3
moc-lupeeyd0f8c   Ready    <none>          6d8h    v1.26.3
moc-ww2c8d5ranw   Ready    <none>          7m18s   v1.26.3

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

Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров.

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

Пример приложения ASP.NET предоставляется в составе примеров платформа .NET Framework и выполняется в контейнере Windows Server. AKS требует использовать контейнеры Windows Server на основе образов Windows Server 2019 или более поздней версии. Файл манифеста Kubernetes также должен определить селектор узлов , чтобы убедиться, что модули 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.

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

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

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

deployment.apps/sample created
service/sample created

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

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

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

    kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
    

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

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

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

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

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

    Если при попытке загрузить страницу появляется время ожидания подключения, с помощью kubectl get pods --watch команды убедитесь, что пример приложения готов. Иногда контейнер Windows не запускается к тому времени, когда будет доступен внешний IP-адрес.

Удаление пула узлов

Удалите пул узлов с помощью az akshybrid nodepool delete команды .

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

Дальнейшие действия

В этой статье вы развернули пул узлов Windows в существующем кластере AKS и развернули в нем ASP.NET пример приложения в контейнере Windows Server.