5.6. 在断开连接的环境中删除镜像


如果您之前使用 oc-mirror 插件 v2 部署镜像,您可以删除这些镜像来释放镜像 registry 中的空间。oc-mirror 插件 v2 不会自动修剪没有包括在 ImageSetConfiguration 文件中的镜像。这可防止在对 ImageSetConfig.yaml 文件进行更改时意外删除必要的或部署的镜像。

您必须创建一个 DeleteImageSetConfiguration 文件,以指定要删除的镜像。

在以下示例中,DeleteImageSetConfiguration 文件会删除以下镜像:

  • OpenShift Container Platform 4.13.3 的所有发行镜像。
  • aws-load-balancer-operator v0.0.1 捆绑包及其所有相关镜像。
  • ubiubi-minimal 的额外镜像,通过它们对应的摘要引用。

DeleteImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v2alpha1
kind: DeleteImageSetConfiguration
delete:
  platform:
    channels:
      - name: stable-4.13
        minVersion: 4.13.3
        maxVersion: 4.13.3
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
      packages:
      - name: aws-load-balancer-operator
         minVersion: 0.0.1
         maxVersion: 0.0.1
  additionalImages:
    - name: registry.redhat.io/ubi8/ubi@sha256:bce7e9f69fb7d4533447232478fd825811c760288f87a35699f9c8f030f2c1a6
    - name: registry.redhat.io/ubi8/ubi-minimal@sha256:8bedbe742f140108897fb3532068e8316900d9814f399d676ac78b46e740e34e

重要
  • 考虑使用 mirror-to-disk 和 disk-to-mirror 工作流来减少删除问题。
  • 在 oc-mirror 插件 v2 中,您必须为 additionalImages 下列出的所有镜像使用显式 registry 主机名。否则,镜像会被镜像到不正确的目标路径。

oc-mirror 插件 v2 只删除镜像的清单,这不会减少 registry 中占用的存储。

要从不必要的镜像(如带有删除的清单)中释放存储空间,您必须在容器 registry 上启用垃圾收集器。启用垃圾收集器后,registry 将删除不再引用任何清单的镜像 Blob,从而减少之前由已删除 Blob 占用的存储。启用垃圾收集器的过程因容器 registry 而异。

如需更多信息,请参阅"在分发 registry 中解决存储清理问题"。

重要
  • 要在删除 Operator 镜像时跳过删除 Operator 目录镜像,您必须在 DeleteImageSetConfiguration 文件中列出 Operator 目录镜像下的特定 Operator。这样可确保只有指定的 Operator 被删除,而不是目录镜像。

    如果只指定 Operator 目录镜像,则该目录中的所有 Operator 以及目录镜像本身都将被删除。

  • oc-mirror 插件 v2 不会自动删除 Operator 目录镜像,因为其他 Operator 可能仍然被部署并依赖于这些镜像。

    如果您不确定目录中的 Operator 没有保留在 registry 或集群中,您可以在 DeleteImageSetConfiguration 中明确将目录镜像添加到 additionalImages 中以移除它。

  • 垃圾回收行为取决于 registry。有些 registry 不会自动删除已删除的镜像,需要系统管理员手动触发垃圾回收来释放空间。

5.6.1. 解决分发 registry 中的存储清理问题

分发 registry 中的一个已知问题会阻止垃圾收集器按预期释放存储。使用 Red Hat Quay 时不会出现这个问题。

流程

  • 选择发行 registry 中已知问题的适当方法:

    • 要重启容器 registry,请运行以下命令:

      $ podman restart <registry_container>
    • 要在 registry 配置中禁用缓存,请执行以下步骤:

      1. 要禁用 blobdescriptor 缓存,请修改 /etc/docker/registry/config.yml 文件:

        version: 0.1
        log:
          fields:
            service: registry
        storage:
          cache:
            blobdescriptor: ""
          filesystem:
            rootdirectory: /var/lib/registry
        http:
          addr: :5000
          headers:
            X-Content-Type-Options: [nosniff]
        health:
          storagedriver:
            enabled: true
            interval: 10s
            threshold: 3
      2. 要应用这些更改,请运行以下命令重启容器 registry:

        $ podman restart <registry_container>

5.6.2. 从断开连接的环境中删除镜像

要使用 oc-mirror 插件 v2 从断开连接的环境中删除镜像,请按照以下步骤操作。

先决条件

  • 您已在环境中启用了垃圾回收,以删除不再引用清单的镜像。

流程

  1. 创建一个 delete-image-set-config.yaml 文件,并包含以下内容:

    DeleteImageSetConfiguration 文件

    apiVersion: mirror.openshift.io/v2alpha1
    kind: DeleteImageSetConfiguration
    delete:
      platform:
        channels:
          - name: <channel_name> 
    1
    
            minVersion: <channel_min_version> 
    2
    
            maxVersion: <channel_max_version> 
    3
    
      operators:
        - catalog: <operator_catalog_name> 
    4
    
          packages:
          - name: <operator_name> 
    5
    
             minVersion: <operator_max_version> 
    6
    
             maxVersion: <operator_min_version> 
    7
    
      additionalImages:
        - name: <additional_images>

    1 1
    指定要删除的 OpenShift Container Platform 频道的名称,如 stable-4.15
    2 3
    指定要在频道中删除的镜像版本范围,例如,4.15.0 为最小版本,4.15.1 为最大版本。要只删除一个版本的镜像,在 minVersionmaxVersion 字段中都使用要删除的版本号。
    4
    指定包含要删除的 Operator 的 Operator 目录镜像,如 registry.redhat.io/redhat/redhat-operator-index:v4.14。Operator 目录镜像不会被删除。对于集群中剩余的其他 Operator,可能需要在 registry 中存在。
    5
    指定要删除的特定 Operator,如 aws-load-balancer-operator
    6 7
    指定为 Operator 删除的镜像版本范围,如最小版本为 0.0.1,最大版本为0.0.2
  2. 运行以下命令,创建一个 delete-images.yaml 文件:

    $ oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>

    其中:

    <previously_mirrored_work_folder>
    指定镜像以前被 mirror 到的或在 mirror 过程中存储镜像的目录。
    <remote_registry>

    指定将从中删除镜像的远程容器 registry 的 URL 或地址。

    重要

    在删除镜像时,指定正确的工作区目录。仅在从头开始镜像时修改或删除缓存目录,如设置一个新集群。如果对缓存目录的更改不正确,可能会破坏进一步的镜像操作。

  3. 进入创建的 <previously_mirrored_work_folder>/delete 目录。
  4. 验证 delete-images.yaml 文件是否已生成。
  5. 手工确保文件中列出的每个镜像不再被集群需要,可以安全地从 registry 中删除。
  6. 生成 delete-images YAML 文件后,运行以下命令来从远程 registry 中删除镜像:

    $ oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>

    其中:

    <previously_mirrored_work_folder>
    指定镜像以前被 mirror 到的或在 mirror 过程中存储镜像的目录。
    <remote_registry>

    指定将从中删除镜像的远程容器 registry 的 URL 或地址。

    重要

    当使用 mirror-to-mirror 方法 mirror 镜像时,镜像不会在本地缓存,因此您无法从本地缓存中删除镜像。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部