Share via


教學課程:在已啟用 Azure Arc 的 Kubernetes 上啟用 Azure Container Apps (預覽)


使用 已啟用 Azure Arc 的 Kubernetes 叢集,您可以在內部部署或雲端 Kubernetes 叢集中 建立 已啟用 Container Apps 的自訂位置 ,以像部署任何其他區域一樣部署 Azure Container Apps 應用程式。

本教學課程將示範如何在已啟用 Arc 的 Kubernetes 叢集上啟用 Azure Container Apps。 在本教學課程中,您將:

  • 建立連線的叢集。
  • 建立 Log Analytics 工作區。
  • 安裝 Container Apps 擴充功能。
  • 建立自訂位置。
  • 建立 Azure Container Apps 連線的環境。

注意

在預覽期間,生產設定不支援 Arc 上的 Azure Container Apps。 本文僅提供評估用途的範例組態。

本教學課程使用 Azure Kubernetes Service (AKS) 提供從頭開始設定環境的具體指示。 不過,針對生產工作負載,您可能不想在 AKS 叢集上啟用 Azure Arc,因為它已在 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 remove --name containerapp
az extension add --source https://aka.ms/acaarccli/containerapp-latest-py2.py3-none-any.whl --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"

建立連線的叢集

下列步驟可協助您開始瞭解服務,但針對生產環境部署,應該視為說明性,而非規範性。 如需建立已啟用 Azure Arc 的 Azure Arc 叢集的一般指示,請參閱 快速入門:將現有的 Kubernetes 叢集連線至 Azure Arc

  1. 在 Azure Kubernetes Service 中建立叢集。

    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 叢集中執行的 Container Apps 應用程式記錄。 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 工作區的編碼工作區識別碼和共用金鑰。 在下一個步驟中,您需要它們。

    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
    

安裝 Container Apps 擴充功能

  1. 將下列環境變數設定為 Container Apps 擴充 功能 所需的名稱、應該在其中布建資源的叢集命名空間,以及 Azure Container Apps 連線環境的名稱。 為 <connected-environment-name> 選擇唯一的名稱。 連線的環境名稱將會是您將在 Azure Container Apps 連線環境中建立之應用程式的功能變數名稱的一部分。

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. 將 Container Apps 擴充功能安裝到已啟用 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 將針對此延伸模組建立的 Container Apps 擴充功能 Kubernetes 環境名稱。
    logProcessor.appLogs.destination 選擇性。 應用程式記錄的目的地。 接受 log-analyticsnone ,選擇 [無] 會停用平臺記錄。
    logProcessor.appLogs.logAnalyticsConfig.customerId 只有當 設定為 log-analytics 時才 logProcessor.appLogs.destination 需要 。 base64 編碼的 Log Analytics 工作區識別碼。 此參數應設定為受保護的設定。
    logProcessor.appLogs.logAnalyticsConfig.sharedKey 只有當 設定為 log-analytics 時才 logProcessor.appLogs.destination 需要 。 base64 編碼的 Log Analytics 工作區共用金鑰。 此參數應設定為受保護的設定。
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Azure Kubernetes Service 叢集所在的資源組名。 只有在基礎叢集是 Azure Kubernetes Service 時,才有效且必要。
  3. id儲存 Container Apps 延伸模組的 屬性以供稍後使用。

    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 Container Apps 連線環境的 Azure 位置。

  1. 將下列環境變數設定為自訂位置所需的名稱,以及 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
    

    注意

    如果您在叢集上建立自訂位置時遇到問題,您可能需要 在叢集 上啟用自訂位置功能。 如果使用服務主體登入 CLI,或是以叢集資源上受限制許可權的 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)
    

建立 Azure Container Apps 連線的環境

您必須先有 Azure Container Apps 連線的環境 ,才能開始在自訂位置建立應用程式。

  1. 建立容器應用程式連線環境:

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. 使用下列命令驗證已成功建立 Container Apps 連線環境。 輸出應該會將 provisioningState 屬性 Succeeded 顯示為 。 如果沒有,請在一分鐘後再次執行。

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

下一步