Azure Arc 対応の Kubernetes クラスターを設定して、App Service、Functions、Logic Apps を実行します (プレビュー)
Azure Arc 対応 Kubernetes クラスターがある場合、それを使用して App Service 対応のカスタムの場所を作成し、Web アプリ、Functions Apps、Logic Apps をそれにデプロイします。
Azure Arc 対応 Kubernetes を使用すると、オンプレミスまたはクラウドの Kubernetes クラスターを Azure の App Service、Functions、および Logic Apps に表示できるようになります。 アプリを作成し、別の Azure リージョンのようにアプリにデプロイできます。
前提条件
Azure アカウントを持っていない場合は、無料アカウントを新規登録してください。
パブリック プレビューの要件と制限事項を確認します。 特に重要なのは、クラスターの要件です。
Azure CLI の拡張機能を追加する
Azure Cloud Shell で Bash 環境を起動します。
これらの CLI コマンドはまだコア CLI セットに含まれていないため、次のコマンドを使用して追加します。
az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube
接続されているクラスターを作成する
Note
このチュートリアルでは、Azure Kubernetes Service (AKS) を使用して、環境をゼロから設定するための具体的な手順を説明します。 ただし、運用ワークロードの場合、Azure で既に管理されているため、AKS クラスターで Azure Arc を有効にする必要がない可能性があります。 これら手順は、このサービスを理解するのに役立ちますが、運用環境のデプロイでは、規範的なものではなく例示と考えてください。 Azure Arc 対応 Kubernetes クラスターを作成する一般的な手順については、「クイックスタート: 既存の Kubernetes クラスターを Azure Arc に接続する」を参照してください。
パブリック IP アドレスを使用して、Azure Kubernetes Service でクラスターを作成します。
<group-name>
は、使用するリソース グループ名に置き換えてください。AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster RESOURCE_LOCATION="eastus" # "eastus" or "westeurope" az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_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 リソースを含むリソース グループを作成します。
<group-name>
は、使用するリソース グループ名に置き換えてください。GROUP_NAME="<group-name>" # Name of resource group for the connected cluster az group create -g $GROUP_NAME -l $RESOURCE_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 ワークスペースの作成
Azure Arc で App Service を実行するために Log Analytic ワークスペースは必要ありませんが、開発者はこれを使用して、Azure Arc 対応 Kubernetes クラスターで実行されているアプリのアプリケーション ログを取得できます。
わかりやすくするために、この時点でワークスペースを作成します。
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
App Service 拡張機能をインストールする
App Service 拡張機能の目的の名前、リソースをプロビジョニングするクラスター名前空間、App Service Kubernetes 環境の名前について、次の環境変数を設定します。 App Service Kubernetes 環境で作成されたアプリのドメイン名の一部になるため、
<kube-environment-name>
に一意の名前を選択します。EXTENSION_NAME="appservice-ext" # Name of the App Service extension NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
Log Analytics を有効にして、Azure Arc に接続されたクラスターに App Service 拡張機能をインストールします。 ここでも、Log Analytics は必要ありませんが、後で拡張機能に追加することはできないため、この時点で追加するほうが簡単です。
az k8s-extension create \ --resource-group $GROUP_NAME \ --name $EXTENSION_NAME \ --cluster-type connectedClusters \ --cluster-name $CLUSTER_NAME \ --extension-type 'Microsoft.Web.Appservice' \ --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=${KUBE_ENVIRONMENT_NAME}" \ --configuration-settings "keda.enabled=true" \ --configuration-settings "buildService.storageClassName=default" \ --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \ --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \ --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \ --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 つの
--configuration-settings
パラメーターを削除します。コマンド実行時のさまざまな
--configuration-settings
パラメーターについて、次の表で説明します。パラメーター 説明 Microsoft.CustomLocation.ServiceAccount
作成されるカスタムの場所に対して作成されるサービス アカウント。 この値は default
に設定することをお勧めします。appsNamespace
アプリ定義とポッドをプロビジョニングする名前空間。 拡張機能リリースの名前空間と一致する必要があります。 clusterName
この拡張機能に対して作成される App Service Kubernetes 環境の名前。 keda.enabled
KEDA を Kubernetes クラスターにインストールする必要があるかどうか。 true
またはfalse
を指定できます。buildService.storageClassName
ビルド成果物を格納するビルド サービスのストレージ クラスの名前。 default
のような値は、既定としてマークされているクラスではなく、default
という名前のクラスを指定します。 既定は AKS と AKS HCI の有効なストレージ クラスですが、他のディストリビューションやプラットフォームでは有効でない場合があります。buildService.storageAccessMode
指定したストレージ クラスで使用するアクセス モード。 ReadWriteOnce
またはReadWriteMany
を指定できます。customConfigMap
App Service Kubernetes 環境によって設定される構成マップの名前。 現在、この値は <namespace>/kube-environment-config
にする必要があります。<namespace>
はappsNamespace
の値に置き換えてください。envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group
Azure Kubernetes Service クラスターが存在するリソース グループの名前。 基盤となるクラスターが Azure Kubernetes Service の場合にのみ、有効かつ必須です。 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 ワークスペース共有キー。 このパラメーターは、保護された設定として構成する必要があります。後で使用できるように、App Service 拡張機能の
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.installState!='Pending'" --api-version "2020-07-01-preview"
kubectl
を使用して、Kubernetes クラスターで作成されたポッドを確認できます。
kubectl get pods -n $NAMESPACE
これらのポッドと、システム内でのそれらの役割の詳細については、App Service 拡張機能によって作成されたポッドを参照してください。
カスタムの場所を作成する
Azure のカスタムの場所は、App Service Kubernetes 環境を割り当てるために使用されます。
カスタムの場所の目的の名前と、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
のように表示されるはずです。 そうではない場合、少し時間をおいてからもう一度実行してください。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)
App Service Kubernetes 環境を作成する
カスタムの場所にアプリを作成するには、App Service Kubernetes 環境が必要です。
App Service Kubernetes 環境を作成する:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
次のコマンドを使用して、App Service Kubernetes 環境が正常に作成されたことを確認します。 出力で、
provisioningState
プロパティはSucceeded
のように表示されるはずです。 そうではない場合、少し時間をおいてからもう一度実行してください。az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME