Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы начать работу с Azure Container Linux (ACL) для AKS, разверните кластер AKS с помощью шаблона Azure Resource Manager (ARM).
Из этого краткого руководства вы узнаете, как:
- Создайте кластер AKS с помощью ACL для AKS.
- Разверните кластер с помощью шаблона ARM.
- Запустите пример мультиконтейнерного приложения с группой микрослужб и веб-интерфейсов с имитацией сценария розничной торговли.
Note
Чтобы приступить к быстрой подготовке кластера AKS, в этой статье содержатся действия по развертыванию кластера с параметрами по умолчанию только для оценки. Прежде чем развертывать готовый к работе кластер, рекомендуется ознакомиться с базовой эталонной архитектурой , чтобы понять, как она соответствует вашим бизнес-требованиям.
Important
Если вы используете Azure Container Linux (ACL) в AKS, ознакомьтесь со следующими рекомендациями и ограничениями:
- ACL общедоступен, начиная с AKS версии 1.34.
- Для ACL требуется доверенный запуск с помощью безопасной загрузки и vTPM. Варианты Non-Trusted Launch недоступны.
- Для ACL на Arm64 требуется использование SKU на базе Cobalt (v6) для обеспечения совместимости с Trusted Launch.
-
NodeImageиNoneявляются единственными поддерживаемыми каналами обновления операционной системы (ОС).UnmanagedиSecurityPatchнесовместимы с ACL из-за неизменяемого/usrкаталога. - Потоковая передача артефактов не поддерживается.
- Песочница Pod не поддерживается.
- Конфиденциальные виртуальные машины (CVM) не поддерживаются.
- Виртуальные машины поколения 1 не поддерживаются.
Необходимые условия
- В этой статье предполагается базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
- Убедитесь, что учетная запись, используемая для создания кластера, имеет необходимые минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в статье Возможности контроля доступа и идентификации в Службе Azure Kubernetes (AKS).
- Чтобы развернуть шаблон ARM, необходимо иметь права на запись на ресурсы, которые вы развертываете, и иметь доступ ко всем операциям на ресурсе типа
Microsoft.Resources/deployments. Например, для развертывания виртуальной машины необходимы разрешенияMicrosoft.Compute/virtualMachines/writeиMicrosoft.Resources/deployments/*. Список ролей и разрешений см. в статье Встроенные роли Azure.
После развертывания кластера из шаблона можно использовать Azure CLI или Azure PowerShell для подключения к кластеру и развертывания примера приложения.
Регистрация необходимых поставщиков ресурсов
Может потребоваться зарегистрировать необходимые поставщики ресурсов, например Microsoft.ContainerService в подписке Azure.
Проверка состояния регистрации
Проверьте состояние регистрации с помощью az provider show команды.
az provider show --namespace Microsoft.ContainerService --query registrationState
Регистрация поставщика ресурсов
При необходимости зарегистрируйте поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register.
az provider register --namespace Microsoft.ContainerService
Создание пары ключей SSH
Чтобы создать кластер AKS с помощью шаблона ARM, укажите открытый ключ SSH. Если вам нужен этот ресурс, выполните действия, описанные в этом разделе. В противном случае перейдите к разделу "Просмотр шаблона ".
Подключение к узлам AKS выполняется с парой ключей SSH (открытого и закрытого), которые создаются с помощью команды ssh-keygen. По умолчанию эти файлы хранятся в каталоге ~/.ssh. При запуске команды ssh-keygen перезаписывается любая пара ключей SSH с тем же именем, уже существующая в указанном месте. Дополнительные сведения о создании ключей SSH см. в статье Detailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure (Подробные инструкции. Создание ключей SSH для проверки подлинности на виртуальной машине Linux в Azure и управление этими ключами).
Перейдите к https://shell.azure.com, чтобы открыть Cloud Shell в браузере.
Создайте группу ресурсов с помощью команды
az group create. В следующем примере создается группа ресурсов с именем myResourceGroup в регионе "Восточная часть США ".az group create \ --name myResourceGroup \ --location eastusСоздайте пару ключей SSH с помощью
az sshkey createкоманды илиssh-keygenкоманды.az sshkey create --name mySSHKey --resource-group myResourceGroupИли создайте пару ключей SSH с помощью
ssh-keygen:ssh-keygen -t rsa -b 4096Чтобы развернуть шаблон, необходимо указать открытый ключ из пары SSH. Получите открытый
az sshkey showключ с помощью команды.az sshkey show --name mySSHKey --resource-group myResourceGroup --query publicKey
Проверьте шаблон
В следующем развертывании используется шаблон ARM из Azure Quickstart Templates:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.26.170.59819",
"templateHash": "14823542069333410776"
}
},
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "aks101cluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "standard_d2s_v3",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2026-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"osSKU": "AzureContainerLinux",
"mode": "System"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', parameters('clusterName')), '2026-03-01').fqdn]"
}
}
}
Тип ресурса, определенный в шаблоне ARM, — Microsoft.ContainerService/managedClusters.
Для получения дополнительных примеров AKS посетите страницу Шаблоны быстрого запуска AKS.
Развертывание шаблона
Выберите «Развернуть в Azure», чтобы войти в систему и открыть шаблон.
Настройте параметры шаблона на странице Пользовательское развертывание. В этом кратком руководстве оставьте значения по умолчанию для размера диска ОС (ГБ), числа агентов, размера виртуальной машины агента и типа ОС. Укажите собственные значения для следующих параметров:
- Подписка— выберите подписку Azure.
- Группа ресурсов: выберите Создать новую. Введите уникальное имя группы ресурсов, например myResourceGroup, а затем нажмите кнопку ОК.
-
SKU ОС: укажите AzureContainerLinux. Если вы не обновляете номер SKU ОС, значение по умолчанию равно
Ubuntu. - Расположение: выберите расположение, например восточную часть США.
- Имя кластера: введите уникальное имя кластера AKS, например myAKSCluster.
- Префикс DNS: введите уникальный префикс DNS для кластера, например myakscluster.
- Имя пользователя администратора Linux: введите имя пользователя для подключения с помощью SSH, например azureuser.
- Источник открытого ключа SSH: выберите " Использовать существующий открытый ключ".
- Имя пары ключей: скопируйте и вставьте общедоступную часть пары ключей SSH (по умолчанию содержимое ~/.ssh/id_rsa.pub).
Выберите Просмотреть и создать>Создать.
Создание кластера AKS займет несколько минут. Дождитесь успешного развертывания кластера, прежде чем перейти к следующему шагу.
Подключение к кластеру
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes. Если вы используете Azure Cloud Shell, kubectl уже установлен.
Чтобы установить и запустить kubectl локально, используйте az aks install-cli команду.
Настройте
kubectlдля подключения к вашему кластеру Kubernetes с помощью командыaz aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSClusterПроверьте подключение к кластеру
kubectl getс помощью команды. Эта команда возвращает список узлов кластера.kubectl get nodesВ следующем примере выходных данных показаны три узла, созданные на предыдущих шагах. Убедитесь, что этот узел находится в состоянии готовности:
NAME STATUS ROLES AGE VERSION aks-agentpool-12345678-vmss000000 Ready <none> 5m53s v1.32.7 aks-agentpool-12345678-vmss000001 Ready <none> 6m31s v1.32.7 aks-agentpool-12345678-vmss000002 Ready <none> 6m35s v1.32.7
Развертывание приложения
Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes определяет желаемое состояние кластера, например, какие образы контейнеров запускать. В манифесте указаны следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Сервис продукта: отображает информацию о продукте.
- Служба заказов: помещает заказы.
- Rabbit MQ: очередь сообщений для управления очередью заказов.
Note
Не рекомендуется запускать контейнеры с сохранением состояния, такие как Rabbit MQ, без постоянного хранилища для продакшена. Они используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure Cosmos DB или Служебная шина Azure.
Создайте файл с именем
aks-store-quickstart.yamlи скопируйте его в следующем манифесте:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerСведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".
Если вы создаете и сохраняете файл YAML локально, вы можете отправить файл манифеста в каталог по умолчанию в CloudShell, нажав кнопку "Отправить и скачать файлы " и выбрав файл из локальной файловой системы.
Разверните приложение с помощью
kubectl applyкоманды и укажите имя манифеста YAML.kubectl apply -f aks-store-quickstart.yamlВ следующем примере выходных данных показаны развертывания и службы:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Тестирование приложения
Проверьте состояние развернутых подов с помощью команды
kubectl get pods. Убедитесь, что все модули pod находятся в состоянииRunningпрежде чем продолжить.kubectl get podsПроверьте общедоступный IP-адрес для приложения store-front. Отслеживайте ход выполнения, используя команду
kubectl get serviceс аргументом--watch.kubectl get service store-front --watchВыходные данные EXTERNAL-IP для
store-frontслужбы изначально отображаются как в ожидании:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mКогда адрес EXTERNAL-IP изменится из состояния pending на общедоступный IP-адрес, выполните команду
CTRL-C, чтобы остановить процесс отслеживанияkubectl.В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mОткройте веб-браузер и перейдите на внешний IP-адрес вашей службы для просмотра приложения Microsoft Azure Store в действии.
Удаление кластера
Если вы не планируете использовать учебник AKS, очистите ненужные ресурсы, чтобы избежать расходов Azure.
Удалите группу ресурсов, службу контейнеров и все связанные ресурсы с помощью az group delete команды.
az group delete --name myResourceGroup --yes --no-wait
Note
Кластер AKS был создан с управляемой системой идентичностью, которая является идентичностью по умолчанию, используемой в этом кратком руководстве. Платформа управляет этим удостоверением, поэтому удалить его вручную не нужно.
Связанный контент
В этом кратком руководстве вы развернули кластер AKS с использованием ACL for AKS с помощью шаблона ARM. Дополнительные сведения об ACL для AKS см. в статье Azure Container Linux (ACL) для Azure Kubernetes Service (AKS).