×

随着时间的推移,在AWS上的Red Hat OpenShift Service中创建的API对象可能会通过正常的用户操作(例如构建和部署应用程序)在集群的etcd数据存储中累积。

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

基本的剪枝操作

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

$ oc adm prune <object_type> <options>

这指定了

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

  • 支持对该对象类型进行剪枝的`<options>`。

剪枝组

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

$ 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>

不要剪枝任何相对于当前时间小于`<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`权限的帐户访问AWS上的Red Hat OpenShift Service集群。

  • 安装`oc` CLI。

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

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 `schedule`:`CronJob`格式的计划。这是一个可选字段,默认为每天午夜。
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。