使用 Azure Kubernetes Fleet Manager ResourcePlacement 跨多个群集部署命名空间范围内的资源

适用于: ✔️具有中心群集的 Fleet Manager

Azure Kubernetes Fleet Manager ResourcePlacement 使你能够在车队中跨特定群集分布和同步单个命名空间范围的资源(例如 ConfigMaps、部署和服务),而无需传播整个命名空间。 使用此方法可以精细控制部署的位置,简化多群集配置管理并减少手动开销。 本文介绍如何使用 ResourcePlacement 将命名空间作用域资源分发到成员集群。

若要分发群集范围资源,或分发某个命名空间及其所有子资源,请参阅 使用 Azure Kubernetes Fleet Manager 的资源放置功能跨多个群集部署群集范围资源

可以使用Azure门户或Azure CLI完成本文中的步骤。

注释

可以将 Fleet Manager 的资源放置功能与 AKS 和已启用 Azure Arc 的 Kubernetes 群集配合使用。

在您开始之前

跨成员群集建立命名空间

在可用于 ResourcePlacement 部署命名空间范围的资源之前,目标命名空间必须存在于成员群集上。

让我们了解如何在 Fleet Manager 中心群集上创建命名空间,并使用 a ClusterResourcePlacement将其分发到成员群集。 通过将 selectionScope: NamespaceOnly 添加到 resourceSelector,确保仅分发该命名空间。

  1. 为订阅 ID、资源组和 Kubernetes 舰队资源设置以下环境变量:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. 使用 az account set 命令设置默认Azure订阅:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. 使用 az fleet get-credentials 命令获取 Kubernetes 舰队中心群集的 kubeconfig 文件:

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

    输出应如下所示。

    Merged "hub" as current context in /home/fleet/.kube/config
    

    注释

    如果您收到类型为 InvalidHubOperation 的错误,且错误消息提示该 fleet 没有 hub,请添加一个 hub 集群。 有关详细信息,请参阅 升级中心群集类型

  4. 在中心群集上创建命名空间:

    kubectl create namespace test-app
    
  5. 将以下 YAML 另存为 crp-distribute-namespace-only.yaml

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: distribute-test-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: test-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  6. 将部署位置清单应用到 Fleet Manager 中心集群。

    kubectl apply -f crp-distribute-namespace-only.yaml
    

    注释

    使用隐式 RollingUpdate 策略应用资源放置时,命名空间部署会立即开始。 若要了解如何进一步控制部署,请参阅 定义资源放置的部署策略

  7. 验证命名空间是否已成功分发:

    kubectl get clusterresourceplacement distribute-test-app-namespace
    

    输出应类似于以下示例:

    NAME                            GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    distribute-test-app-namespace   1     True        1               True        1               2m45s
    
  1. 在 Azure 门户中,转到你的车队管理器。

  2. 在服务菜单上的 “机群资源”下,选择“ 命名空间>+ 创建”。

    注释

    如果未看到 “舰队资源”,则群管理器没有中心群集。 有关如何添加群集的详细信息,请参阅 升级中心群集类型

  3. 在菜单中,选择 命名空间,输入 名称,然后选择“ 创建”。

    Azure门户的屏幕截图,其中显示了在 Fleet Manager 中心群集上创建的名为测试应用的命名空间。

    片刻之后,页面将刷新,命名空间显示在 Fleet Manager 中心群集的命名空间列表中。 现在它已准备就绪,可以托管你想要分发到各个成员集群的任何资源。

  4. 在服务菜单上的 “机群资源”下,选择 “资源位置>+ 创建”。

  5. 在“基本信息”选项卡上,配置以下选项:

    • “投放详情”中,输入投放名称。

    • “资源详细信息”下,输入要分发的资源的组版本类型(GVK)和名称。 在此示例中,使用以下值。

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      selectionScope: NamespaceOnly
      
    • “成员群集”选择中,选择 “所有群集”。

    • 对于 Rollout,请保持 滚动更新 策略为选中状态。

    Azure 门户的屏幕截图,显示了名为 test-app 的命名空间的群集范围资源放置已填写完成的“基本信息”选项卡。

  6. 选择 “下一步 ”以查看生成的 ClusterResourcePlacement 清单。 如果需要,可以修改清单,使用 “验证”(试运行) 选项进行验证,或选择“ 查看 + 创建 ”以继续进行最终确认。

    Azure 门户的屏幕截图,显示“查看 YAML”选项卡,其中名为 test-app 的命名空间的群集范围资源放置已通过试运行验证。

  7. 选择 “创建 ”以立即开始分发命名空间。

    Azure 门户的截图,显示了名为 test-app 的命名空间的群集范围资源放置的“查看 + 创建”选项卡。

    注释

    使用所选的 RollingUpdate 策略应用资源放置配置后,命名空间资源的部署会立即开始。 有关如何控制发布过程的详细信息,请参阅 定义资源放置的发布策略

  8. 页面刷新后,资源放置位置列表中会显示新创建的放置位置。 它显示所选集群的数量,以及舰队调度器是否可以满足放置策略要求。

    Azure门户的屏幕截图,其中显示了资源放置列表,其中包含名为 distribut-test-app 的单个资源放置。

  9. 在列表中选择相应的投放位置名称,即可查看其投放状态。 选择单个群集以查看该群集上的资源部署情况。

    Azure门户的屏幕截图,其中显示了名为 distribut-test-app 的资源放置的详细推出信息。

在选定的 Kubernetes 群集上,可以找到已部署的命名空间。

将命名空间范围内的资源分发到成员群集

使用这个简单场景:在 fleet 中选定的多个集群上部署两个 ConfigMap 资源。 你必须在该命名空间中创建 ResourcePlacement,作为要分发的资源。

  1. 在中心群集的命名空间中创建两 ConfigMap 个资源。

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n test-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n test-app
    
  2. 创建一个 ResourcePlacement,以分发 ConfigMap。 将以下 YAML 保存到名为 app-configs-rp.yaml 的文件:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: distribute-app-configs
      namespace: test-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 distribute-app-configs -n test-app
    

    输出应如下所示。

    NAME                     GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    distribute-app-configs   1     True        1               True        1               3m14s
    
  5. 查看投放详情。

    kubectl describe resourceplacement distribute-app-configs -n test-app
    

    输出应如下所示。

    Name:         distribute-app-configs
    Namespace:    test-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2026-07-24T05:18:56Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  1306099
      UID:               3a7b7f54-9ef0-4a2d-b8a6-62258ed63f78
    Spec:
      Policy:
        Cluster Names:
          aks-place-member-01-fm
          aks-place-member-02-fm
        Placement Type:  PickFixed
      Resource Selectors:
        Group:
        Kind:                  ConfigMap
        Name:                  app-config
        Selection Scope:       NamespaceWithResources
        Version:               v1
        Group:
        Kind:                  ConfigMap
        Name:                  feature-flags
        Selection Scope:       NamespaceWithResources
        Version:               v1
      Revision History Limit:  10
      Status Reporting Scope:  ClusterScopeOnly
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2026-07-24T05:18:56Z
        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:   2026-07-24T05:18:56Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                Works(s) are successfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2026-07-24T05:18:56Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2026-07-24T05:18:56Z
        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:  aks-place-member-01-fm
        Conditions:
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                Successfully scheduled resources for placement in "aks-place-member-01-fm": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2026-07-24T05:18:56Z
          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:   2026-07-24T05:18:56Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             aks-place-member-02-fm
        Conditions:
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                Successfully scheduled resources for placement in "aks-place-member-02-fm": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2026-07-24T05:18:56Z
          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:   2026-07-24T05:18:56Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2026-07-24T05:18:56Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2026-07-24T05:18:56Z
          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:  test-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  test-app
        Version:    v1
    Events:
      Type    Reason                        Age   From                  Message
      ----    ------                        ----  ----                  -------
      Normal  PlacementRolloutStarted       4m3s  placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  4m3s  placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     4m3s  placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              4m3s  placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            4m3s  placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     4m3s  placement-controller  Placement has finished the rollout process and reached the desired status
    
  1. 在 Azure 门户中,转到你的车队管理器。

  2. 在服务菜单上的 “机群资源”下,选择 “命名空间”。

    注释

    如果未看到 “舰队资源”,则群管理器没有中心群集。 有关如何添加群集的详细信息,请参阅 升级中心群集类型

  3. 在命名空间列表顶部,选择“ + 创建>应用 YAML”,并使用以下示例。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config
      namespace: test-app
    data:
      environment: production
      log-level: info
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: feature-flags
      namespace: test-app
    data:
      new-ui: enabled
      api-v2: disabled
    

    复制并粘贴这些示例,然后按照下图所示逐个应用。

    Azure 门户的屏幕截图,显示“使用 YAML 应用”对话框,其中已填入一个可应用到 Fleet Manager 中心集群的 ConfigMap。

    现在,这两个 ConfigMap 资源已可通过 ResourcePlacement 分发到成员集群。

  4. 在服务菜单上的 “机群资源”下,选择 “资源位置>+ 创建”。

  5. 在“基本信息”选项卡上,配置以下选项:

    • “投放详情”中,输入投放名称。

    • “资源详细信息”下:

      • 范围 设置为 命名空间范围

      • 对于 命名空间,请选择 test-app 命名空间。

      • 输入要分发的资源的组版本类型(GVK)和名称。 在此示例中,使用以下值。

        group: ""
        kind: ConfigMap
        version: v1
        name: app-config
        
    • “成员群集选择”中,对于 “放置类型”,请选择 “选择特定群集”。

    • 选择 “选择成员群集”,选择接收资源的成员群集,然后选择“ 选择”。

    Azure 门户的屏幕截图,显示了用于 PickFixed 放置的“选择成员群集”对话框。

    • 对于 Rollout,请保持 滚动更新 策略为选中状态。

    Azure 门户的屏幕截图,其中显示了针对两个 ConfigMap 资源的命名空间范围内的资源放置已完成填写的“基本信息”选项卡。

  6. 选择 “下一步 ”以查看生成的 ResourcePlacement 清单。

  7. 将第二个 ConfigMap 添加到 YAML 对话框中的 resourceSelectors 部分以进行分发。

    group: ""
    kind: ConfigMap
    version: v1
    name: feature-flags
    
  8. 在继续操作之前,请使用 “验证”(试运行)选项验证 修改后的 YAML。 选择 “查看 + 创建 ”以继续进行最终确认。

    Azure 门户屏幕截图,显示“查看 YAML”选项卡,其中针对两个 ConfigMap 资源的命名空间范围内的资源放置已通过试运行验证。

  9. 选择 “创建 ”以立即开始分发命名空间。

    Azure 门户的屏幕截图,显示了命名空间范围内针对两个 ConfigMap 资源的资源放置的“查看并创建”选项卡。

    注释

    使用所选的 RollingUpdate 策略应用资源放置后,资源部署会立即开始。 若要了解如何进一步控制部署,请参阅 定义资源放置的部署策略

  10. 页面刷新后,资源放置位置列表中会显示新创建的放置位置。 它显示所选集群的数量,以及舰队调度器是否可以满足放置策略要求。

    Azure 门户的截图,显示包含两个资源放置的资源放置列表。其中列出了我们的命名空间范围放置,名称为 distribute-app-configs。

  11. 在列表中选择相应的投放位置名称,即可查看其投放状态。 选择单个群集以查看该群集上的资源部署情况。

    Azure门户的屏幕截图,其中显示了名为 distribute-app-configs 的命名空间范围资源放置的详细推出信息。

可以通过直接连接到成员群集并检查 test-app 命名空间来查看这两 ConfigMap 个资源,来确认成员群集上是否存在分布式资源。

删除该部署以移除资源

删除 Fleet Manager 中心群集上的资源位置时,将从所选成员群集中删除分布式资源。

  1. 若要删除 ConfigMap 资源,请删除 Fleet Manager Hub 集群上的 ResourcePlacement

    kubectl delete resourceplacement distribute-app-configs
    
  2. 若要从成员群集中移除该命名空间,请删除 ClusterResourcePlacement

    kubectl delete clusterresourceplacement distribute-test-app-namespace
    
  1. 在服务菜单中的舰队资源下,选择资源位置

  2. 在资源放置列表中,选择相应的放置项,然后选择删除

  3. “删除”上,验证是否选择了正确的位置。 准备就绪后,选择“确认删除”“删除”。>

    Azure门户的屏幕截图,其中显示了正在删除的名为 distribut-test-app 的资源放置。

  4. 页面将刷新,位置不再显示在列表中。 将从成员群集中删除资源。

  5. 重复此过程以删除作为第一步放置的命名空间。

若要了解有关资源放置的详细信息,请参阅以下资源: