この記事では、Azure Kubernetes Fleet Manager ResourcePlacement を使用して、フリート内のクラスター間で名前空間スコープのリソースをデプロイする方法について説明します。
Important
Azure Kubernetes Fleet Manager のプレビュー機能は、セルフサービス、オプトイン ベースで利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 Azure Kubernetes Fleet Manager のプレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。
[前提条件]
- Azure アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- この記事で使用される概念と用語については、 名前空間スコープのリソース配置の概念の概要 を参照してください。
- ハブ クラスターとメンバー クラスターを含む Fleet Manager が必要です。 お持ちでない場合は、 Azure CLI を使用して Azure Kubernetes Fleet Manager リソースを作成し、メンバー クラスターに参加させる方法に関するページを参照してください。
- ハブ クラスターの Kubernetes API へのアクセス権が必要です。 アクセス権がない場合は、「Azure Kubernetes Fleet Manager ハブ クラスターの Kubernetes API にアクセスする」を参照してください。
メンバー クラスター間で名前空間を確立する
ResourcePlacementを使用して名前空間スコープのリソースをデプロイするには、その前に、ターゲット名前空間がメンバー クラスターに存在している必要があります。 この例では、ハブ クラスターに名前空間を作成し、 ClusterResourcePlacementを使用してメンバー クラスターに伝達する方法を示します。
注
次の例では、 placement.kubernetes-fleet.io/v1beta1 API バージョンを使用します。
selectionScope: NamespaceOnly フィールドは、v1beta1 で使用できるプレビュー機能であり、安定した v1 API では使用できません。
ハブ クラスターに名前空間を作成します。
kubectl create namespace my-appClusterResourcePlacementオブジェクトを作成して、名前空間をすべてのメンバー クラスターに伝達します。 次の 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ハブ クラスターに
ClusterResourcePlacementを適用します。kubectl apply -f namespace-crp.yaml名前空間が正常に伝達されたことを確認します。
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 を使用した名前空間スコープのリソース配置に関するページを参照してください。
ハブ クラスターの名前空間に 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-appConfigMaps を伝達する
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注
membercluster1とmembercluster2をメンバー クラスターの実際の名前に置き換えます。kubectl get memberclustersを使用して、使用可能なメンバー クラスターを一覧表示できます。ハブ クラスターに
ResourcePlacementを適用します。kubectl apply -f app-configs-rp.yamlリソース伝達の進行状況を確認します。
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配置オブジェクトの詳細を表示します。
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 がメンバー クラスターに正常に反映されたことを確認できます。
いずれかのメンバー クラスターの資格情報を取得します。
az aks get-credentials --resource-group <resource-group> --name membercluster1名前空間が存在することを確認します。
kubectl get namespace my-appConfigMap が名前空間に存在することを確認します。
kubectl get configmap -n my-app出力には、両方の ConfigMap が表示されます。
NAME DATA AGE app-config 2 2m feature-flags 2 2mConfigMap の内容を表示します。
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
関連コンテンツ
名前空間スコープのリソース配置の詳細については、次のリソースを参照してください。
Azure Kubernetes Service