教學:在支援 Azure Arc 的 Kubernetes 上建立容器應用程式

在這個教學中,你會將容器應用程式部署到已連接 Container Apps 的 Azure Arc Kubernetes 叢集上。 接著你要驗證配置、DNS、入口、應用程式回應和日誌。

  • 透過名稱檢索特定已連接環境。
  • 建立一個帶有外部入口的容器應用程式。
  • 請確認應用程式的修訂版本及完全合格的網域名稱。
  • 向應用程式傳送請求。
  • 在 Log Analytics 中查看應用程式日誌(若已設定)。
  • 刪除教學應用程式。

必要條件

在開始之前,請確認以下要求:

  • 完成 Enable Azure 容器應用程式 on Azure Arc-enabled Kubernetes 後所建立的已連線環境。
  • Azure CLI 存取包含已連線環境的訂閱。
  • 具備 Azure 權限,可在目標資源群組和已連接的環境中建立容器應用程式。
  • 連結環境的資源群組與名稱。
  • 從你的工作站到連接環境的入口位址,提供網路和 DNS 存取。
  • 可選擇性權限查詢安裝擴充套件時設定的 Log Analytics 工作區。

部署生產環境應用程式前,請先檢視 Azure Arc 上的 Azure 容器應用程式。若應用程式無法配置或無法被存取,請參閱「故障排除 Azure 容器應用程式 on Azure Arc-enabled Kubernetes」。

新增 Azure CLI 擴充功能

在 Azure Cloud Shell 中啟動 Bash 環境。

在新視窗中啟動 Cloud Shell。

接著,新增必要的 Azure CLI 擴充功能。

az extension add --name containerapp --upgrade --yes

為應用程式建立資源群組

容器應用程式可以使用與已連接環境不同的資源群組。 設定應用程式資源群組及用於儲存其資源元資料的 Azure 區域。 應用程式容器運行於與連接環境相關的 Kubernetes 叢集中。

APP_RESOURCE_GROUP="my-container-apps-resource-group"
AZURE_LOCATION="eastus"
az group create --name $APP_RESOURCE_GROUP --location $AZURE_LOCATION

打造互聯環境

設定連接環境的資源群組與名稱:

CONNECTED_ENVIRONMENT_RESOURCE_GROUP="<CONNECTED_ENVIRONMENT_RESOURCE_GROUP>"
CONNECTED_ENVIRONMENT_NAME="<CONNECTED_ENVIRONMENT_NAME>"

擷取該特定連接環境並確認其已準備好:

CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query id \
  --output tsv)

az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query "{Id:id,State:properties.provisioningState,Domain:properties.defaultDomain}" \
  --output yaml

僅在 State 為 Succeeded 時,才繼續。

建立並驗證應用程式

建立範例應用程式:

CONTAINER_APP_NAME="my-container-app"

az containerapp create \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --environment $CONNECTED_ENVIRONMENT_ID \
  --environment-type connected \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

等待佈建成功:

CONTAINER_APP_ID=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query id \
  --output tsv)

az resource wait --ids $CONTAINER_APP_ID --created --timeout 600

az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query "{State:properties.provisioningState,Revision:properties.latestReadyRevisionName,FQDN:properties.configuration.ingress.fqdn}" \
  --output yaml

APP_FQDN=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query properties.configuration.ingress.fqdn \
  --output tsv)

只有當 State 是 Succeeded, Revision 且 不是空且 FQDN 包含 connected-environment 域時,才繼續。 測試 DNS 及可達連接環境入口位址的網路應用程式回應:

nslookup $APP_FQDN
curl --fail --show-error "https://$APP_FQDN"

你也可以在瀏覽器中開啟應用程式:

az containerapp browse \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME

如果 DNS 無法解析、請求逾時,或回應未成功,請看應用程式 入口無法到達。

使用 Log Analytics 取得診斷記錄

注意

此節僅適用於在安裝容器應用程式擴充功能時設定 Log Analytics 時。 如果你沒設定 Log Analytics,請跳過這部分。

打開為容器應用程式擴充功能設定的 Log Analytics 工作區,並選擇日誌。 執行以下查詢以顯示過去 72 小時的紀錄。 初次攝取時間約為10至15分鐘。

let StartTime = ago(72h);
let EndTime = now();
ContainerAppConsoleLogs_CL
| where TimeGenerated between (StartTime .. EndTime)
| where ContainerAppName_s =~ "my-container-app"

Kubernetes 叢集中裝載之所有應用程式的應用程式記錄都會記錄於名為 ContainerAppConsoleLogs_CL 的自訂記錄資料表中的 Log Analytics 工作區。

  • Log_s 包含應用程式日誌訊息及容器生命週期訊息。
  • ContainerAppName_s 識別容器應用程式。 此欄位用於前一查詢。

您可以在開始使用 Kusto 中深入了解記錄查詢。

整理教學應用程式

刪除範例容器應用程式:

az containerapp delete \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --yes

如果你只為這個教學建立了應用程式資源群組,且沒有其他資源,請刪除它。

az group delete --name $APP_RESOURCE_GROUP --yes --no-wait

不要刪除已連接的環境、自訂位置、擴充功能或已連接的叢集,因為其他應用程式可能會共享這些資源。

下一步