次の方法で共有

了解 Azure Kubernetes Fleet Manager 中资源放置的快照功能

舰队管理器保留最近使用的 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 版本,目前以预览版提供。

在此示例中,我们在ResourcePlacement命名空间中有一个my-app,其 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%

后续步骤