演習 - Azure Arc を使用して Kubernetes に Azure App Service を実装する

完了

この演習では、Azure Arc 対応 Kubernetes クラスターに App Service を実装します。 これにより、次の演習で App Service Web アプリをデプロイできるようになります。 実装は、この演習で作成する Azure Log Analytics ワークスペースと統合されます。 演習は次のタスクで構成されます。

  1. Azure Arc 対応 Kubernetes クラスターに App Service を実装する準備をする。
  2. Azure Log Analytics ワークスペースを作成する。
  3. Azure Arc 対応 Kubernetes クラスターにアプリケーション サービス拡張機能をインストールする。
  4. Azure Arc 対応 Kubernetes クラスターにカスタムの場所を作成する。
  5. App Service Kubernetes 環境をカスタムの場所に登録する。

これは、このモジュールの演習シーケンスの 4 番目です。 この演習では、Kubernetes に Azure Arc を使用して Azure App Service Web アプリを実装する方法について説明します。シーケンスは次の演習で構成されています。

  1. ラボ環境を準備します。
  2. Kubernetes クラスターを設定します。
  3. Kubernetes クラスターを Azure Arc に接続します。
  4. Azure Arc 対応 Kubernetes クラスターに App Service を実装します。
  5. App Service Web アプリを Azure Arc 対応 Kubernetes クラスターにデプロイします。
  6. ラボ環境をクリーンアップします。

Depiction of this module's exercise sequence with additional sub-steps illustrated for the fourth exercise (Implement App Service on the Azure Arc-enable Kubernetes cluster).

タスク 1: Azure Arc 対応 Kubernetes クラスターに App Service を実装する準備をする

このユニットの実装ステップで収集しなければならない情報があります。アプリケーション サービス拡張機能のインストール、カスタムの場所の作成、Kubernetes 環境の設定などです。

必要な情報を収集するには、次のステップに従います。

  1. Azure Cloud Shell ペインに Bash セッションが表示されているブラウザー ウィンドウで、次のコマンドを実行します。 これらのコマンドによって、AKS クラスターをホストしているリソース グループの名前、AKS クラスター、Arc リソースを含むリソース グループ、および Azure Arc に接続されたクラスター リソースの変数値が設定されます。

    K8S_CLUSTER_RG_NAME=k8sAKS-RG
    K8S_CLUSTER_NAME=$(az aks list -g $K8S_CLUSTER_RG_NAME --query "[0].name" -o tsv)
    K8S_ARC_PREFIX=k8sArc
    ARC_RG_NAME="${K8S_ARC_PREFIX}-RG"
    ARC_CLUSTER_NAME="${K8S_ARC_PREFIX}-cluster" 
    
  2. 次のコマンドを実行して、Azure Arc に接続された Kubernetes クラスターにデプロイしたリソースをホストするカスタムの場所の名前を指定する変数値を設定します。

    CUSTOM_LOCATION_NAME="${K8S_ARC_PREFIX}-location"
    
  3. 次のコマンドを実行して、Azure Arc に接続されたクラスターと、対応する Kubernetes 環境にインストールする拡張機能の名前を指定する変数の値を設定します。

    EXTENSION_NAME="${K8S_ARC_PREFIX}-kube"
    KUBE_ENV_NAME="${K8S_ARC_PREFIX}-env-$RANDOM"
    
  4. 次のコマンドを実行して、App Service リソースをホストする Kubernetes 名前空間の名前を指定する変数値を設定します。

    APP_SERVICE_NAMESPACE_NAME=appservice-ns
    

タスク 2: Azure Log Analytics ワークスペースを作成する

Log Analytics を利用して、クラスターの App Service のアプリケーション ログを格納して分析することができます。 この手順は省略可能ですが、実施することをお勧めします。 この機能を構成すると、クラスターにデプロイされているすべての Web アプリのアプリケーション ログが Log Analytics ワークスペースに格納されます。

Note

このタスクは、Log Analytics を使用して、Kubernetes クラスターがホストする App Service リソースのアプリケーション ログを格納および分析する場合にのみ適用されます。

Azure Log Analytics ワークスペースを作成するには、次のステップに従います。

  1. 次のコマンドを実行して、AKS クラスター インフラストラクチャ リソースと Azure Log Analytics ワークスペースを含むリソース グループの名前を表す変数の値を設定します。

    K8S_INFRA_RG_NAME=$(az aks show -g $K8S_CLUSTER_RG_NAME -n $K8S_CLUSTER_NAME --query nodeResourceGroup -o tsv)
    LA_WORKSPACE_NAME=k8sAKS-workspace
    
  2. 次のコマンドを実行して、Azure Log Analytics ワークスペースを作成します。

    az monitor log-analytics workspace create -g $K8S_INFRA_RG_NAME -n $LA_WORKSPACE_NAME
    

    Note

    ワークスペースのプロビジョニングが完了するまで待ちます。 これには 2 分ほどかかります。

  3. 次のコマンドを実行して、Log Analytics ワークスペースの名前とその共有キーを指定する変数の値を設定します。

    LA_WORKSPACE_NAME=k8sAKS-workspace
    LA_WORKSPACE_ID=$(az monitor log-analytics workspace show --resource-group $K8S_INFRA_RG_NAME --workspace-name $LA_WORKSPACE_NAME --query "customerId" -o tsv)
    LA_WORKSPACE_ID_ENC=$(printf %s $LA_WORKSPACE_ID | base64)
    LA_WORKSPACE_KEY=$(az monitor log-analytics workspace get-shared-keys --resource-group $K8S_INFRA_RG_NAME --workspace-name $LA_WORKSPACE_NAME --query "secondarySharedKey" -o tsv)
    LA_WORKSPACE_KEY_ENC_WITH_SPACE=$(printf %s $LA_WORKSPACE_KEY | base64)
    LA_WORKSPACE_KEY_ENC=$(echo -n "${LA_WORKSPACE_KEY_ENC_WITH_SPACE//[[:space:]]/}")
    

タスク 3: Azure Arc 対応 Kubernetes クラスターにアプリケーション サービス拡張機能をインストールする

これで、アプリケーション サービス拡張機能をインストールする準備ができました。 クラスター拡張機能によって、Azure Arc 対応 Kubernetes クラスター上で Azure リソースのインストールとライフサイクル管理を行うための Azure Resource Manager ベースの機能が提供されます。 クラスター拡張機能のインスタンスは、Azure Arc に接続された Kubernetes リソース (Microsoft.Kubernetes/connectedClusters によって表されます) の上にある Azure Resource Manager リソース (Microsoft.KubernetesConfiguration/extensions) の拡張機能です。

次のステップで、Azure Arc 対応 Kubernetes クラスターにアプリケーション サービス拡張機能をインストールします。

  1. Azure Cloud Shell ペインに Bash セッションが表示されているブラウザーウィンドウで、次のコマンドを実行して Microsoft.KubernetesConfiguration リソース プロバイダーの登録状態を確認します。 これにより、Azure Arc 対応サービスをホストするリソース グループに対して選択したリージョンで、アプリケーション サービス拡張機能を作成できます。

    az provider show -n Microsoft.KubernetesConfiguration --query "[registrationState,resourceTypes[?resourceType=='extensions'].locations]"
    
  2. 次のコマンドを実行して、Log Analytics のサポートを含む拡張機能をインストールします。

    重要

    Log Analytics を使用して、Azure Arc 対応 Kubernetes クラスターでホストされている App Service Web アプリのログを格納する予定がありますか。 アプリケーション サービス拡張機能をインストールするときに、ワークスペースを参照する必要があります。 現在、この機能の実装は、アプリケーション サービス拡張機能のインストール後にはサポートされていません。

    az k8s-extension create -g $ARC_RG_NAME --name $EXTENSION_NAME --cluster-type connectedClusters -c $ARC_CLUSTER_NAME --extension-type 'Microsoft.Web.Appservice' --release-train stable --auto-upgrade-minor-version true --scope cluster --release-namespace $APP_SERVICE_NAMESPACE_NAME --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" --configuration-settings "appsNamespace=${APP_SERVICE_NAMESPACE_NAME}" --configuration-settings "clusterName=${KUBE_ENV_NAME}" --configuration-settings "buildService.storageClassName=default" --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${K8S_CLUSTER_RG_NAME}" --configuration-settings "customConfigMap=${APP_SERVICE_NAMESPACE_NAME}/kube-environment-config" --configuration-settings "logProcessor.appLogs.destination=log-analytics" --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LA_WORKSPACE_ID_ENC}" --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LA_WORKSPACE_KEY_ENC}"
    

    Note

    Log Analytics のサポートなしで拡張機能をインストールするには、次のコマンドを使用します。

    az k8s-extension create -g $ARC_RG_NAME --name $EXTENSION_NAME --cluster-type connectedClusters -c $ARC_CLUSTER_NAME --extension-type 'Microsoft.Web.Appservice' --release-train stable --auto-upgrade-minor-version true --scope cluster --release-namespace $APP_SERVICE_NAMESPACE_NAME --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" --configuration-settings "appsNamespace=${APP_SERVICE_NAMESPACE_NAME}" --configuration-settings "clusterName=${KUBE_ENV_NAME}" --configuration-settings "buildService.storageClassName=default" --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${K8S_CLUSTER_RG_NAME}" --configuration-settings "customConfigMap=${APP_SERVICE_NAMESPACE_NAME}/kube-environment-config"
    
  3. インストールされている拡張機能の状態を検証するには、次のコマンドを実行します。

    az k8s-extension show --cluster-type connectedClusters -c $ARC_CLUSTER_NAME -g $ARC_RG_NAME --name $EXTENSION_NAME
    

    Note

    installState プロパティの値が Installed に変わるまで、コマンドを再実行します。 これには 5 分ほどかかります。

  4. 次のコマンドを実行して、拡張機能の id プロパティ値を変数に格納します。

    EXTENSION_ID=$(az k8s-extension show --cluster-type connectedClusters -c $ARC_CLUSTER_NAME -g $ARC_RG_NAME --name $EXTENSION_NAME --query id -o tsv)
    

    Note

    この値は、この演習の次のタスクで必要になります。

タスク 4: Azure Arc 対応 Kubernetes クラスターにカスタムの場所を作成する

Azure Resource Manager から、場所の拡張子が提供されます。 この拡張機能を使用すると、Azure Arc 対応 Kubernetes クラスターをターゲットの場所として指定できます。 これらの場所を使用して、App Services Web アプリ、Azure Functions、Azure Logic Apps などの Azure Arc 対応サービスのインスタンスをデプロイします。 カスタムの場所により、ポッドをホストしている Kubernetes 名前空間に拡張機能がマップされます。 これらのポッドにより、対応するリソースの機能が実装されます。

カスタムの場所を作成するには、次のステップに従います。

  1. Azure Cloud Shell ペインに Bash セッションが表示されているブラウザーウィンドウで、次のコマンドを実行して Microsoft.ExtendedLocation リソース プロバイダーの登録状態を確認します。 このプロバイダーを使用すると、Azure Arc 対応サービスをホストしているリソース グループに選択したリージョンにカスタムの場所を作成できます。

    az provider show -n Microsoft.ExtendedLocation --query "[registrationState,resourceTypes[?resourceType=='customLocations'].locations]"
    
  2. 次のコマンドを実行して、接続されているクラスターの id プロパティの値を変数に格納します。

    CONNECTED_CLUSTER_ID=$(az connectedk8s show -n $ARC_CLUSTER_NAME -g $ARC_RG_NAME --query id -o tsv)
    
  3. 次のコマンドを実行して、カスタムの場所を作成します。

    az customlocation create -g $ARC_RG_NAME -n $CUSTOM_LOCATION_NAME --host-resource-id $CONNECTED_CLUSTER_ID --namespace $APP_SERVICE_NAMESPACE_NAME -c $EXTENSION_ID
    

    Note

    プロビジョニング プロセスが完了するまで待ちます。 これには 1 分ほどかかります。

    Note

    コマンドの出力を確認し、provisioningState プロパティの値が Succeeded であることを確認します。

  4. 次のコマンドを実行して、id プロパティのカスタムの場所の値を変数に格納します。

    CUSTOM_LOCATION_ID=$(az customlocation show -g $ARC_RG_NAME -n $CUSTOM_LOCATION_NAME --query id -o tsv)
    

    Note

    この値は、この演習の次のタスクで使用します。

タスク 5: App Service Kubernetes 環境をカスタムの場所に登録する

カスタムの場所を作成したら、その場所に App Service Kubernetes 環境を登録できます。 App Service Kubernetes 環境では、アプリ間で共通の構成にすることができます。

Note

カスタムの場所ごとに作成できる Kubernetes 環境リソースは 1 つのみです。

次のステップを使用して、App Service Kubernetes 環境を作成します。

  1. Azure Cloud Shell ペインに Bash セッションが表示されているブラウザーウィンドウで、次のコマンドを実行して Microsoft.Web リソース プロバイダーの登録状態を確認します。 その後、Azure Arc に接続されたクラスターとカスタムの場所を含むリソース グループをホストする Azure リージョンに kubeEnvironment リソースを作成できます。

    az provider show -n Microsoft.Web --query "[registrationState,resourceTypes[?resourceType=='kubeEnvironments'].locations]"
    
  2. 次のコマンドを実行して、App Service Kubernetes 環境を作成します。

    az appservice kube create -g $ARC_RG_NAME -n $KUBE_ENV_NAME --custom-location $CUSTOM_LOCATION_ID
    
  3. 次のコマンドを実行して、Kubernetes 環境の状態を検証します。

    az appservice kube show -g $ARC_RG_NAME -n $KUBE_ENV_NAME
    

    Note

    provisioningState プロパティの値が Succeeded に変わるまでコマンドを再実行します

おめでとうございます。 このモジュールの 4 番目の演習を完了しました。 Azure Arc 対応 Kubernetes クラスターにアプリケーション サービス拡張機能が実装されました。 これは、次の演習の App Service Web アプリのデプロイで使用されます。