Руководство. Включение приложений контейнеров Azure в Kubernetes с поддержкой Azure Arc (предварительная версия)


С помощью кластеров Kubernetes с поддержкой Azure Arc вы можете создать пользовательское расположение с поддержкой контейнеров в локальном или облачном кластере Kubernetes для развертывания приложений контейнеров Azure, как и в любом другом регионе.

В этом руководстве показано, как включить приложения контейнеров Azure в кластере Kubernetes с поддержкой Arc. Изучив данный учебник, вы научитесь:

  • Создайте подключенный кластер.
  • Создадите рабочую область Log Analytics.
  • Установите расширение "Приложения контейнеров".
  • Создайте пользовательское расположение.
  • Создайте подключенную среду для приложений контейнеров Azure.

Примечание.

Во время предварительной версии приложения контейнеров Azure в Arc не поддерживаются в рабочих конфигурациях. В этой статье приведен пример конфигурации только для целей оценки.

В этом учебнике используется Служба Azure Kubernetes (AKS) для предоставления конкретных инструкций по настройке среды с нуля. Однако для рабочей нагрузки может не потребоваться включить Azure Arc в кластере AKS, так как он уже управляется в Azure.

Необходимые компоненты

Настройка

Установите следующие расширения Azure CLI.

az extension add --name connectedk8s  --upgrade --yes
az extension add --name k8s-extension --upgrade --yes
az extension add --name customlocation --upgrade --yes
az extension remove --name containerapp
az extension add --source https://aka.ms/acaarccli/containerapp-latest-py2.py3-none-any.whl --yes

Зарегистрируйте необходимые пространства имен.

az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.OperationalInsights --wait

Задайте переменные среды на основе развертывания кластера Kubernetes.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

Создание подключенного кластера

Следующие шаги помогут вам приступить к работе со службой, но для рабочих развертываний они должны рассматриваться как иллюстрирующие, а не предписательные. Общие инструкции по созданию кластера Kubernetes с поддержкой Azure Arc см. в разделе Краткое руководство. Подключение существующего кластера Kubernetes к Azure Arc.

  1. Создайте кластер в Служба Azure Kubernetes.

    az group create --name $AKS_CLUSTER_GROUP_NAME --location $LOCATION
    az aks create \
       --resource-group $AKS_CLUSTER_GROUP_NAME \
       --name $AKS_NAME \
       --enable-aad \
       --generate-ssh-keys
    
  2. Получите файл kubeconfig и проверьте подключение к кластеру. По умолчанию файл kubeconfig сохраняется в каталог ~/.kube/config.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Создайте группу ресурсов для размещения ресурсов Azure Arc.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. Подключите созданный кластер к службе Azure Arc.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. Проверьте подключение с помощью следующей команды. Она должна отобразить для свойства provisioningState значение Succeeded. Если это не так, через минуту выполните эту же команду еще раз.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Создание рабочей области Log Analytics

Рабочая область Log Analytics предоставляет доступ к журналам для приложений контейнеров, работающих в кластере Kubernetes с поддержкой Azure Arc. Рабочая область Log Analytics является необязательной, но рекомендуется.

  1. Создадите рабочую область Log Analytics.

    WORKSPACE_NAME="$GROUP_NAME-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME
    
  2. Выполните следующие команды, чтобы получить закодированные значения ИД рабочей области и общего ключа для существующей рабочей области Log Analytics. Они потребуются на следующем шаге.

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query customerId \
        --output tsv)
    LOG_ANALYTICS_WORKSPACE_ID_ENC=$(printf %s $LOG_ANALYTICS_WORKSPACE_ID | base64 -w0) # Needed for the next step
    LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query primarySharedKey \
        --output tsv)
    LOG_ANALYTICS_KEY_ENC=$(printf %s $LOG_ANALYTICS_KEY | base64 -w0) # Needed for the next step
    

Установка расширения "Приложения контейнеров"

  1. Задайте для следующих переменных среды требуемое имя расширения "Приложения контейнеров", пространство имен кластера, в котором должны быть подготовлены ресурсы, и имя подключенной среды для приложений контейнеров Azure. Выберите уникальное имя.<connected-environment-name> Имя подключенной среды будет частью доменного имени приложения, которое вы создадите в подключенной среде для приложений контейнеров Azure.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Установите расширение "Приложения контейнеров" в кластер, подключенный к Azure Arc, с включенным Log Analytics. Log Analytics нельзя добавить в расширение позже.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.App.Environment' \
        --release-train stable \
        --auto-upgrade-minor-version true \
        --scope cluster \
        --release-namespace $NAMESPACE \
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
        --configuration-settings "appsNamespace=${NAMESPACE}" \
        --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKS_CLUSTER_GROUP_NAME}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Примечание.

    Чтобы установить расширение без интеграции с Log Analytics, удалите из команды последние три параметра --configuration-settings.

    В следующей таблице описаны разные параметры --configuration-settings, которые можно указать при выполнении команды:

    Параметр Описание
    Microsoft.CustomLocation.ServiceAccount Учетная запись службы, созданная для пользовательского расположения. Рекомендуется задать значение default.
    appsNamespace Пространство имен, используемое для создания определений и редакций приложения. Он должен соответствовать пространству имен выпуска расширения.
    clusterName Имя среды Kubernetes расширения "Приложения контейнеров", которое будет создано для этого расширения.
    logProcessor.appLogs.destination Необязательно. Назначение для журналов приложений. Принимает значение log-analytics или none. Если выбрано значение «Нет», журналы платформы отключаются.
    logProcessor.appLogs.logAnalyticsConfig.customerId Является обязательным, если logProcessor.appLogs.destination имеет значение log-analytics. ИД рабочей области Log Analytics в кодировке Base64. Этот параметр следует настроить в формате защищенного параметра.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey Является обязательным, если logProcessor.appLogs.destination имеет значение log-analytics. Общий ключ рабочей области Log Analytics в кодировке Base64. Этот параметр следует настроить в формате защищенного параметра.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Имя группы ресурсов, в которой размещается кластер Службы Azure Kubernetes. Является допустимым и обязательным только в том случае, если базовый кластер относится к Службе Azure Kubernetes.
  3. Сохраните id свойство расширения "Приложения контейнеров" для дальнейшего использования.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. Дождитесь полного завершения установки расширения, прежде чем продолжать работу. Вы можете дождаться сеанса терминала, пока он не завершится, выполнив следующую команду:

    az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
    

С помощью kubectl вы можете получить список pod, созданных в кластере Kubernetes:

kubectl get pods -n $NAMESPACE

Дополнительные сведения об этих модулях pod и их роли в системе см. в обзоре Azure Arc.

Создание пользовательского расположения

Настраиваемое расположение — это расположение Azure, которое назначается подключенной среде приложений контейнеров Azure.

  1. Задайте для следующих переменных среды требуемое имя настраиваемого расположения и идентификатор кластера, подключенного к Azure Arc.

    CUSTOM_LOCATION_NAME="my-custom-location" # Name of the custom location
    CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME --query id --output tsv)
    
  2. Создайте пользовательское расположение:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \
        --cluster-extension-ids $EXTENSION_ID
    

    Примечание.

    При возникновении проблем с созданием настраиваемого расположения в кластере может потребоваться включить функцию пользовательского расположения в кластере. Это необходимо, если войдите в ИНТЕРФЕЙС командной строки с помощью субъекта-службы или если вы вошли с помощью пользователя Microsoft Entra с ограниченными разрешениями на ресурс кластера.

  3. Убедитесь, что пользовательское расположение успешно создано, выполнив следующую команду. В ее выходных данных свойство provisioningState должно иметь значение Succeeded. Если нет, повторите команду через минуту.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. Сохраните ИД настраиваемого расположения, которое нам потребуется на следующем шаге.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Создание подключенной среды для приложений контейнеров Azure

Прежде чем приступить к созданию приложений в пользовательском расположении, вам потребуется подключенная среда для приложений контейнеров Azure.

  1. Создайте подключенную среду для приложений контейнеров:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. Убедитесь, что подключенная среда "Приложения контейнеров" успешно создана с помощью следующей команды. В ее выходных данных свойство provisioningState должно иметь значение Succeeded. Если это не так, через минуту снова выполните эту команду.

    az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME
    

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