チュートリアル: 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 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 に接続する」を参照してください。
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 ワークスペース用の、エンコードされたワークスペース 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 拡張機能をインストールする
重要
AKS-HCI にデプロイする場合は、拡張機能をインストールする前に HAProxy またはカスタム ロード バランサーをセットアップしてあることを確認してください。
Container Apps 拡張機能の名前、リソースをプロビジョニングするクラスター名前空間、Azure Container Apps が接続された環境の名前について、次の環境変数を設定します。
<connected-environment-name>
には一意の名前を選びます。 接続された環境名は、Azure Container Apps 接続環境で作成するアプリのドメイン名の一部になります。EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
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.destination
がlog-analytics
に設定されている場合にのみ、必須です。 base64 でエンコードされた Log Analytics ワークスペース ID。 このパラメーターは、保護された設定として構成する必要があります。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 の場合にのみ、有効かつ必須です。 後で使用できるように、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)
拡張機能が完全にインストールされるまで待ってから、処理を進めてください。 次のコマンドを実行して、処理が完了するまでターミナル セッションを待機することができます。
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 の場所です。
カスタムの場所の目的の名前と、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)
カスタムの場所を作成する:
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
のように表示されるはずです。 そうでない場合は、1 分後にコマンドを再実行します。az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
次の手順用にカスタムの場所の 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 接続環境が必要です。
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