Share via


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

  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
    

次の手順