你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
设置启用了 Azure Arc 的 Kubernetes 群集,以便运行应用服务、Functions 和逻辑应用(预览版)
如果有启用了 Azure Arc 的 Kubernetes 群集,可使用它创建启用了应用服务的自定义位置,并部署 Web 应用、函数应用和逻辑应用。
启用了 Azure Arc 的 Kubernetes 可让本地或云 Kubernetes 群集对 Azure 中的应用服务、Functions 和逻辑应用可见。 你可像在另一个 Azure 区域中那样创建应用并进行部署。
先决条件
若没有 Azure 帐户,可立即注册免费帐户。
查看公共预览版的要求和限制。 群集要求尤为重要。
添加 Azure CLI 扩展
在 Azure Cloud Shell 中启动 Bash 环境。
由于这些 CLI 命令尚未成为核心 CLI 集的一部分,因此请通过以下命令添加它们。
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) 提供从头开始设置环境的具体说明。 但是,对于生产工作负载,你可能不希望在 AKS 群集上启用 Azure Arc,因为它已在 Azure 中进行管理。 这些步骤将帮助你开始了解服务,但对于生产部署,应将它们视为说明性的,而不是规范性的。 请参阅快速入门:将现有 Kubernetes 群集连接到 Azure Arc,了解有关如何创建启用了 Azure Arc 的 Kubernetes 群集的常规说明。
在 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 工作区
虽然不需要 Log Analytic 工作区即可在 Azure Arc 中运行应用服务,但开发人员可通过它来获得在启用了 Azure Arc 的 Kubernetes 群集中运行的应用的应用程序日志。
为简单起见,接下来请创建工作区。
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 工作区的编码工作区 ID 和共享密钥。 下一步需要用到它们。
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
在启用 Log Analytics 的情况下将应用服务扩展安装到连接了 Azure Arc 的群集。 同样,虽然 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
是否应在 Kubernetes 群集上安装 KEDA。 接受“覆盖”或“跳过” true
false
。buildService.storageClassName
生成服务用于存储项目的存储类的名称。 像 default
这样的值指定了名为default
的类,而不是被标记为默认值的任何类。 Default 是 AKS 和 AKS HCI 的一个有效存储类,但可能不适用于其他分发版/平台。buildService.storageAccessMode
与命名存储类一起使用的访问模式。 接受“覆盖”或“跳过” ReadWriteOnce
ReadWriteMany
。customConfigMap
将由应用服务 Kubernetes 环境设置的 ConfigMap 的名称。 目前,它必须是 <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
,选择“none”将禁用平台日志。logProcessor.appLogs.logAnalyticsConfig.customerId
仅当 logProcessor.appLogs.destination
设置为log-analytics
时才需要。 base64 编码的 Log Analytics 工作区 ID。 此参数应配置为受保护的设置。logProcessor.appLogs.logAnalyticsConfig.sharedKey
仅当 logProcessor.appLogs.destination
设置为log-analytics
时才需要。 base64 编码的 Log Analytics 工作区共享密钥。 此参数应配置为受保护的设置。保存应用服务扩展的
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
查看在 Kubernetes 群集中创建的 Pod:
kubectl get pods -n $NAMESPACE
你可从应用服务扩展创建的 Pod 中详细了解这些 Pod 及其在系统中的作用。
创建自定义位置
Azure 中的自定义位置用于分配应用服务 Kubernetes 环境。
为自定义位置的预期名称和连接到 Azure Arc 群集的 ID 设置以下环境变量。
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
注意
如果在群集上创建自定义位置时遇到问题,可能需要在群集上启用自定义位置功能。 如果使用服务主体登录到 CLI,或者使用对群集资源具有受限权限的 Microsoft Entra 用户登录,则这是必需的。
通过以下命令验证自定义位置是否成功创建。 输出应显示
provisioningState
属性处于Succeeded
状态。 如果不是,请在一分钟后再次运行该命令。az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
保存自定义位置 ID,供下一步使用。
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