本文介绍如何使用 Azure Kubernetes 舰队管理器群集资源放置在集群群组中的多个群集上部署工作负载。
先决条件
- 如果没有 Azure 试用版订阅,请在开始前创建一个。
 - 阅读资源传播概念概述,了解本文中使用的概念和术语。
 - 需要包含一个中心群集和多个成员群集的舰队管理器。 如果没有,请参阅使用 Azure CLI 创建 Azure Kubernetes 舰队管理器资源并加入成员群集。
 - 必须在中心群集中适当 标记 成员群集,以匹配所需的选择条件。 示例标签包括区域、环境、团队、可用性区域、节点可用性或想要的任何其他内容。
 - 需要访问中心群集的 Kubernetes API。 如果没有访问权限,请参阅访问 Azure Kubernetes 舰队管理器中心群集的 Kubernetes API。
 
使用 ClusterResourcePlacement 将资源放置在成员群集上
对象 ClusterResourcePlacement 在中心群集上创建,用于将资源传播到成员群集。 它指定要传播的资源,以及选择成员群集时使用的放置策略。 此示例演示如何使用 ClusterResourcePlacement 具有放置策略的对象 PickAll 将命名空间传播到成员群集。
有关详细信息,请参阅使用 Azure Kubernetes 舰队管理器群集资源放置进行资源放置和开源的 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
使用创建的文件的名称代替 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
相关内容
若要了解有关资源传播的详细信息,请参阅以下资源:
- 了解资源放置状态输出。
 - 基于成员群集属性的智能跨群集 Kubernetes 资源放置。
 - 控制群集资源放置的逐出和中断。
 - 定义群集资源部署的调度策略
 - 群集资源放置常见问题解答。
 - 开源 KubeFleet 文档。