你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:在已启用 Azure Arc 的 Kubernetes 上启用 Azure 容器应用(预览版)
借助已启用 Azure Arc 的 Kubernetes 群集,可以在本地或云 Kubernetes 群集中创建支持容器应用的自定义位置,以便像在任何其他区域中一样部署 Azure 容器应用应用程序。
本教程介绍如何在已启用 Arc 的 Kubernetes 群集上启用 Azure 容器应用。 在本教程中,将:
- 创建已连接的群集。
- 创建 Log Analytics 工作区。
- 安装容器应用扩展。
- 创建自定义位置。
- 创建 Azure 容器应用连接环境。
注意
在预览期间,生产配置中不支持 Arc 上的 Azure 容器应用。 本文提供了一个仅供评估的示例配置。
本教程使用 Azure Kubernetes 服务 (AKS) 提供从头开始设置环境的具体说明。 但是,对于生产工作负载,你可能不希望在 AKS 群集上启用 Azure Arc,因为它已在 Azure 中进行管理。
先决条件
- 具有活动订阅的 Azure 帐户。
- 如果没有帐户,可以免费创建一个帐户。
- 安装 Azure CLI。
- 访问公共或专用容器注册表,例如 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 add --name containerapp --upgrade --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,了解有关如何创建启用了 Azure Arc 的 Kubernetes 群集的常规说明。
在 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
获取 kubeconfig 文件并测试与群集的连接。 默认情况下,kubeconfig 文件保存到
~/.kube/config
。az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin kubectl get ns
创建用于包含 Azure Arc 资源的资源组。
az group create --name $GROUP_NAME --location $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 Analytics 工作区提供对已启用 Azure Arc 的 Kubernetes 群集中运行的容器应用应用程序日志的访问。 Log Analytics 工作区是可选的,但建议使用。
创建 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
运行以下命令,获取现有 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
安装容器应用扩展
重要
如果部署到 AKS-HCI,请确保在尝试安装扩展之前已设置 HAProxy 或自定义负载均衡器。
将以下环境变量设置为所需的容器应用扩展名称、应在其中预配资源的群集命名空间,以及 Azure 容器应用连接环境的名称。 为
<connected-environment-name>
选择唯一的名称。 连接环境名称将成为在 Azure 容器应用连接环境中创建的应用域名的一部分。EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
在启用 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.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
,选择“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 工作区共享密钥。 此参数应配置为受保护的设置。envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group
Azure Kubernetes 服务群集所在的资源组的名称。 仅当基础群集是 Azure Kubernetes 服务时才有效并且需要。 保存容器应用扩展的
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.provisioningState!='Pending'" --api-version "2020-07-01-preview"
使用 kubectl
,可查看已在 Kubernetes 群集中创建的 Pod:
kubectl get pods -n $NAMESPACE
若要详细了解这些 Pod 及其在系统中的角色,请参阅 Azure Arc 概述。
创建自定义位置
自定义位置是分配给 Azure 容器应用连接环境的 Azure 位置。
将以下环境变量设置为自定义位置的所需名称和连接到 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)
创建 Azure 容器应用连接环境
开始在自定义位置创建应用之前,需要一个 Azure 容器应用连接环境。
创建容器应用连接环境:
az containerapp connected-env create \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID \ --location $LOCATION
通过以下命令验证容器应用连接环境是否成功创建。 输出应显示
provisioningState
属性处于Succeeded
状态。 如果不是,请在一分钟后再次运行该命令。az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME