此教學準備一個支援的 Kubernetes 叢集以執行 Azure 容器應用程式。 它建立一個支援 Azure Arc 的 Kubernetes 叢集,安裝容器應用程式擴充功能,建立自訂位置,並建立一個容器應用程式連接的環境。
完成這個教學後,你的 Azure 訂閱和 Kubernetes 叢集都會被更改。 你需要 Azure 權限來建立列出的資源,並且有叢集管理員權限存取 Kubernetes 叢集。
本教學示範如何在啟用 Azure Arc 的 Kubernetes 叢集上啟用 Azure 容器應用程式。 在本教學課程中,您會:
- 如果 Kubernetes 叢集還沒連接,就把它連接到 Azure Arc。
- 可選擇建立 Log Analytics 工作區。
- 安裝並驗證容器應用程式擴充功能。
- 建立並驗證自訂地點。
- 建立並驗證一個與容器應用程式連結的環境。
開始前,先檢視 Azure Arc 上的 Azure 容器應用程式。如果某個資源或叢集內元件尚未準備好,請參閱「Troubleshoot Azure 容器應用程式 on Azure Arc-enabled Kubernetes」。
先決條件
在開始之前,請確認以下要求:
- 具有有效訂用帳戶的 Azure 帳戶。 如果你還沒有,可以 免費建立一個。
- 允許註冊資源提供者及建立資源群組、啟用 Azure Arc 的 Kubernetes 資源、叢集擴充功能、自訂位置、連接容器應用程式的環境,以及可選的 Log Analytics 工作空間。
- Azure CLI 及其前置條件。
- 一個與您的 Kubernetes 叢集相容的
kubectl版本,以及從您的工作站到 Kubernetes API 伺服器的網路存取權。 - 一個支援的 Kubernetes 叢集,具備 Linux
amd64工作節點,並透過主動kubectl上下文進行叢集管理員存取。 - 一個可運作的 Kubernetes
LoadBalancer服務實作。 - Azure Arc 和容器應用程式所需端點的對外連線能力。
- 具備足夠的可分配 CPU 與記憶體以應付擴充功能與應用程式工作負載。
在變更生產叢集之前,請先參閱 規劃已啟用 Azure Arc 的 Kubernetes 上的 Container Apps 部署。
安裝程式
安裝下列 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.Web --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"
建立連線的叢集
如果您在 $GROUP_NAME 中已經有受支援的已啟用 Azure Arc 的 Kubernetes 叢集,就不要再建立另一個叢集。 設定CLUSTER_NAME為現有的 connected-cluster 資源名稱,用 kubectl get nodes驗證存取權限,然後繼續建立 Log Analytics 工作區。
以下步驟建立 AKS 叢集並連接到 Azure Arc。此路徑僅作為教學的 Azure 主機評估環境。 對於現有的本地或多雲叢集,請依照快速啟動:將現有的 Kubernetes 叢集連接到 Azure Arc,然後返回此教學。
在 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等待已連線的叢集完成佈建。
CONNECTED_CLUSTER_ID=$(az connectedk8s show \ --resource-group $GROUP_NAME \ --name $CLUSTER_NAME \ --query id \ --output tsv) az resource wait --ids $CONNECTED_CLUSTER_ID --created --timeout 600 az connectedk8s show \ --resource-group $GROUP_NAME \ --name $CLUSTER_NAME \ --query "{State:provisioningState,Connectivity:connectivityStatus}" \ --output table僅當
State為Succeeded且Connectivity為Connected時,才繼續。 如果指令逾時,請參閱 已連線的叢集尚未準備就緒。
建立 Log Analytics 工作區
Log Analytics 工作區可讓您存取在已啟用 Azure Arc 的 Kubernetes 叢集上執行之容器應用程式的應用程式記錄。 Log Analytics 工作區是可選的,但建議用於應用程式診斷。
重要事項
在安裝容器應用程式擴充功能前,先決定是否使用 Log Analytics。 在安裝擴充功能時提供 Log Analytics 設定。 你無法在之後把 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 工作區的編碼工作區識別碼和共用金鑰。 您在接下來的步驟中需要這些資料。
注意事項
工作區共享金鑰是憑證。 不要列印、不要提交到原始碼控制、不要儲存在 shell 歷史,或是包含在支援套件中。 以下指令會將它保留在 shell 變數中,並以受保護的擴充功能設定傳給 Azure。
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
檢查現有的 KEDA 安裝
Container Apps 擴充功能會安裝 KEDA。 安裝擴充功能前,請檢查叢集中現有的 KEDA 元件:
kubectl get deployments -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name"
kubectl get crd scaledobjects.keda.sh
檢查部署清單中的 KEDA 元件。 如果任一指令偵測到現有的 KEDA 安裝,請先停止,並在繼續之前確認支援的共存設定。 不要移除現有的 KEDA 安裝或套用未公開的擴充功能設定,因為其他工作負載可能會依賴它。
安裝容器應用程式延伸模組
重要事項
如果你要部署到 Azure Local 的 AKS,請確保在安裝擴充功能前先設定好 HAProxy 或自訂負載平衡器。 你也可以用 az containerapp arc setup-core-dns --distro AksAzureLocal 來設定 CoreDNS 來支援本地環境。
為 容器應用程式擴充功能、其 Kubernetes 命名空間及連接環境設定名稱。
-
EXTENSION_NAME用來識別 Azure 叢集延伸模組資源。 -
NAMESPACE在 Kubernetes 叢集中建立,包含擴充元件及容器應用程式管理的資源。appsNamespace設定必須完全符合擴充功能釋出的命名空間。 -
CONNECTED_ENVIRONMENT_NAME成為預設應用程式域的一部分。 使用資源群組中唯一且符合 DNS 相容的名稱。
不要在擴充名命名空間安裝無關的工作負載。
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 "logProcessor.appLogs.destination=log-analytics" \ --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \ --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"附註
若要安裝不整合 Log Analytics 的擴充功能,請從指令中移除三個與日誌相關的參數。
對於使用自訂負載平衡器的叢集,設定
loadBalancerIp為保留給容器應用程式入口的位址:--configuration-settings "loadBalancerIp=<LOAD_BALANCER_INGRESS_IP>"該位址必須是應用程式用戶端可存取的,且不得被指派給其他服務。 安裝後,請用
kubectl get service -n $NAMESPACE -o wide來驗證分機入口服務是否回報這個位址。 只有在地址分配好後才設定通配碼DNS。 請參閱 DNS 要求。下表描述執行此命令時的各種
--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 工作區共用金鑰。 此參數應設定為受保護的設定。loadBalancerIp負載平衡器的入口 IP。 儲存容器應用程式延伸模組的
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 --created --timeout 1200 az k8s-extension show \ --cluster-type connectedClusters \ --cluster-name $CLUSTER_NAME \ --resource-group $GROUP_NAME \ --name $EXTENSION_NAME \ --query "{State:provisioningState,Version:currentVersion}" \ --output table僅在
State為Succeeded時,才繼續。 如果指令逾時或回報失敗,請參見 擴充套件安裝失敗或逾時。檢視擴充工作負載、服務及近期事件:
kubectl get pods -n $NAMESPACE kubectl get services -n $NAMESPACE -o wide kubectl get events -n $NAMESPACE --sort-by=.lastTimestamp當擴充功能 Pod 處於 Pending 狀態、反覆重新啟動,或意外地未就緒時,請勿建立自訂位置。 若要深入了解這些 Pod 及其在系統中的角色,請參閱 Azure Arc 概觀。
如果你設定了 Log Analytics,請清除包含工作區金鑰的本地變數。
unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
建立自訂位置
自訂位置是您指派給 Azure 容器應用程式連線環境的 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附註
如果你在叢集上建立自訂位置有困難,可能需要 啟用叢集上的自訂位置功能。 在使用服務主體或擁有限制叢集資源權限的 Microsoft Entra 使用者登入 CLI 時,啟用此功能。
等自訂位置完成配置並儲存其資源 ID。
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv) az resource wait --ids $CUSTOM_LOCATION_ID --created --timeout 600 az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query "{State:provisioningState,Host:hostResourceId,Namespace:namespace}" \ --output table檢查
State是否為Succeeded、Host可識別出您想要連線的叢集,且Namespace與$NAMESPACE相符。 如果配置失敗,請參見 自訂位置建立失敗。
建立 Azure 容器應用程式連線環境
開始在自訂位置上建立應用程式之前,您需要 Azure 容器應用程式連線環境。
建立容器應用程式連線環境:
az containerapp connected-env create \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID \ --location $LOCATION等連線環境完成配置。
CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --query id \ --output tsv) az resource wait --ids $CONNECTED_ENVIRONMENT_ID --created --timeout 900 az containerapp connected-env show \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --query "{State:properties.provisioningState,Location:location,CustomLocation:extendedLocation.name,Domain:properties.defaultDomain}" \ --output yaml只有當
State為Succeeded,且CustomLocation與你在本教學課程中建立的自訂位置相符時,才繼續進行。 將顯示Domain的設定存為應用程式 DNS 設定。 若配置失敗,請參閱 「連接環境建立失敗」。