教學課程:在已啟用 Azure Arc 的 Kubernetes 上啟用 Azure 容器應用程式 (預覽)


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

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

  • 建立連線的叢集。
  • 建立 Log Analytics 工作區。
  • 安裝容器應用程式延伸模組。
  • 建立自訂位置。
  • 建立 Azure 容器應用程式連線環境。

注意

在預覽期間,生產設定不支援 Arc 上的 Azure 容器應用程式。 本文僅提供評估用途的範例設定。

本教學課程使用 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 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"

建立連線的叢集

下列步驟將協助您開始了解這項服務,但在生產部署部分,應該相關步驟將為說明而非規定。 如需建立已啟用 Azure Arc 的 Kubernetes 叢集一般相關指示,請參閱快速入門:將現有的 Kubernetes 叢集連線至 Azure Arc

  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 工作區的編碼工作區識別碼和共用金鑰。 您在接下來的步驟中需要這些資料。

    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 或自訂負載平衡器,然後再嘗試安裝擴充功能。

  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 "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-analyticsnone,選擇 [none] 會停用平台記錄。
    logProcessor.appLogs.logAnalyticsConfig.customerId 只有當 logProcessor.appLogs.destination 設定為 log-analytics 時才需要。 base64 編碼的 Log Analytics 工作區識別碼。 此參數應設定為受保護的設定。
    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 Service 叢集所在的資源群組名稱。 只有在基礎叢集是 Azure Kubernetes Service 時,才有效且必要。
  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 連線叢集的識別碼。

    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 容器應用程式連線環境

開始在自訂位置上建立應用程式之前,您需要 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
    

下一步