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 環境を起動します。

Launch Cloud Shell in a new window

これらの 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 に接続する」を参照してください。

  1. パブリック 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
    
  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 リソースを含むリソース グループを作成します。 <group-name> は、使用するリソース グループ名に置き換えてください。

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_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 ワークスペースの作成

Azure Arc で App Service を実行するために Log Analytic ワークスペースは必要ありませんが、開発者はこれを使用して、Azure Arc 対応 Kubernetes クラスターで実行されているアプリのアプリケーション ログを取得できます。

  1. わかりやすくするために、この時点でワークスペースを作成します。

    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
    

App Service 拡張機能をインストールする

  1. 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
    
  2. 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 パラメーターについて、次の表で説明します。

    パラメーター Description
    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.destinationlog-analytics に設定されている場合にのみ、必須です。 base64 でエンコードされた Log Analytics ワークスペース ID。 このパラメーターは、保護された設定として構成する必要があります。
    logProcessor.appLogs.logAnalyticsConfig.sharedKey logProcessor.appLogs.destinationlog-analytics に設定されている場合にのみ、必須です。 base64 でエンコードされた Log Analytics ワークスペース共有キー。 このパラメーターは、保護された設定として構成する必要があります。
  3. 後で使用できるように、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)
    
  4. 拡張機能が完全にインストールされるまで待ってから、処理を進めてください。 次のコマンドを実行して、この処理が完了するまでターミナル セッションを待機することができます。

    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 環境を割り当てるために使用されます。

  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 のように表示されるはずです。 そうではない場合、少し時間をおいてからもう一度実行してください。

    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)
    

App Service Kubernetes 環境を作成する

カスタムの場所にアプリを作成するには、App Service Kubernetes 環境が必要です。

  1. App Service Kubernetes 環境を作成する:

    az appservice kube create \
        --resource-group $GROUP_NAME \
        --name $KUBE_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID 
    
  2. 次のコマンドを使用して、App Service Kubernetes 環境が正常に作成されたことを確認します。 出力で、provisioningState プロパティは Succeeded のように表示されるはずです。 そうではない場合、少し時間をおいてからもう一度実行してください。

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

次の手順