この記事では、Azure Kubernetes Fleet Manager クラスター リソースの配置を使用して、フリート内のクラスター間でワークロードをデプロイする方法について説明します。
前提条件
- Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- この記事で使用される概念と用語を把握するには、「リソース伝達の概念の概要」をお読みください。
- ハブ クラスターとメンバー クラスターを含む Fleet Manager が必要です。 お持ちでない場合は、「Azure CLI を使用して Azure Kubernetes Fleet Manager リソースを作成し、メンバー クラスターを参加させる」を参照してください。
- メンバー クラスターは、必要な選択条件に一致するように、ハブ クラスターにおいて適切にラベル付けされている必要があります。 ラベルの例としては、リージョン、環境、チーム、可用性ゾーン、ノード可用性、その他必要なものが挙げられます。
- ハブ クラスターの Kubernetes API へのアクセス権が必要です。 アクセス権がない場合は、「Azure Kubernetes Fleet Manager ハブ クラスターの Kubernetes API にアクセスする」を参照してください。
ClusterResourcePlacement を使用してメンバー クラスターにリソースを配置する
ClusterResourcePlacement
オブジェクトはハブ クラスターに作成され、リソースをメンバー クラスターに伝達するために使用されます。 これは、伝達するリソースと、メンバー クラスターを選択するときに使用する配置ポリシーを指定します。 この例では、ClusterResourcePlacement
配置ポリシーでPickAll
オブジェクトを使用して、名前空間をメンバー クラスターに伝達する方法を示します。
詳細については、 Azure Kubernetes Fleet Manager クラスター リソースの配置を使用したリソースの配置 と、オープンソースの KubeFleet ドキュメントを参照してください。
- メンバー クラスターに配置する名前空間を作成します。
kubectl create namespace my-namespace
-
ClusterResourcePlacement
オブジェクトを作成し、Fleet Manager ハブ クラスターに適用します。 次の例では、ClusterResourcePlacement
という名前のdistribute-my-namespace
を使用して、my-namespace
配置ポリシーを使用して、名前空間PickAll
をすべてのメンバー クラスターにデプロイします。
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: distribute-my-namespace
spec:
resourceSelectors:
- group: ""
kind: Namespace
version: v1
name: my-namespace
policy:
placementType: PickAll
これを Fleet Manager ハブ クラスターに適用するには、kubectl apply -f distribute-my-namespace.yaml
の代わりに作成したファイルの名前を使用して、distribute-my-namespace.yaml
を発行します。
- リソース伝達の進行状況を確認します。
kubectl get clusterresourceplacement distribute-my-namespace
出力は次の例のようになります。
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-my-namespace 2 True 2 True 2 10s
- 配置オブジェクトの詳細を表示します。
kubectl describe clusterresourceplacement distribute-my-namespace
出力は次の例のようになります。
Name: distribute-my-namespace
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
Kind: ClusterResourcePlacement
Metadata:
Creation Timestamp: 2024-04-01T18:55:31Z
Finalizers:
kubernetes-fleet.io/crp-cleanup
kubernetes-fleet.io/scheduler-cleanup
Generation: 2
Resource Version: 6949
UID: 815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
Policy:
Placement Type: PickAll
Resource Selectors:
Group:
Kind: Namespace
Name: my-namespace
Version: v1
Revision History Limit: 10
Strategy:
Type: RollingUpdate
Status:
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: found all the clusters needed as specified by the scheduling policy
Observed Generation: 2
Reason: SchedulingPolicyFulfilled
Status: True
Type: ClusterResourcePlacementScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: All 3 cluster(s) are synchronized to the latest resources on the hub cluster
Observed Generation: 2
Reason: SynchronizeSucceeded
Status: True
Type: ClusterResourcePlacementSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources to 3 member clusters
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ClusterResourcePlacementApplied
Observed Resource Index: 0
Placement Statuses:
Cluster Name: membercluster1
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster2
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster3
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Selected Resources:
Kind: Namespace
Name: my-namespace
Version: v1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PlacementScheduleSuccess 108s cluster-resource-placement-controller Successfully scheduled the placement
Normal PlacementSyncSuccess 103s cluster-resource-placement-controller Successfully synchronized the placement
Normal PlacementRolloutCompleted 103s cluster-resource-placement-controller Resources have been applied to the selected clusters
リソースをクリーンアップする
ClusterResourcePlacement
オブジェクトを使用する必要がなくなった場合は、kubectl delete
コマンドを使用して削除できます。 次の例では、ClusterResourcePlacement
という名前の distribute-my-namespace
オブジェクトを削除します。
kubectl delete clusterresourceplacement distribute-my-namespace
関連するコンテンツ
リソース伝達の詳細について確認するには、以下のリソースを参照してください。
Azure Kubernetes Service