教學課程:在已啟用 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 帳戶。
- 如果您沒有,可以免費建立一個。
- 安裝 Azure CLI 。
- 存取公用或私人容器登錄,例如 Azure Container Registry 。
設定
安裝下列 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 。
在 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
取得 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 叢集中執行的 Container Apps 應用程式記錄。 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 工作區的編碼工作區識別碼和共用金鑰。 在下一個步驟中,您需要它們。
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 擴充功能
將下列環境變數設定為 Container Apps 擴充 功能 所需的名稱、應該在其中布建資源的叢集命名空間,以及 Azure Container Apps 連線環境的名稱。 為
<connected-environment-name>
選擇唯一的名稱。 連線的環境名稱將會是您將在 Azure Container Apps 連線環境中建立之應用程式的功能變數名稱的一部分。EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
將 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-analytics
或none
,選擇 [無] 會停用平臺記錄。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 時,才有效且必要。 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)
等候延伸模組完整安裝,再繼續進行。 您可以執行下列命令,讓終端機會話等到完成為止:
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 位置。
將下列環境變數設定為自訂位置所需的名稱,以及 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)
建立自訂位置:
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
儲存下一個步驟的自訂位置識別碼。
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv)
建立 Azure Container Apps 連線的環境
您必須先有 Azure Container Apps 連線的環境 ,才能開始在自訂位置建立應用程式。
建立容器應用程式連線環境:
az containerapp connected-env create \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID \ --location $LOCATION
使用下列命令驗證已成功建立 Container Apps 連線環境。 輸出應該會將
provisioningState
屬性Succeeded
顯示為 。 如果沒有,請在一分鐘後再次執行。az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME