次の方法で共有


Azure Kubernetes Fleet Manager メンバー クラスター間で DNS 負荷分散を設定する (プレビュー)

Azure Kubernetes Fleet Manager の DNS 負荷分散は、可用性を高め、複数のメンバー クラスターにデプロイされたワークロード全体に負荷を分散するのに役立ちます。 この機能は DNS 経由で提供されるため、必要に応じてレイヤー 4 と 7 の負荷分散を提供するために使用できます。

このドキュメントの手順に従って、フリートでホストされているマルチクラスター アプリケーションの DNS ベースの負荷分散を設定します。

Von Bedeutung

Azure Kubernetes Fleet Manager のプレビュー機能は、セルフサービス、オプトイン ベースで利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 Azure Kubernetes Fleet Manager のプレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。

データ プレーン のネットワーク プレビューは、 networking.fleet.azure.com/v1beta1 API を使用してリリースされます。 プレビュー オブジェクトが表示されない場合は、Fleet Manager ハブ クラスターを操作するときに、 networking.fleet.azure.com/v1beta1 API を要求していることを確認します。

[前提条件]

Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

  • このドキュメントで参照されている オブジェクトと TrafficManagerProfile オブジェクトに関する説明を、TrafficManagerBackendでお読みください。

  • ハブ クラスターとマネージド ID を持つ Kubernetes Fleet Manager。 お持ちでない場合は、 Azure CLI を使用して Azure Kubernetes Fleet Manager を作成し、メンバー クラスターに参加させる方法に関するページを参照してください。

  • Fleet Manager のクラスター aks-member-1 を使用して同じワークロードをデプロイする 2 つのメンバー クラスターaks-member-2

  • 構成を完了するユーザーには、Azure ロールの割り当てを実行し、Fleet Manager ハブ クラスター Kubernetes API にアクセスするためのアクセス許可があります。 詳細については、 Kubernetes API へのアクセスに関する ページを参照してください。

  • プロビジョニングされた Azure Traffic Manager リソースをホストする既存の Azure リソース グループ。

  • 以下の環境変数を設定します。

    export SUBSCRIPTION_ID=<subscription>
    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    export MEMBER_CLUSTER_2=aks-member-2
    export TRAFFIC_MANAGER_GROUP=rg-flt-tm-demo
    export TRAFFIC_MANAGER_RG_ID="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${TRAFFIC_MANAGER_GROUP}
    
  • Fleet Manager ハブ クラスター Kubernetes API にアクセスするための資格情報を取得します。

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

Fleet Manager のアクセス許可を構成する

プレビュー期間中は、Fleet Manager で Azure Traffic Manager リソースを作成および管理したり、メンバー クラスターで公開されているサービスのパブリック IP アドレスを取得したりするための追加の手順を実行する必要があります。

この手順を完了するには、マネージド ID を有効にして Fleet Manager を作成する必要があります。 ユーザーには、Azure RBAC ロールの割り当てアクセス許可が必要です。

  • Fleet Manager リソースの ID 情報を取得します。

    az fleet show \ 
        --resource-group ${GROUP} \
        --name ${FLEET} \
        --query identity
    

    出力は、出力例のようになります。

    {
      "principalId": "<FLEET-PRINCIPAL-ID>",
      "tenantId": "<ENTRA-ID-TENANT>",
      "type": "SystemAssigned",
      "userAssignedIdentities": null
    }
    
  • Azure Kubernetes Fleet Manager Hub Agent ロールを Fleet Manager ハブ クラスター ID に割り当て、Traffic Manager リソースが作成される既存のリソース グループにスコープを制限します。

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \
        --scope ${TRAFFIC_MANAGER_RG_ID}
    
  • Fleet Manager ハブ クラスター ID には、メンバー クラスターに対する Azure Reader ロールも必要です。そのため、Fleet Manager は、メンバー クラスターがTrafficMangerBackend経由でServiceExportに追加されたときに、メンバー クラスターのパブリック IP アドレスを読み取ることができます。

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "Reader" \
        --scope /full/path/to/member-cluster
    

フリート リソースのメンバー クラスター間でワークロードをデプロイする

  • このハウツー ガイドの手順では、デモンストレーションのみを目的にサンプル アプリケーションを参照しています。 このワークロードは、既存の Deployment オブジェクトと Service オブジェクトのいずれかに置き換えることができます。

  • 次の手順では、Fleet Manager のクラスター リソース配置 (CRP) を使用して、Fleet Manager ハブ クラスターからメンバー クラスターにサンプル ワークロードをデプロイします。 または、これらの Kubernetes 構成を各メンバー クラスターに 1 つずつ個別にデプロイすることもできます。

  1. Fleet Manager ハブ クラスターに名前空間を作成します。

    kubectl create namespace kuard-demo
    

    出力は次のようになります。

    namespace/kuard-demo created
    
  2. 以下を kuard-export-service.yaml という名前のファイルに保存して、デプロイ、Service、ServiceExport オブジェクトを Fleet Manager ハブ クラスターにステージングします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: kuard
      namespace: kuard-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: kuard
      template:
        metadata:
          labels:
            app: kuard
        spec:
          containers:
            - name: kuard
              image: gcr.io/kuar-demo/kuard-amd64:blue
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: kuard-svc
      namespace: kuard-demo
      labels:
        app: kuard
    spec:
      selector:
        app: kuard
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    ---
    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
      annotations:
        networking.fleet.azure.com/weight: "50"
    

    Fleet Manager ハブ クラスターでオブジェクトをステージングします。

    kubectl apply -f kuard-export-service.yaml
    

    サンプルの ServiceExport 仕様では、メンバー クラスターから Fleet Manager ハブ クラスターにサービスをエクスポートできます。 2 つのクラスター間でトラフィックを均等に分割して、 ServiceExport 重みの注釈を 50 に設定します。 正常にエクスポートされると、サービスとそのすべてのエンドポイントが Fleet Manager ハブ クラスターに同期され、これらのエンドポイント間で DNS 負荷分散を設定するために使用できます。 出力は次の例のようになります。

    deployment.apps/kuard created
    service/kuard-svc created
    serviceexport.networking.fleet.azure.com/kuard-export created
    
  3. 各サービスには、Azure Traffic Manager 経由で公開できるように、一意の DNS ラベルが必要です。 Fleet Manager クラスター リソース配置 ResourceOverride を使用して、メンバー クラスターごとのサービス定義を変更し、Azure リージョンとクラスター名に基づいて一意の名前を作成します。 (この例では、Azure リージョンごとに) クラスター セレクターごとにオーバーライドを作成する必要があります。

    apiVersion: placement.kubernetes-fleet.io/v1alpha1
    kind: ResourceOverride
    metadata:
     name: ro-kuard-demo-eastus
     namespace: kuard-demo
    spec:
     placement:
       name: crp-kuard-demo
     resourceSelectors:
       -  group: ""
          kind: Service
          version: v1
          name: kuard-svc
     policy:
       overrideRules:
         - clusterSelector:
             clusterSelectorTerms:
               - labelSelector:
                   matchLabels:
                     fleet.azure.com/location: eastus
           jsonPatchOverrides:
             - op: add
               path: /metadata/annotations
               value:
                 {"service.beta.kubernetes.io/azure-dns-label-name":"fleet-${MEMBER-CLUSTER-NAME}-eastus"}
    

    "${MEMBER-CLUSTER-NAME}" は、リソース配置のオーバーライド 予約変数 であり、実行時にメンバー クラスターの名前に置き換えられます。

    kubectl apply -f ro-kuard-demo-eastus.yaml
    
  4. という名前のファイルに、次の Fleet Manager crp-dns-demo.yaml (CRP) を作成します。 eastus リージョンで最大 2 つのクラスターを選択していることに注意してください。

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: crp-dns-demo
    spec:
      resourceSelectors:
        - group: ""
          version: v1
          kind: Namespace
          name: kuard-demo
      policy:
        placementType: PickN
        numberOfClusters: 2
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      fleet.azure.com/location: eastus
    

    CRP を適用します。

    kubectl apply -f crp-dns-demo.yaml
    

    成功した場合、出力は次のようになります。

    clusterresourceplacement.placement.kubernetes-fleet.io/crp-dns-demo created
    

Azure Traffic Manager を使用して DNS 負荷分散を構成する

  1. Traffic Manager で使用するパラメーターを定義する TrafficManagerProfile を定義し、ファイル kuard-atm-demo.yamlに保存します。

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerProfile
    metadata:
      name: kuard-atm-demo
      namespace: kuard-demo
    spec:
      resourceGroup: "rg-flt-tm-demo"
      monitorConfig:
        port: 80
    

    構成を適用します。

    kubectl apply -f kuard-atm-demo.yaml
    
  2. メンバー クラスターからエクスポートされたTrafficManagerBackend エントリをまとめてグループ化するために使用する、対応するServiceを定義します。

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: kuard-atm-demo-backend
      namespace: kuard-demo
    spec:
      profile:
        name: "kuard-atm-demo"
      backend:
        name: "kuard-svc"
      weight: 100
    

    構成を適用します。

    kubectl apply -f kuard-atm-demo-backend.yaml
    
  3. 次のコマンドを実行して、Azure Traffic Manager を介してサービスが使用可能であることを確認します。

    nslookup kuard-atm-demo.trafficmanager.net
    

    出力は次の例のようになるはずです。

    Server:         10.X.X.254
    Address:        10.X.X.254#53
    
    Non-authoritative answer:
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 123.X.X.16
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 74.X.X.78
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 173.X.X.164
    
  4. Web ブラウザーを使用して URL にアクセスし、Kuard がどのように応答するかを確認します。 DNS をフラッシュして再試行して、要求が別のクラスターの別のサービス インスタンスによって処理されるかどうかを確認してみてください。

Kuard デモ アプリケーションの詳細を表示する Web ページのスクリーンショット。