Создание контейнеров 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.
Создайте файл с именем 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".
Разверните приложение с помощью команды kubectl apply и укажите имя манифеста YAML:
kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
В следующем примере выходных данных показано, что развертывание и служба были успешно созданы:
deployment.apps/sample created
service/sample created
Тестирование приложения
При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут. Иногда служба может занять больше нескольких минут. До 10 минут для подготовки.
Ход выполнения можно отслеживать с помощью команды 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
Просмотрите пример приложения в действии, открыв веб-браузер на внешний IP-адрес и порт примера службы.
Если при попытке загрузить страницу вы получаете время ожидания подключения, убедитесь, что пример приложения готов с помощью
kubectl get pods --watch
команды. Иногда контейнер Windows не запускается по времени доступности внешнего IP-адреса.
Удаление пула узлов
Удалите пул узлов с помощью az akshybrid nodepool delete
команды:
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait