チュートリアル: 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) を使用して、環境をゼロから設定するための具体的な手順を説明します。 ただし、運用ワークロードの場合、Azure で既に管理されているため、AKS クラスターで Azure Arc を有効にする必要がない可能性があります。

前提条件

  • アクティブなサブスクリプションが含まれる 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 対応 Kubernetes クラスターを作成する一般的な手順については、「クイックスタート: 既存の 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 ワークスペース用の、エンコードされたワークスペース ID と共有キーを取得します。 これらは、次のステップで必要になります。

    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. Log Analytics を有効にして、Azure Arc に接続されたクラスターに Container Apps 拡張機能をインストールします。 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 を統合せずに拡張機能をインストールするには、コマンドから最後の 3 つの --configuration-settings パラメーターを削除します。

    コマンド実行時のさまざまな --configuration-settings パラメーターについて、次の表で説明します。

    パラメーター 説明
    Microsoft.CustomLocation.ServiceAccount カスタムの場所用に作成されたサービス アカウントです。 値 default に設定することをお勧めします。
    appsNamespace アプリ定義とリビジョンの作成に使用される名前空間です。 拡張機能リリースの名前空間と一致する必要があります
    clusterName この拡張機能に対して作成される Container Apps 拡張機能 Kubernetes 環境の名前です。
    logProcessor.appLogs.destination 省略可能。 アプリケーション ログの宛先です。 log-analytics または none を選びます。none を選ぶとプラットフォーム ログは無効になります。
    logProcessor.appLogs.logAnalyticsConfig.customerId logProcessor.appLogs.destinationlog-analytics に設定されている場合にのみ、必須です。 base64 でエンコードされた Log Analytics ワークスペース ID。 このパラメーターは、保護された設定として構成する必要があります。
    logProcessor.appLogs.logAnalyticsConfig.sharedKey logProcessor.appLogs.destinationlog-analytics に設定されている場合にのみ、必須です。 base64 でエンコードされた Log Analytics ワークスペース共有キー。 このパラメーターは、保護された設定として構成する必要があります。
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Azure Kubernetes Service クラスターが存在するリソース グループの名前。 基盤となるクラスターが Azure Kubernetes Service の場合にのみ、有効かつ必須です。
  3. 後で使用できるように、Container Apps 拡張機能の 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 クラスターで作成されたポッドを確認できます。

kubectl get pods -n $NAMESPACE

これらのポッドとシステムでのそれらの役割の詳細については、Azure Arc の概要に関するページを参照してください。

カスタムの場所を作成する

カスタムの場所は、Azure Container Apps 接続環境に割り当てる Azure の場所です。

  1. カスタムの場所の目的の名前と、Azure Arc 接続クラスターの ID に次の環境変数を設定します。

    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 のように表示されるはずです。 そうでない場合は、1 分後にコマンドを再実行します。

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. 次の手順用にカスタムの場所の ID を保存します。

    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. Container Apps 接続環境を次のように作成します。

    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
    

次の手順