次の方法で共有


Azure Kubernetes Fleet Manager ResourcePlacement を使用して名前空間スコープのリソースを複数のクラスターにデプロイする (プレビュー)

この記事では、Azure Kubernetes Fleet Manager ResourcePlacement を使用して、フリート内のクラスター間で名前空間スコープのリソースをデプロイする方法について説明します。

Important

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

[前提条件]

メンバー クラスター間で名前空間を確立する

ResourcePlacementを使用して名前空間スコープのリソースをデプロイするには、その前に、ターゲット名前空間がメンバー クラスターに存在している必要があります。 この例では、ハブ クラスターに名前空間を作成し、 ClusterResourcePlacementを使用してメンバー クラスターに伝達する方法を示します。

次の例では、 placement.kubernetes-fleet.io/v1beta1 API バージョンを使用します。 selectionScope: NamespaceOnly フィールドは、v1beta1 で使用できるプレビュー機能であり、安定した v1 API では使用できません。

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

    kubectl create namespace my-app
    
  2. ClusterResourcePlacement オブジェクトを作成して、名前空間をすべてのメンバー クラスターに伝達します。 次の YAML を namespace-crp.yaml という名前のファイルに保存します。

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: my-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: my-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  3. ハブ クラスターに ClusterResourcePlacement を適用します。

    kubectl apply -f namespace-crp.yaml
    
  4. 名前空間が正常に伝達されたことを確認します。

    kubectl get clusterresourceplacement my-app-namespace
    

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

    NAME                GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    my-app-namespace    1     True        1               True        1               15s
    

ResourcePlacement を使用して名前空間スコープのリソースを配置する

ResourcePlacement オブジェクトは、ハブ クラスター上の名前空間内に作成され、特定の名前空間スコープのリソースをメンバー クラスターに伝達するために使用されます。 この例では、ResourcePlacement配置ポリシーを使用して、PickFixed オブジェクトを使用して ConfigMap を特定のメンバー クラスターに伝達する方法を示します。

詳細については、 Azure Kubernetes Fleet Manager ResourcePlacement を使用した名前空間スコープのリソース配置に関するページを参照してください。

  1. ハブ クラスターの名前空間に ConfigMaps を作成します。 これらの ConfigMap は、選択したメンバー クラスターに反映されます。

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n my-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n my-app
    
  2. ConfigMaps を伝達する ResourcePlacement オブジェクトを作成します。 次の YAML を app-configs-rp.yaml という名前のファイルに保存します。

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: app-configs
      namespace: my-app
    spec:
      resourceSelectors:
        - group: ""
          kind: ConfigMap
          version: v1
          name: app-config
        - group: ""
          kind: ConfigMap
          version: v1
          name: feature-flags
      policy:
        placementType: PickFixed
        clusterNames:
          - membercluster1
          - membercluster2
    

    membercluster1membercluster2をメンバー クラスターの実際の名前に置き換えます。 kubectl get memberclustersを使用して、使用可能なメンバー クラスターを一覧表示できます。

  3. ハブ クラスターに ResourcePlacement を適用します。

    kubectl apply -f app-configs-rp.yaml
    
  4. リソース伝達の進行状況を確認します。

    kubectl get resourceplacement app-configs -n my-app
    

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

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. 配置オブジェクトの詳細を表示します。

    kubectl describe resourceplacement app-configs -n my-app
    

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

    Name:         app-configs
    Namespace:    my-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2025-11-13T22:08:12Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  12345
      UID:               cec941f1-e48a-4045-b5dd-188bfc1a830f
    Spec:
      Policy:
        Cluster Names:
          membercluster1
          membercluster2
        Placement Type:  PickFixed
      Resource Selectors:
        Group:                 
        Kind:                  ConfigMap
        Name:                  app-config
        Version:               v1
        Group:                 
        Kind:                  ConfigMap
        Name:                  feature-flags
        Version:               v1
      Revision History Limit:  10
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    1
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                Works(s) are succcesfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources in 2 cluster(s) are available now
        Observed Generation:    1
        Reason:                 ResourceAvailable
        Status:                 True
        Type:                   ResourcePlacementAvailable
      Observed Resource Index:  0
      Placement Statuses:
        Cluster Name:  membercluster1
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster1": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             membercluster2
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster2": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  my-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  my-app
        Version:    v1
    Events:
      Type    Reason                     Age   From                            Message
      ----    ------                     ----  ----                            -------
      Normal  PlacementRolloutStarted       37s   placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  36s   placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     36s   placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              36s   placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            36s   placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     36s   placement-controller  Placement has finished the rollout process and reached the desired status
    

メンバー クラスター上のリソースを確認する

ConfigMap がメンバー クラスターに正常に反映されたことを確認できます。

  1. いずれかのメンバー クラスターの資格情報を取得します。

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. 名前空間が存在することを確認します。

    kubectl get namespace my-app
    
  3. ConfigMap が名前空間に存在することを確認します。

    kubectl get configmap -n my-app
    

    出力には、両方の ConfigMap が表示されます。

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. ConfigMap の内容を表示します。

    kubectl describe configmap app-config -n my-app
    

リソースをクリーンアップする

ResourcePlacement オブジェクトを使用しなくなった場合は、kubectl delete コマンドを使用して削除できます。

kubectl delete resourceplacement app-configs -n my-app

名前空間 ClusterResourcePlacementも削除するには:

kubectl delete clusterresourceplacement my-app-namespace

ハブ クラスターから名前空間とその中のすべてのリソースを削除するには:

kubectl delete namespace my-app

名前空間スコープのリソース配置の詳細については、次のリソースを参照してください。