你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
舰队管理器保留最近使用的 10 个放置计划策略的历史记录,以及所选放置的资源版本。 这些策略和资源版本被存储为快照对象:
- 对于 ClusterResourcePlacement (CRP):
ClusterSchedulingPolicySnapshot和ClusterResourceSnapshot(群集范围) - 对于 ResourcePlacement (RP):
SchedulingPolicySnapshot和ResourceSnapshot(命名空间范围)
在本文中,我们将探讨这些对象,以便你在想要使用它们时能够了解它们。
注释
如果您还不熟悉 Fleet Manager 的资源分配:
- 有关群集范围的资源,请阅读 ClusterResourcePlacement(CRP)的概念性概述。
- 对于命名空间范围内的资源,请阅读 ResourcePlacement(RP)的概念性概述。
如何创建资源快照
对 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
使用资源快照
作为回滚机制,可以在通过更新运行管理的分阶段推出过程中使用快照。
ClusterResourcePlacement和ResourcePlacement均支持分阶段推出,并使用各自的快照类型。
- 对于
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%