你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

了解 Azure Kubernetes 舰队管理器资源放置的快照

舰队管理器保留最近使用的 10 个放置计划策略的历史记录,以及所选放置的资源版本。 这些策略和资源版本被存储为快照对象:

  • 对于 ClusterResourcePlacement (CRP):ClusterSchedulingPolicySnapshotClusterResourceSnapshot(群集范围)
  • 对于 ResourcePlacement (RP):SchedulingPolicySnapshotResourceSnapshot(命名空间范围)

在本文中,我们将探讨这些对象,以便你在想要使用它们时能够了解它们。

注释

如果您还不熟悉 Fleet Manager 的资源分配:

如何创建资源快照

对 CRP 或 RP 资源选择器范围涵盖的资源所做的任何更改都会在 60 秒内自动触发新资源快照的创建。

查看资源快照

连接到 Fleet Manager 中心群集时,可以使用以下步骤查看 Fleet Manager 持有的资源快照。

查看 ClusterResourceSnapshot(用于 ClusterResourcePlacement)

对于使用 ClusterResourcePlacement 的群集范围的放置,请查看 ClusterResourceSnapshot 对象。

在此示例中,我们使用了更新的 ConfigMap,生成了两个快照。

kubectl get clusterresourcesnapshots --show-labels

我们看到两个快照,其中最近一个快照标记为最新(kubernetes-fleet.io/is-latest-snapshot=true),资源索引为 1 (kubernetes-fleet.io/resource-index=1)。

NAME                           GEN   AGE    LABELS
example-placement-0-snapshot   1     17m    kubernetes-fleet.io/is-latest-snapshot=false,kubernetes-fleet.io/parent-CRP=example-placement,kubernetes-fleet.io/resource-index=0
example-placement-1-snapshot   1     2m2s   kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP=example-placement,kubernetes-fleet.io/resource-index=1

我们可以按照以下方式检查 example-placement-1-snapshot 对象的内容。

kubectl get clusterresourcesnapshots example-placement-1-snapshot -o yaml
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceSnapshot
metadata:
  ...
  labels:
    kubernetes-fleet.io/is-latest-snapshot: "true"
    kubernetes-fleet.io/parent-CRP: example-placement
    kubernetes-fleet.io/resource-index: "1"
  name: example-placement-1-snapshot
  ...
spec:
  selectedResources:
  - apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        kubernetes.io/metadata.name: test-namespace
      name: test-namespace
    spec:
      finalizers:
      - kubernetes
  - apiVersion: v1
    data:
      key: value2
    kind: ConfigMap
    metadata:
      name: test-cm
      namespace: test-namespace

查看 ResourceSnapshot(适用于 ResourcePlacement)

对于使用 ResourcePlacement 的命名空间范围的放置,请查看命名空间内的 ResourceSnapshot 对象。

注释

ResourcePlacement 使用 placement.kubernetes-fleet.io/v1beta1 API 版本,目前以预览版提供。

在此示例中,我们在 my-app 命名空间中有一个 ResourcePlacement,它具有更新的 ConfigMaps,从而产生了两个快照。

kubectl get resourcesnapshots -n my-app --show-labels

我们看到两个快照,其中最近一个快照标记为最新(kubernetes-fleet.io/is-latest-snapshot=true),资源索引为 1 (kubernetes-fleet.io/resource-index=1)。

NAME                               GEN   AGE    LABELS
app-configs-rp-0-snapshot          1     15m    kubernetes-fleet.io/is-latest-snapshot=false,kubernetes-fleet.io/parent-CRP=app-configs-rp,kubernetes-fleet.io/resource-index=0
app-configs-rp-1-snapshot          1     1m3s   kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP=app-configs-rp,kubernetes-fleet.io/resource-index=1

我们可以按照以下方式检查 app-configs-rp-1-snapshot 对象的内容。

kubectl get resourcesnapshots app-configs-rp-1-snapshot -n my-app -o yaml
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourceSnapshot
metadata:
  ...
  labels:
    kubernetes-fleet.io/is-latest-snapshot: "true"
    kubernetes-fleet.io/parent-CRP: app-configs-rp
    kubernetes-fleet.io/resource-index: "1"
  name: app-configs-rp-1-snapshot
  namespace: my-app
  ...
spec:
  selectedResources:
  - apiVersion: v1
    data:
      config: updated-value
    kind: ConfigMap
    metadata:
      name: app-config
      namespace: my-app
      labels:
        app: my-application

使用资源快照

作为回滚机制,可以在通过更新运行管理的分阶段推出过程中使用快照。 ClusterResourcePlacementResourcePlacement均支持分阶段推出,并使用各自的快照类型。

  • 对于 ClusterResourcePlacement:将 ClusterResourceSnapshot 对象与 ClusterStagedUpdateRun 一起使用
  • 对于 ResourcePlacement:将 ResourceSnapshot 对象与 StagedUpdateRun 一起使用

有关如何为这两种资源放置类型实现分阶段推出的详细信息,请参阅分阶段 推出策略

修改快照历史记录限制

若要更改历史记录中保存的项数,请将字段 revisionHistoryLimit 添加到位置并提供整数值。 默认值为 10。

对于 ClusterResourcePlacement

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-example
spec:
  revisionHistoryLimit: 20   # keep 20 items in history
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-namespace
      version: v1
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  fleet.azure.com/location: westus
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 50%

对于 ResourcePlacement

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
  name: rp-example
  namespace: my-app
spec:
  revisionHistoryLimit: 20   # keep 20 items in history
  resourceSelectors:
    - group: ""
      kind: ConfigMap
      version: v1
      labelSelector:
        matchLabels:
          app: my-application
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  fleet.azure.com/location: westus
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 50%

后续步骤