Настройка кластера 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.
Создайте в Службе 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
Получите файл kubeconfig и проверьте подключение к кластеру. По умолчанию файл kubeconfig сохраняется в каталог
~/.kube/config
.az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin kubectl get ns
Создайте группу ресурсов для размещения ресурсов 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
Подключите созданный кластер к службе Azure Arc.
CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
Проверьте подключение с помощью следующей команды. Она должна отобразить для свойства
provisioningState
значениеSucceeded
. Если это не так, через минуту выполните эту же команду еще раз.az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
Создание рабочей области Log Analytics
Хотя для запуска Службы приложений в Azure Arc не требуется рабочая область Log Analytics, разработчики только через нее могут получать журналы приложений для своих приложений, работающих в кластере Kubernetes с поддержкой Azure Arc.
Для упрощения процесса создайте рабочую область прямо сейчас.
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
Выполните следующие команды, чтобы получить закодированные значения ИД рабочей области и общего ключа для существующей рабочей области 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
Установка расширения Службы приложений
Задайте в следующих переменных среды желаемые значения параметров: имя расширения Службы приложений, пространство имен кластера для размещения подготовленных ресурсов и имя среды 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
Установите расширение Службы приложений в подключенном кластере 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. Этот параметр следует настроить в формате защищенного параметра.Сохраните свойство
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)
Дождитесь полного завершения установки расширения, прежде чем продолжать работу. Чтобы сеанс терминала ожидал завершения этой команды, выполните следующую команду:
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 для Службы приложений.
Задайте в следующих переменных среды значения параметров: имя пользовательского расположения и ИД подключенного кластера 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)
Создайте пользовательское расположение:
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 с ограниченными разрешениями на ресурс кластера.
Убедитесь, что пользовательское расположение успешно создано, выполнив следующую команду. В ее выходных данных свойство
provisioningState
должно иметь значениеSucceeded
. Если это не так, через минуту снова выполните эту команду.az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
Сохраните ИД настраиваемого расположения, которое нам потребуется на следующем шаге.
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv)
Создание среды Kubernetes для Службы приложений
Прежде чем приступить к созданию приложений в пользовательском расположении, вам нужно создать среду Kubernetes для Службы приложений.
Создайте среду Kubernetes для Службы приложений:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
Убедитесь, что среда Kubernetes для Службы приложений успешно создана, выполнив следующую команду. В ее выходных данных свойство
provisioningState
должно иметь значениеSucceeded
. Если это не так, через минуту снова выполните эту команду.az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME