このチュートリアルは、Azure Container Appsを実行するためのサポート済みKubernetesクラスターを準備します。 Azure Arc対応のKubernetesクラスターを作成し、Container Apps拡張機能をインストールし、カスタムロケーションを作成し、コンテナアプリ接続環境を作成します。
このチュートリアルを完了すると、AzureのサブスクリプションとKubernetesクラスターの両方が変更されます。 リストされたリソースを作成するにはAzure権限と、クラスタ管理者権限が必要です。
このチュートリアルでは、Azure Arc対応のKubernetesクラスタ上でAzure Container Appsを有効にする方法を示しています。 このチュートリアルでは、次の操作を行います。
- もし未接続であれば、KubernetesクラスターをAzure Arcに接続してください。
- オプションでLog Analyticsワークスペースを作成することもできます。
- Container Apps 拡張機能をインストールして検証してください。
- カスタムロケーションを作成・検証します。
- コンテナアプリ接続環境を作成・検証すること。
始める前に、Azure ArcのAzure Container Appsを必ず確認してください。リソースやクラスター内のコンポーネントが準備できない場合は、「Azure Arc enabled Kubernetes のAzure Container Appsのトラブルシューティング」をご覧ください。
前提条件
始める前に、以下の要件を確認してください:
- アクティブなサブスクリプションが含まれる Azure アカウント。 お持ちでない場合は、 無料で作成してください。
- リソースプロバイダーの登録権限やリソースグループの作成、Azure Arc対応のKubernetesリソース、クラスタ拡張機能、カスタムロケーション、コンテナアプリ接続環境、そしてオプションでLog Analyticsワークスペース。
- Azure CLI とその前提条件。
- Kubernetesクラスターと互換性のある
kubectlバージョンで、ワークステーションからKubernetes APIサーバーへのネットワークアクセスが欲しいです。 - Linux
amd64ワーカーノードとアクティブなkubectlコンテキストを通じたクラスタ管理者アクセスを備えたサポートされたKubernetesクラスタです。 - 動作するKubernetes
LoadBalancerサービスの実装。 - Azure Arcおよびコンテナアプリで必要とされるエンドポイントへのアウトバウンド接続。
- 拡張やアプリケーションのワークロードに十分な割り当て可能なCPUとメモリ。
本番クラスタを変更する前に、Azure Arc対応KubernetesでのPlan a Container Apps deploymentをご確認ください。
セットアップ
次の Azure CLI 拡張機能をインストールします。
- Azure CLI
- PowerShell
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
必要な名前空間を登録します。
- Azure CLI
- PowerShell
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 クラスターのデプロイに基づいて環境変数を設定します。
- Azure CLI
- PowerShell
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 Service でクラスターを作成します。
- Azure CLI
- PowerShell
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-keyskubeconfig ファイルを取得し、クラスターへの接続をテストします。 既定では、kubeconfig ファイルは
~/.kube/configに保存されます。az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin kubectl get nsAzure Arc リソースを含むリソース グループを作成します。
- Azure CLI
- PowerShell
az group create --name $GROUP_NAME --location $LOCATION作成したクラスターを Azure Arc に接続します。
- Azure CLI
- PowerShell
CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME接続されたクラスターのプロビジョニングが完了するのを待ちましょう。
- Azure CLI
- PowerShell
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 tableStateがSucceededでConnectivityがConnectedになった時のみ続けてください。 コマンドがタイムアウトした場合、「 Connected cluster is not ready」を確認してください。
Log Analytics ワークスペースの作成
Log Analyticsワークスペースは、Azure Arc対応のKubernetesクラスターで動作するコンテナアプリのアプリケーションログへのアクセスを提供します。 Log Analyticsのワークスペースは任意ですが、アプリケーション診断には推奨されます。
重要
Container Apps 拡張機能をインストールする前に Log Analytics を使うかどうかを決めてください。 拡張インストール時にLog Analyticsの設定を提供してください。 後でLog Analyticsの設定をその拡張機能インスタンスに追加することはできません。
Log Analytics ワークスペースを作成します。
- Azure CLI
- PowerShell
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 と共有キーを取得します。 これらは、次のステップで必要になります。
Caution
ワークスペース共有キーは認証情報です。 印刷せず、ソース管理にコミットせず、シェル履歴に保存せず、サポートバンドルに含めないでください。 以下のコマンドはシェル変数に保持し、保護された拡張設定としてAzureに渡します。
- Azure CLI
- PowerShell
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インストールを削除したり、非公開の拡張機能設定を適用したりしないでください。他のワークロードがそれを必要とするかもしれません。
Container Apps 拡張機能をインストールする
重要
Azure LocalでAKSにデプロイする場合は、拡張機能をインストールする前に必ずHAProxyやカスタムロードバランサーを設定してください。 また、 az containerapp arc setup-core-dns --distro AksAzureLocal を使ってローカルコンテキスト用のCoreDNSを設定することもできます。
Container Apps拡張機能、そのKubernetes名前空間、そして接続された環境の名前を設定します。
-
EXTENSION_NAMEは Azure のクラスター拡張機能リソースを識別します。 -
NAMESPACEKubernetesクラスタ内で作成され、拡張コンポーネントやコンテナアプリ管理リソースを含みます。appsNamespace設定は拡張リリースの名前空間と正確に一致しなければなりません。 -
CONNECTED_ENVIRONMENT_NAMEデフォルトのアプリケーションドメインの一部となります。 リソースグループ内で一意なDNS対応の名前を使いましょう。
拡張子名前空間に無関係なワークロードをインストールしないでください。
- Azure CLI
- PowerShell
EXTENSION_NAME="appenv-ext" NAMESPACE="appplat-ns" CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"-
Log Analytics を有効にして、Azure Arc に接続されたクラスターに Container Apps 拡張機能をインストールします。 Log Analytics を後で拡張機能に追加することはできません。
- Azure CLI
- PowerShell
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連携なしで拡張機能をインストールするには、コマンドからログ関連の3つのパラメータを削除してください。
カスタムロードバランサーを使用するクラスターの場合、
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この拡張機能に対して作成された Container Apps 拡張機能 Kubernetes 環境の名前。 logProcessor.appLogs.destination任意。 アプリケーション ログの宛先です。 log-analyticsまたはnoneを選びます。none を選ぶとプラットフォーム ログは無効になります。logProcessor.appLogs.logAnalyticsConfig.customerIdlogProcessor.appLogs.destinationがlog-analyticsに設定されている場合にのみ、必須です。 base64でエンコードされたLog AnalyticsワークスペースIDです。 このパラメーターは、保護された設定として構成する必要があります。logProcessor.appLogs.logAnalyticsConfig.sharedKeylogProcessor.appLogs.destinationがlog-analyticsに設定されている場合にのみ、必須です。 base64でエンコードされたLog Analyticsワークスペースの共有キー。 このパラメーターは、保護された設定として構成する必要があります。loadBalancerIpロード バランサーのイングレス IP。 後で使用できるように、Container Apps 拡張機能の
idプロパティを保存します。- Azure CLI
- PowerShell
EXTENSION_ID=$(az k8s-extension show \ --cluster-type connectedClusters \ --cluster-name $CLUSTER_NAME \ --resource-group $GROUP_NAME \ --name $EXTENSION_NAME \ --query id \ --output tsv)拡張機能が完全にインストールされるまで待ってから、処理を進めてください。
- Azure CLI
- PowerShell
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 tableStateがSucceededされた時のみ続けてください。 コマンドがタイムアウトしたり失敗を報告した場合は、「 拡張インストール失敗またはタイムアウト」を参照してください。拡張機能のワークロード、サービス、最近のイベントを確認しましょう:
kubectl get pods -n $NAMESPACE kubectl get services -n $NAMESPACE -o wide kubectl get events -n $NAMESPACE --sort-by=.lastTimestamp拡張ポッドが保留中、繰り返し再起動されている、あるいは予期せず準備ができていない状態のままカスタムロケーションを作成しないでください。 これらのポッドとシステムでのそれらの役割の詳細については、Azure Arc の概要に関するページを参照してください。
Log Analyticsを設定している場合は、ワークスペースキーを含むローカル変数をクリアしてください。
- Azure CLI
- PowerShell
unset LOG_ANALYTICS_KEY LOG_ANALYTICS_KEY_ENC
カスタムの場所を作成する
カスタムの場所は、Azure Container Apps 接続環境に割り当てる Azure の場所です。
カスタムの場所の目的の名前と、Azure Arc 接続クラスターの ID に次の環境変数を設定します。
- Azure CLI
- PowerShell
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)カスタムの場所を作成する:
- Azure CLI
- PowerShell
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 ユーザーを使用する場合は、この機能を有効にしてください。
カスタムロケーションのプロビジョニングが完了し、リソースIDを保存するのを待ちます。
- Azure CLI
- PowerShell
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 tableStateがSucceededであること、Host接続したいクラスターが特定されているか、Namespaceが$NAMESPACE一致しているかを確認してください。 プロビジョニングが失敗した場合は、「 カスタムロケーション作成失敗」を参照してください。
Azure Container Apps 接続環境を作成する
カスタムの場所でアプリの作成を開始するには、Azure Container Apps 接続環境が必要です。
Container Apps 接続環境を次のように作成します。
- Azure CLI
- PowerShell
az containerapp connected-env create \ --resource-group $GROUP_NAME \ --name $CONNECTED_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID \ --location $LOCATION接続環境のプロビジョニングが終わるのを待ちましょう。
- Azure CLI
- PowerShell
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 yamlStateがSucceededし、CustomLocationがこのチュートリアルで作成したカスタムロケーションと一致するまで続けてください。 表示されたDomainはアプリケーションのDNS設定用に保存してください。 プロビジョニングが失敗した場合は、「Connected environment creation fails」を参照してください。