Настройка кластера Kubernetes с поддержкой Azure Arc для запуска Службы приложений, Функций и Logic Apps (предварительная версия)

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

Кластер Kubernetes с поддержкой Azure Arc в локальной или облачной среде можно сделать доступным для Службы приложений, Функций и Logic Apps в Azure. Вы можете создать приложение и выполнить его развертывание, как в обычном регионе Azure.

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

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

Добавление расширений Azure CLI

Откройте среду Bash в Azure Cloud Shell.

Так как эти команды интерфейса командной строки пока не входят в основной набор, добавьте их с помощью следующих команд.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

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

Примечание.

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

  1. Создайте в Службе Azure Kubernetes кластер с общедоступным IP-адресом. Замените <group-name> произвольным именем для группы ресурсов.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_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. Замените <group-name> произвольным именем для группы ресурсов.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_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

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

  1. Для упрощения процесса создайте рабочую область прямо сейчас.

    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. Задайте в следующих переменных среды желаемые значения параметров: имя расширения Службы приложений, пространство имен кластера для размещения подготовленных ресурсов и имя среды Kubernetes для Службы приложений. Выберите для <kube-environment-name> уникальное имя, так как это значение будет входить в доменное имя приложения, созданного в среде Kubernetes для Службы приложений.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  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.Web.Appservice' \
        --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=${KUBE_ENVIRONMENT_NAME}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    Примечание.

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

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

    Параметр Описание
    Microsoft.CustomLocation.ServiceAccount Учетная запись службы, которая должна быть создана для нового пользовательского расположения. Мы рекомендуем указать здесь значение default.
    appsNamespace Пространство имен, в котором будут предоставляться определения приложений и pod. Оно должно совпадать с пространством имен для выпуска расширения.
    clusterName Имя среды Kubernetes для Службы приложений, которая будет создана для этого расширения.
    keda.enabled Указывает, нужно ли устанавливать KEDA в кластере Kubernetes. true Принимает или false.
    buildService.storageClassName Имя класса хранилища для службы сборки, где будут храниться артефакты сборки. Значение default обозначает класс с именем default, а не любой класс, помеченный как default (по умолчанию). По умолчанию используется допустимый класс хранения для AKS и AKS HCI, но он может не подходить для других дистрибутивов и платформ.
    buildService.storageAccessMode Режим доступа для использования с указанным выше именованным классом хранилища. ReadWriteOnce Принимает или ReadWriteMany.
    customConfigMap Имя сопоставления конфигурации, которое будет настроено средой Kubernetes для Службы приложений. В настоящее время оно должно иметь вид <namespace>/kube-environment-config, где <namespace> заменяется указанным выше значением appsNamespace.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Имя группы ресурсов, в которой размещается кластер Службы Azure Kubernetes. Является допустимым и обязательным только в том случае, если базовый кластер относится к Службе Azure 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. Этот параметр следует настроить в формате защищенного параметра.
  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.installState!='Pending'" --api-version "2020-07-01-preview"
    

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

kubectl get pods -n $NAMESPACE

Дополнительные сведения о pod и их роли в системе можно узнать в статье Pod, создаваемые расширением Службы приложений.

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

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

  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)
    

Создание среды Kubernetes для Службы приложений

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

  1. Создайте среду Kubernetes для Службы приложений:

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

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

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