Развертывание контейнера Windows Server в кластере Служба Azure Kubernetes (AKS) с помощью PowerShell
Служба Azure Kubernetes (AKS) — это управляемая служба Kubernetes, которая позволяет быстро развертывать кластеры и управлять ими. В этой статье вы используете Azure PowerShell для развертывания кластера AKS, на котором выполняются контейнеры Windows Server. Затем вы развернете в кластере пример приложения ASP.NET, помещенный в контейнер Windows Server.
Примечание.
Чтобы приступить к быстрой подготовке кластера AKS, в этой статье содержатся действия по развертыванию кластера с параметрами по умолчанию только для оценки. Прежде чем развертывать готовый к работе кластер, рекомендуется ознакомиться с базовой эталонной архитектурой , чтобы понять, как она соответствует вашим бизнес-требованиям.
Подготовка к работе
В этом руководстве предполагается, что у вас есть некоторое представление о функциях Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
-
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Чтобы упростить использование, попробуйте использовать среду PowerShell в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Azure Cloud Shell.
Если вы хотите использовать PowerShell локально, установите модуль Az PowerShell и подключитесь к учетной записи Azure с помощью командлета Connect-AzAccount . Убедитесь, что команды выполняются с правами администратора. Дополнительные сведения см. в статье Установка Azure PowerShell.
Убедитесь, что удостоверение, которое вы используете для создания кластера, имеет соответствующие минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в статье Возможности контроля доступа и идентификации в Службе Azure Kubernetes (AKS).
Если у вас несколько подписок Azure, задайте подписку, которую вы хотите использовать для краткого руководства, вызвав командлет Set-AzContext . Дополнительные сведения см. в статье "Управление подписками Azure с помощью Azure PowerShell".
Создание или изменение группы ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. Во время создания группы ресурсов вам будет предложено указать расположение. В этом расположении хранятся метаданные группы ресурсов и где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса.
Чтобы создать группу ресурсов, используйте командлет New-AzResourceGroup . В следующем примере создается группа ресурсов с именем myResourceGroup в регионе eastus.
New-AzResourceGroup -Name myResourceGroup -Location eastus
В следующем примере выходных данных показано, что группа ресурсов создана успешно:
ResourceGroupName : myResourceGroup
Location : eastus
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup
Создание кластера AKS
В этом разделе мы создадим кластер AKS со следующей конфигурацией:
- Кластер настроен с двумя узлами, чтобы обеспечить надежную работу. Узел — это виртуальная машина Azure, которая запускает компоненты узлов Kubernetes и среду выполнения контейнера.
-WindowsProfileAdminUserPassword
Параметры-WindowsProfileAdminUserName
задают учетные данные администратора для всех узлов Windows Server в кластере и должны соответствовать требованиям к сложности паролей Windows Server.- Пул узлов использует
VirtualMachineScaleSets
.
Чтобы создать кластер AKS с помощью Azure PowerShell, выполните следующие действия.
Создайте учетные данные администратора для контейнеров Windows Server с помощью следующей команды. В командной
WindowsProfileAdminUserName
строке введите иWindowsProfileAdminUserPassword
. Пароль должен быть не менее 14 символов и соответствовать требованиям к сложности паролей Windows Server.$AdminCreds = Get-Credential ` -Message 'Please create the administrator credentials for your Windows Server containers'
Создайте кластер с помощью командлета New-AzAksCluster и укажите
WindowsProfileAdminUserName
параметры.WindowsProfileAdminUserPassword
New-AzAksCluster -ResourceGroupName myResourceGroup ` -Name myAKSCluster ` -NodeCount 2 ` -NetworkPlugin azure ` -NodeVmSetType VirtualMachineScaleSets ` -WindowsProfileAdminUserName $AdminCreds.UserName ` -WindowsProfileAdminUserPassword $secureString ` -GenerateSshKey
Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON. Иногда кластер может занять больше нескольких минут. До 10 минут для подготовки.
Если вы получаете ошибку проверки пароля, а пароль, заданный в соответствии с требованиями к длине и сложности, попробуйте создать группу ресурсов в другом регионе. Затем попытайтесь создать кластер с новой группой ресурсов.
Если при создании пула узлов имя администратора и пароль не указаны, имя пользователя устанавливается в azureuser , а пароль имеет случайное значение. Дополнительные сведения см. в разделе часто задаваемых вопросов о Windows Server.
Имя пользователя администратора нельзя изменить, но вы можете изменить пароль администратора, который использует кластер AKS для узлов Windows Server.
az aks update
Дополнительные сведения см. в разделе часто задаваемых вопросов о Windows Server.Чтобы запустить кластер AKS, поддерживающий пулы узлов для контейнеров Windows Server, кластер должен использовать сетевую политику, которая использует сетевой подключаемый модуль [Azure CNI (advanced)][azure-cni]. Параметр
-NetworkPlugin azure
указывает Azure CNI.
Добавление пула узлов
По умолчанию кластер AKS создается с пулом узлов, который может выполнять контейнеры Linux. Необходимо добавить другой пул узлов, который может запускать контейнеры Windows Server вместе с пулом узлов Linux.
Windows Server 2022 — это операционная система по умолчанию для Kubernetes версии 1.25.0 и выше. Windows Server 2019 — это ос по умолчанию для более ранних версий. Если вы не указываете определенный номер SKU ОС, Azure создает новый пул узлов с номером SKU по умолчанию для версии Kubernetes, используемой кластером.
- Пул узлов Windows (номер SKU по умолчанию)
- Пул узлов Windows Server 2022
- Пул узлов Windows Server 2019
Чтобы использовать номер SKU ОС по умолчанию, создайте пул узлов без указания номера SKU ОС. Пул узлов настроен для операционной системы по умолчанию на основе версии Kubernetes кластера.
Добавьте пул узлов Windows Server с помощью командлета New-AzAksNodePool . Следующая команда создает пул узлов с именем npwin и добавляет его в myAKSCluster. Команда также использует подсеть по умолчанию в виртуальной сети по умолчанию, созданной при выполнении New-AzAksCluster
:
New-AzAksNodePool -ResourceGroupName myResourceGroup `
-ClusterName myAKSCluster `
-VmSetType VirtualMachineScaleSets `
-OsType Windows `
-Name npwin
Подключение к кластеру
Для управления кластерами Kubernetes используется kubectl, клиент командной строки Kubernetes. Если вы используете Azure Cloud Shell, kubectl
уже установлен. Если вы хотите установить kubectl
локально, можно использовать Install-AzAzAksCliTool
командлет.
Настройте
kubectl
на подключение к кластеру Kubernetes с помощью командлета Import-AzAksCredential. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
Проверьте подключение к кластеру с помощью команды get kubectl, которая возвращает список узлов кластера.
kubectl get nodes
В следующем примере выходных данных показаны все узлы в кластере. Убедитесь, что состояние всех узлов готово:
NAME STATUS ROLES AGE VERSION aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 aksnpwin000000 Ready agent 21h v1.27.7
Развертывание приложения
Файл манифеста 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.
Создайте файл
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, нажав кнопку "Отправить и скачать файлы " и выбрав файл из локальной файловой системы.
Разверните приложение с помощью команды kubectl apply и укажите имя манифеста YAML.
kubectl apply -f sample.yaml
В следующем примере выходных данных показано, что развертывание и служба успешно созданы:
deployment.apps/sample created service/sample created
Тестирование приложения
При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут. Иногда служба может занять больше нескольких минут. До 10 минут для подготовки.
Проверьте состояние развернутых модулей pod с помощью команды kubectl get pods . Прежде чем продолжить, сделайте все модули pod
Running
.kubectl get pods
Ход выполнения можно отслеживать с помощью команды 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
Просмотрите пример приложения в действии, открыв веб-браузер для внешнего IP-адреса службы.
Удаление ресурсов
Если вы не планируете использовать руководство по AKS, удалите кластер, чтобы избежать расходов На Azure. Вызовите командлет Remove-AzResourceGroup, чтобы удалить группу ресурсов, службу контейнеров и все связанные ресурсы.
Remove-AzResourceGroup -Name myResourceGroup
Примечание.
Кластер AKS был создан с управляемым удостоверением, назначенным системой (параметр удостоверения по умолчанию, используемый в этом кратком руководстве). Платформа Azure управляет этим удостоверением, поэтому не требует удаления.
Следующие шаги
В этом кратком руководстве вы развернули кластер Kubernetes, а затем развернули в нем пример приложения ASP.NET в контейнере Windows Server. Этот пример приложения предназначен только для демонстрационных целей и не представляет все рекомендации для приложений Kubernetes. Рекомендации по созданию полных решений с помощью AKS для рабочей среды см . в руководстве по решению AKS.
Дополнительные сведения об AKS и полный пример развертывания см. в руководстве по кластеру Kubernetes.
Azure Kubernetes Service