×

随着时间的推移,在 OpenShift Dedicated 中创建的 API 对象会在集群的 etcd 数据存储中累积,这是通过正常的用户操作完成的,例如构建和部署应用程序时。

具有 `dedicated-admin` 角色的用户可以定期从集群中修剪不再需要的对象的旧版本。例如,通过修剪镜像,您可以删除不再使用但仍在占用磁盘空间的旧镜像和层。

基本的修剪操作

CLI 将修剪操作分组在一个公共父命令下

$ oc adm prune <object_type> <options>

这指定了

  • 要对其执行操作的``,例如 `groups`、`builds`、`deployments` 或 `images`。

  • 支持的用于修剪该对象类型的``。

修剪组

要从外部提供程序修剪组记录,管理员可以运行以下命令

$ oc adm prune groups \
    --sync-config=path/to/sync/config [<options>]
表 1. `oc adm prune groups` 标志
选项 描述

--confirm

指示应执行修剪,而不是执行预演。

--blacklist

指向组黑名单文件的路径。

--whitelist

指向组白名单文件的路径。

--sync-config

指向同步配置文件的路径。

步骤
  1. 要查看 prune 命令将删除的组,请运行以下命令

    $ oc adm prune groups --sync-config=ldap-sync-config.yaml
  2. 要执行修剪操作,请添加 `--confirm` 标志

    $ oc adm prune groups --sync-config=ldap-sync-config.yaml --confirm

修剪部署资源

您可以修剪与部署相关的资源,这些资源由于时间和状态而不再被系统需要。

以下命令修剪与 `DeploymentConfig` 对象关联的副本控制器

$ oc adm prune deployments [<options>]

要同时修剪与 `Deployment` 对象关联的副本集,请使用 `--replica-sets` 标志。此标志目前是技术预览功能。

表 2. `oc adm prune deployments` 标志
选项 描述

--confirm

指示应执行修剪,而不是执行预演。

--keep-complete=<N>

根据 `DeploymentConfig` 对象,保留最后 `N` 个状态为 `Complete` 且副本数量为零的副本控制器。默认为 `5`。

--keep-failed=<N>

根据 `DeploymentConfig` 对象,保留最后 `N` 个状态为 `Failed` 且副本数量为零的副本控制器。默认为 `1`。

--keep-younger-than=<duration>

不要修剪任何相对于当前时间小于 `` 的副本控制器。有效的度量单位包括纳秒 (ns)、微秒 (us)、毫秒 (ms)、秒 (s)、分钟 (m) 和小时 (h)。默认为 `60m`。

--orphans

修剪所有不再具有 `DeploymentConfig` 对象、状态为 `Complete` 或 `Failed` 且副本数量为零的副本控制器。

步骤
  1. 要查看修剪操作将删除的内容,请运行以下命令

    $ oc adm prune deployments --orphans --keep-complete=5 --keep-failed=1 \
        --keep-younger-than=60m
  2. 要实际执行修剪操作,请添加 `--confirm` 标志

    $ oc adm prune deployments --orphans --keep-complete=5 --keep-failed=1 \
        --keep-younger-than=60m --confirm

修剪构建

要修剪由于时间和状态而不再被系统需要的构建,管理员可以运行以下命令

$ oc adm prune builds [<options>]
表 3. `oc adm prune builds` 标志
选项 描述

--confirm

指示应执行修剪,而不是执行预演。

--orphans

修剪所有构建配置不再存在,且状态为已完成、失败、错误或已取消的构建。

--keep-complete=<N>

对于每个构建配置,保留状态为已完成的最后 N 个构建。默认值为 5

--keep-failed=<N>

对于每个构建配置,保留状态为失败、错误或已取消的最后 N 个构建。默认值为 1

--keep-younger-than=<duration>

不要修剪任何比当前时间早于 <duration> 的对象。默认值为 60m

步骤
  1. 要查看修剪操作将删除的内容,请运行以下命令

    $ oc adm prune builds --orphans --keep-complete=5 --keep-failed=1 \
        --keep-younger-than=60m
  2. 要实际执行修剪操作,请添加 `--confirm` 标志

    $ oc adm prune builds --orphans --keep-complete=5 --keep-failed=1 \
        --keep-younger-than=60m --confirm

开发人员可以通过修改其构建配置来启用自动构建修剪。

自动修剪镜像

由于过期、状态或超出限制而不再被系统需要的 OpenShift 镜像注册表中的镜像将被自动修剪。集群管理员可以配置或暂停修剪自定义资源。

前提条件
  • 您可以使用具有 dedicated-admin 权限的帐户访问 OpenShift Dedicated 集群。

  • 安装 oc CLI。

步骤
  • 验证名为 imagepruners.imageregistry.operator.openshift.io/cluster 的对象是否包含以下 specstatus 字段

spec:
  schedule: 0 0 * * * (1)
  suspend: false (2)
  keepTagRevisions: 3 (3)
  keepYoungerThanDuration: 60m (4)
  keepYoungerThan: 3600000000000 (5)
  resources: {} (6)
  affinity: {} (7)
  nodeSelector: {} (8)
  tolerations: [] (9)
  successfulJobsHistoryLimit: 3 (10)
  failedJobsHistoryLimit: 3 (11)
status:
  observedGeneration: 2 (12)
  conditions: (13)
  - type: Available
    status: "True"
    lastTransitionTime: 2019-10-09T03:13:45
    reason: Ready
    message: "Periodic image pruner has been created."
  - type: Scheduled
    status: "True"
    lastTransitionTime: 2019-10-09T03:13:45
    reason: Scheduled
    message: "Image pruner job has been scheduled."
  - type: Failed
    staus: "False"
    lastTransitionTime: 2019-10-09T03:13:45
    reason: Succeeded
    message: "Most recent image pruning job succeeded."
1 scheduleCronJob 格式的调度。这是一个可选字段,默认为每天午夜。
2 suspend:如果设置为 true,则暂停运行修剪的 CronJob。这是一个可选字段,默认为 false。新集群上的初始值为 false
3 keepTagRevisions:每个标签要保留的修订版数量。这是一个可选字段,默认为 3。初始值为 3
4 keepYoungerThanDuration:保留比此持续时间更短的镜像。这是一个可选字段。如果未指定值,则使用 keepYoungerThan 或默认值 60m(60 分钟)。
5 keepYoungerThan:已弃用。与 keepYoungerThanDuration 相同,但持续时间以纳秒为单位的整数指定。这是一个可选字段。设置 keepYoungerThanDuration 时,将忽略此字段。
6 resources:标准的 pod 资源请求和限制。这是一个可选字段。
7 affinity:标准的 pod 亲和性。这是一个可选字段。
8 nodeSelector:标准的 pod 节点选择器。这是一个可选字段。
9 tolerations:标准的 pod 容忍度。这是一个可选字段。
10 successfulJobsHistoryLimit:要保留的最大成功作业数。必须 >= 1 以确保报告指标。这是一个可选字段,默认为 3。初始值为 3
11 failedJobsHistoryLimit:要保留的最大失败作业数。必须 >= 1 以确保报告指标。这是一个可选字段,默认为 3。初始值为 3
12 observedGeneration:操作员观察到的世代。
13 conditions:具有以下类型的标准条件对象
  • Available:指示是否已创建修剪作业。原因可以是就绪或错误。

  • Scheduled:指示是否已安排下一个修剪作业。原因可以是已安排、已暂停或错误。

  • Failed:指示最近的修剪作业是否失败。

镜像注册表操作员管理修剪器的行为与在镜像注册表操作员的 ClusterOperator 对象上指定的 managementState 正交。如果镜像注册表操作员未处于 Managed 状态,则仍然可以通过修剪自定义资源配置和管理镜像修剪器。

但是,镜像注册表操作员的 managementState 会改变已部署的镜像修剪器作业的行为

  • Managed:镜像修剪器的 --prune-registry 标志设置为 true

  • Removed:镜像修剪器的 --prune-registry 标志设置为 false,这意味着它只修剪 etcd 中的镜像元数据。

修剪 cron 作业

Cron 作业可以执行成功作业的修剪,但可能无法正确处理失败的作业。因此,集群管理员应定期手动清理作业。他们还应该将对 cron 作业的访问权限限制在少数受信任的用户组,并设置适当的配额以防止 cron 作业创建过多的作业和 pod。