你当前正在访问 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 容器应用连接环境。

先决条件

安装

安装以下 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 群集的常规说明。

  1. 在 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
    
  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 资源的资源组。

    az group create --name $GROUP_NAME --___location $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 工作区

Log Analytics 工作区提供对已启用 Azure Arc 的 Kubernetes 群集中运行的容器应用应用程序日志的访问。 Log Analytics 工作区是可选的,但建议使用。

  1. 创建 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
    
  2. 运行以下命令,获取现有 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
    

安装容器应用扩展

重要

如果部署到 Azure Local 上的 AKS,请确保在尝试安装扩展之前已设置 HAProxy 或自定义负载均衡器。 还可以使用 az containerapp arc setup-core-dns --distro AksAzureLocal 来设置本地上下文的 coredns。

  1. 将以下环境变量设置为所需的容器应用扩展名称、应在其中预配资源的群集命名空间,以及 Azure 容器应用连接环境的名称。 为 <connected-environment-name> 选择唯一的名称。 连接环境名称将成为在 Azure 容器应用连接环境中创建的应用域名的一部分。

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. 在启用 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 "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-analyticsnone,选择“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 工作区共享密钥。 此参数应配置为受保护的设置。
  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.provisioningState!='Pending'" --api-version "2020-07-01-preview"
    

使用 kubectl,可查看已在 Kubernetes 群集中创建的 Pod:

kubectl get pods -n $NAMESPACE

若要详细了解这些 Pod 及其在系统中的角色,请参阅 Azure Arc 概述

创建自定义位置

自定义位置是分配给 Azure 容器应用连接环境的 Azure 位置。

  1. 将以下环境变量设置为自定义位置的所需名称和连接到 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)
    
  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
    

    注意

    如果在群集上创建自定义位置时遇到问题,可能需要在群集上启用自定义位置功能。 如果使用服务主体登录到 CLI,或者使用对群集资源具有受限权限的 Microsoft Entra 用户登录,则这是必需的。

  3. 通过以下命令验证自定义位置是否成功创建。 输出应显示 provisioningState 属性处于 Succeeded 状态。 如果没有,请在一分钟后重新运行命令。

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. 保存自定义位置 ID,供下一步使用。

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

创建 Azure 容器应用连接环境

开始在自定义位置创建应用之前,需要一个 Azure 容器应用连接环境

  1. 创建容器应用连接环境:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-___location $CUSTOM_LOCATION_ID \
        --___location $LOCATION
    
  2. 通过以下命令验证容器应用连接环境是否成功创建。 输出应显示 provisioningState 属性处于 Succeeded 状态。 如果不是,请在一分钟后再次运行该命令。

    az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME
    

后续步骤