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


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

Это важно

Служба приложений Azure в Kubernetes с поддержкой Arc будет прекращена 31 марта 2026 г. С 30 сентября 2025 г. клиенты больше не смогут установить расширение. Мы просим вас перейти на другие решения, такие как Azure Container Apps, в Kubernetes с поддержкой Arc, и миграция также позволяет воспользоваться преимуществами Logic Apps Гибрид для интеграционных рабочих нагрузок.

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

Кластер Kubernetes с поддержкой Azure Arc позволяет сделать ваш локальный или облачный кластер Kubernetes видимым для Службы приложений, Функций и Logic Apps в 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 в локальной среде Azure, но он не может быть для других дистрибутивов и платформ.
    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 для просмотра подов, созданных в кластере Kubernetes.

kubectl get pods -n $NAMESPACE

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

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

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

  1. Установите следующие переменные среды для нужного имени пользовательского расположения и ID подключенного кластера 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