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


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

Область применения: Локальная версия Azure, версия 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 Server 2022:

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

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

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

Эта команда скачивает kubeconfig кластера Kubernetes на локальный компьютер и открывает канал подключения прокси к локальному кластеру Kubernetes. Канал открыт до тех пор, пока эта команда выполняется. Пусть эта команда выполняется до тех пор, пока вы хотите получить доступ к кластеру. Если команда истекает, закройте окно КОМАНДНОй строки, откройте новую, а затем снова выполните команду.

Для успешного выполнения следующей команды необходимо иметь разрешения участника в группе ресурсов, в которой размещен кластер 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, выполнив команду get kubectl. Эта команда возвращает список узлов кластера:

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
    

    Изначально выходные данные отображают внешний 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. В следующем примере выходных данных показан общедоступный 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

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

Обзор AKS с поддержкой Arc