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


Краткое руководство. Создание автоматического кластера Службы Azure Kubernetes (AKS) в пользовательской виртуальной сети

Область применения: ✔️ AKS Automatic

Служба Azure Kubernetes (AKS) Автоматически предоставляет самый простой управляемый интерфейс Kubernetes для разработчиков, инженеров DevOps и инженеров платформы. Идеально подходит для современных приложений и приложений ИИ, AKS Automatic автоматизирует настройку и управление кластерами AKS и внедряет конфигурации лучших практик. Пользователи любого уровня навыков могут воспользоваться преимуществами безопасности, производительности и зависимости AKS Automatic для своих приложений. AKS Automatic также включает соглашение об уровне обслуживания (SLA) по готовности pod, которое гарантирует выполнение 99.9% операций на готовность pod в течение 5 минут, обеспечивая надежную, самовосстанавливающуюся инфраструктуру для ваших приложений. В этом быстром начале предполагается, что у вас есть основное понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).

Из этой краткой инструкции вы узнаете:

  • Создайте виртуальную сеть.
  • Создайте управляемое удостоверение с разрешениями на виртуальную сеть.
  • Разверните автоматический кластер AKS в виртуальной сети.
  • Запустите пример мультиконтейнерного приложения с группой микрослужб и веб-интерфейсов с имитацией сценария розничной торговли.

Если у вас нет учетной записи Azure, вы можете создать бесплатную учетную запись.

Предпосылки

  • Для этой статьи требуется версия 2.77.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".

Ограничения

  • Для системных узлов автоматического кластера AKS требуется развертывание в регионах Azure, поддерживающих по крайней мере три зоны доступности, временный диск ОС и ОС Linux Azure.
  • Вы можете создавать только автоматические кластеры AKS в регионах, где общедоступна интеграция виртуальных сетей СЕРВЕРА API .

Это важно

AkS Automatic пытается динамически выбрать размер виртуальной машины для system пула узлов на основе емкости, доступной в подписке. Убедитесь, что подписка имеет квоту на 16 виртуальных ЦП любого из следующих размеров в регионе, в который развертывается кластер: Standard_D4lds_v5, Standard_D4ads_v5, Standard_D4ds_v5, Standard_D4d_v5, Standard_D4d_v4, Standard_DS3_v2, Standard_DS12_v2, Standard_D4alds_v6, Standard_D4lds_v6 или Standard_D4alds_v5. Вы можете просматривать квоты для определенных семейств виртуальных машин и отправлять запросы на увеличение квоты на портале Azure. Если у вас есть дополнительные вопросы, ознакомьтесь с документацией по устранению неполадок.

Определение переменных

Определите следующие переменные, которые будут использоваться в последующих шагах.

RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

Создание группы ресурсов

Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure.

Создайте группу ресурсов с помощью команды az group create.

az group create -n ${RG_NAME} -l ${LOCATION}

Следующий пример выходных данных напоминает успешное создание группы ресурсов:

{
  "id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
  "location": "eastus",
  "managedBy": null,
  "name": "automatic-rg",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

Создание виртуальной сети

Создайте виртуальную сеть с помощью az network vnet create команды. Создайте подсеть сервера API и подсеть кластера с помощью az network vnet subnet create команды.

При использовании пользовательской виртуальной сети с AKS Automatic необходимо создать и делегировать подсеть сервера API к Microsoft.ContainerService/managedClusters, что предоставляет службе AKS разрешения на внедрение модулей под сервера API и внутреннего балансировщика нагрузки в эту подсеть. Вы не можете использовать подсеть для других рабочих нагрузок, но ее можно использовать для нескольких кластеров AKS, расположенных в одной виртуальной сети. Минимальный поддерживаемый размер подсети сервера API — /28.

Предупреждение

Кластер AKS резервирует по крайней мере 9 IP-адресов в адресном пространстве подсети. Законченные IP-адреса могут помешать масштабированию сервера API и вызвать его сбой.

az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16

az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28

az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name clusterSubnet \
--address-prefixes 172.19.1.0/24

Требования к группе безопасности сети

Если вы добавили правила группы безопасности сети (NSG), чтобы ограничить трафик между различными подсетями в пользовательской виртуальной сети, убедитесь, что правила безопасности NSG разрешают необходимые типы обмена данными между компонентами кластера.

Подробные требования NSG при использовании пользовательских виртуальных сетей с кластерами AKS см. в разделе "Требования к пользовательской виртуальной сети".

Создайте управляемое удостоверение и предоставьте ему разрешения на виртуальную сеть.

Создайте управляемое удостоверение командой az identity create и получите идентификатор субъекта. Назначьте роль участника сети управляемому удостоверению в виртуальной сети с помощью команды az role assignment create.

az identity create \
--resource-group ${RG_NAME} \
 --name ${IDENTITY_NAME} \
 --location ${LOCATION}

IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)

az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee ${IDENTITY_PRINCIPAL_ID}

Создание автоматического кластера AKS в пользовательской виртуальной сети

Чтобы создать автоматический кластер AKS, используйте команду az aks create .

az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--vnet-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/clusterSubnet" \
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--no-ssh-key

Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.

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

Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes. kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, выполните команду az aks install-cli . Автоматические кластеры AKS настраиваются с идентификатором Microsoft Entra для управления доступом на основе ролей Kubernetes (RBAC).

При создании кластера с помощью Azure CLI вашему пользователю назначаются встроенные роли для Azure Kubernetes Service RBAC Cluster Admin.

Настройте kubectl для подключения к кластеру Kubernetes с помощью команды az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}

Проверьте подключение к кластеру, выполнив команду kubectl get. Эта команда возвращает список узлов кластера.

kubectl get nodes

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

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-13213685-vmss000000   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000001   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000002   Ready    agent   2m26s   v1.28.5

Создание виртуальной сети

Этот файл Bicep определяет виртуальную сеть.

@description('The location of the managed cluster resource.')
param location string = resourceGroup().location

@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'

@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'

@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'

@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'

@description('The name of the cluster subnet.')
param clusterSubnetName string = 'clusterSubnet'

@description('The subnet prefix of the cluster subnet.')
param clusterSubnetPrefix string = '172.19.1.0/24'

// Virtual network with an API server subnet and a cluster subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
    name: vnetName
    location: location
    properties: {
        addressSpace: {
            addressPrefixes: [ addressPrefix ]
        }
        subnets: [
            {
                name: apiServerSubnetName
                properties: {
                    addressPrefix: apiServerSubnetPrefix
                }
            }
            {
                name: clusterSubnetName
                properties: {
                    addressPrefix: clusterSubnetPrefix
                }
            }
        ]
    }
}

output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output clusterSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, clusterSubnetName)

Сохраните файл Bicep virtualNetwork.bicep на локальный компьютер.

Это важно

Bicep-файл задает параметр vnetName на aksAutomaticVnet, параметр addressPrefix на 172.19.0.0/16, параметр apiServerSubnetPrefix на 172.19.0.0/28 и параметр apiServerSubnetPrefix на 172.19.1.0/24. Если вы хотите использовать различные значения, обязательно обновите строки до предпочитаемых значений.

Разверните Bicep-файл с помощью Azure CLI.

az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep

Весь трафик в виртуальной сети разрешен по умолчанию. Если вы добавили правила группы безопасности сети (NSG), чтобы ограничить трафик между различными подсетями в пользовательской виртуальной сети, убедитесь, что правила безопасности NSG разрешают необходимые типы обмена данными между компонентами кластера.

Подробные требования NSG при использовании пользовательских виртуальных сетей с кластерами AKS см. в разделе "Требования к пользовательской виртуальной сети".

Создайте управляемое удостоверение

Этот файл Bicep определяет управляемое удостоверение, назначенное пользователю.

param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'

resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: uamiName
  location: location
}

output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId

Сохраните Bicep-файл uami.bicep на локальный компьютер.

Это важно

Файл Bicep задает параметру uamiName значение aksAutomaticUAMI. Если вы хотите использовать другое имя удостоверения, обязательно обновите строку до предпочтительного имени.

Разверните Bicep-файл с помощью Azure CLI.

az deployment group create --resource-group <resource-group> --template-file uami.bicep

Назначьте роль участника сети для виртуальной сети

Этот файл Bicep определяет назначения ролей для виртуальной сети.

@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'

@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string

// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
  name: vnetName
}

// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
  scope: virtualNetwork
  properties: {
      roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
      principalId: uamiPrincipalId
  }
}

Сохраните Bicep файл roleAssignments.bicep на локальный компьютер.

Это важно

Файл Bicep задает значение vnetName параметра aksAutomaticVnet. Если вы использовали другое имя виртуальной сети, обязательно обновите строку до предпочтительного имени виртуальной сети.

Разверните Bicep-файл с помощью Azure CLI. Необходимо указать идентификатор принципала назначения пользовательской личности.

az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>

Создание автоматического кластера AKS в пользовательской виртуальной сети

Этот файл Bicep определяет автоматизированный кластер AKS.

@description('The name of the managed cluster resource.')
param clusterName string = 'aksAutomaticCluster'

@description('The location of the managed cluster resource.')
param location string = resourceGroup().location

@description('The resource ID of the API server subnet.')
param apiServerSubnetId string

@description('The resource ID of the cluster subnet.')
param clusterSubnetId string

@description('The resource ID of the user assigned managed identity.')
param uamiId string

/// Create the AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
  name: clusterName
  location: location  
  sku: {
    name: 'Automatic'
  }
  properties: {
    agentPoolProfiles: [
      {
        name: 'systempool'
        mode: 'System'
          count: 3
        vnetSubnetID: clusterSubnetId
      }
    ]
    apiServerAccessProfile: {
        subnetId: apiServerSubnetId
    }
    networkProfile: {
      outboundType: 'loadBalancer'
    }
  }
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${uamiId}': {}
    }
  }
}

Сохраните файл Bicep aks.bicep на локальном компьютере.

Это важно

Файл Bicep задает clusterName параметр aksAutomaticCluster. Если вы хотите другое имя кластера, обязательно обновите строку до предпочтительного имени кластера.

Разверните Bicep-файл с помощью Azure CLI. Необходимо указать идентификатор ресурса подсети сервера API, идентификатор ресурса подсети кластера и идентификатор ресурса управляемого пользователем назначения.

az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters clusterSubnetId=<cluster subnet resource id> \
--parameters uamiId=<user assigned identity id>

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

Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes. kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, выполните команду az aks install-cli . Автоматические кластеры AKS настраиваются с идентификатором Microsoft Entra для управления доступом на основе ролей Kubernetes (RBAC).

Это важно

При создании кластера с помощью Bicep необходимо назначить одну из встроенных ролей, таких как Azure Kubernetes Service RBAC Reader, Azure Kubernetes Service RBAC Writer, Azure Kubernetes Service RBAC Admin или Azure Kubernetes Service RBAC Cluster Admin, вашим пользователям, с областью действия в самом кластере или в конкретном пространстве имен, как показано в примере az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com. Кроме того, убедитесь, что у ваших пользователей есть встроенная роль Azure Kubernetes Service Cluster User, чтобы выполнять az aks get-credentials, а затем получите kubeconfig вашего кластера AKS с помощью команды az aks get-credentials.

Настройте kubectl для подключения к кластеру Kubernetes с помощью команды az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

az aks get-credentials --resource-group <resource-group> --name <cluster-name>

Проверьте подключение к кластеру, выполнив команду kubectl get. Эта команда возвращает список узлов кластера.

kubectl get nodes

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

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-13213685-vmss000000   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000001   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000002   Ready    agent   2m26s   v1.28.5

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

Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например, какие образы контейнеров запускать. Манифест включает следующие развертывания и службы Kubernetes:

Снимок экрана: пример архитектуры Магазина Azure.

  • Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
  • Информация о продукте: отображает сведения о продукте.
  • Служба заказов: помещает заказы.
  • Rabbit MQ: очередь сообщений для управления очередью заказов.

Примечание.

Не рекомендуется запускать контейнеры с сохранением состояния, такие как RabbitMQ, без постоянного хранения для продуктивной среды. Эти контейнеры используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure Cosmos DB или служебная шина Azure.

  1. Создайте пространство имен aks-store-demo, в которое будут развернуты ресурсы Kubernetes.

    kubectl create ns aks-store-demo
    
  2. Разверните приложение с помощью команды kubectl apply в aks-store-demo namespace. Файл YAML, определяющий развертывание, находится на сайте GitHub.

    kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yaml
    

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

    statefulset.apps/rabbitmq created
    configmap/rabbitmq-enabled-plugins 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
    ingress/store-front created
    

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

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

  1. Проверьте состояние развернутых pod с помощью команды kubectl get pods. Убедитесь, что все поды имеют статус Running, прежде чем продолжить. Если это первая развертываемая рабочая нагрузка, может потребоваться несколько минут для автоматической подготовки узла для создания пула узлов для запуска модулей.

    kubectl get pods -n aks-store-demo
    
  2. Проверьте общедоступный IP-адрес для приложения store-front. Ход выполнения можно отслеживать с помощью команды kubectl get service с аргументом --watch.

    kubectl get ingress store-front -n aks-store-demo --watch
    

    Выходные данные ADDRESS для store-front службы изначально отображаются пустыми:

    NAME          CLASS                                HOSTS   ADDRESS        PORTS   AGE
    store-front   webapprouting.kubernetes.azure.com   *                      80      12m
    
  3. После изменения АДРЕСА с пустого на фактический общедоступный IP-адрес используйте CTRL-C для остановки kubectl процесса наблюдения.

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

    NAME          CLASS                                HOSTS   ADDRESS        PORTS   AGE
    store-front   webapprouting.kubernetes.azure.com   *       4.255.22.196   80      12m
    
  4. Откройте веб-браузер на внешний IP-адрес вашего модуля ingress, чтобы увидеть приложение Магазина Azure в работе.

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

Удаление кластера

Если вы не планируете использовать учебник AKS, очистите ненужные ресурсы, чтобы избежать расходов Azure. Выполните команду az group delete , чтобы удалить группу ресурсов, службу контейнеров и все связанные ресурсы.

az group delete --name <resource-group> --yes --no-wait

Примечание.

Кластер AKS был создан с пользовательским управляемым удостоверением. Если вам больше не нужна эта идентификация, ее можно удалить вручную.

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

В этом кратком руководстве вы развернули кластер Kubernetes с помощью AKS Automatic в пользовательской виртуальной сети, а затем развернули в нем простое многоконтейнерное приложение. Этот пример приложения предназначен только для демонстрационных целей и не представляет все рекомендации для приложений Kubernetes. Рекомендации по созданию полных решений с помощью AKS для использования в производственной среде см. в руководстве по решению AKS.

Чтобы узнать больше об AKS Automatic, перейдите к обзору.