Menu Close

Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

19.6.3. 镜像修剪问题

镜像没有被修剪

如果您的镜像不断积累,并且 prune 命令只删除了您期望的一小部分,请确保了解镜像被视为修剪候选者 的条件

请尤其确保您要删除的镜像在每个 标签历史记录 中的位置高于您所选的标签修订阈值。例如,有一个名为 sha:abz 的陈旧镜像。在标记镜像的命名空间 N 中运行以下命令,您将看到该镜像在一个名为 myapp 的镜像流中被标记三次:

$ image_name="sha:abz"
$ oc get is -n openshift -o go-template='{{range $isi, $is := .items}}{{range $ti, $tag := $is.status.tags}}{{range $ii, $item := $tag.items}}{{if eq $item.image "'$image_name'"}}{{$is.metadata.name}}:{{$tag.tag}} at position {{$ii}} out of {{len $tag.items}}
{{end}}{{end}}{{end}}{{end}}' # Before this place {{end}}{{end}}{{end}}{{end}}, use new line
myapp:v2 at position 4 out of 5
myapp:v2.1 at position 2 out of 2
myapp:v2.1-may-2016 at position 0 out of 1

使用默认选项时,不会修剪镜像,因为它出现在 myapp:v2.1-may-2016 标签历史记录中的位置 0 上。要将镜像视为需要修剪,管理员必须:

  1. 在运行 oc adm prune images 命令时指定 --keep-tag-revisions=0

    小心

    此操作将从所有含有基础镜像的命名空间中有效移除所有标签,除非它们比指定阈值年轻,或者有比指定阈值年轻的对象引用它们。

  2. 删除所有位置低于修订阈值的 is tag,即 myapp:v2.1myapp:v2.1-may-2016
  3. 在历史记录中进一步移动镜像,可以通过运行新构建并推送到同一 istag,或者标记其他镜像。遗憾的是,这对旧版标签可能并不始终适合。

应该避免在标签的名称中包含特定镜像的构建日期或时间,除非镜像需要保留不定的时长。这样的标签通常在历史记录中只有一个镜像,实际上会永久阻止它们被修剪。了解有关 istag 命名的更多信息.

对不安全 registry 使用安全连接

如果您在 oc adm prune images 的输出中看到类似于如下的消息,则您的 registry 未受保护,并且 oc adm prune images 客户端将尝试使用安全连接:

error: error communicating with registry: Get https://172.30.30.30:5000/healthz: http: server gave HTTP response to HTTPS client
  1. 重新连接的解决方案是保护 注册表的安全。如果不需要,您可以通过在 命令中附加 --force-insecure 来强制客户端使用不安全连接(不推荐)。

19.6.3.1. 对受保护 registry 使用不安全连接

如果您在 oc adm prune images 命令的输出中看到以下错误之一,这意味着您的 registry 已设有保护,而不是使用由 oc adm prune images 客户端用于连接验证的证书。

error: error communicating with registry: Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
error: error communicating with registry: [Get https://172.30.30.30:5000/healthz: x509: certificate signed by unknown authority, Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"]

默认情况下,存储在用户配置文件中的证书颁发机构数据用于与主 API 通信。

使用 --certificate-authority 选项为容器镜像 registry 服务器提供正确的证书颁发机构。

使用错误的证书颁发机构

以下错误表示用于为受保护容器镜像 registry 的证书签名的证书颁发机构与客户端使用的不同。

error: error communicating with registry: Get https://172.30.30.30:5000/: x509: certificate signed by unknown authority

务必通过 --certificate-authority 提供正确的证书颁发机构。

作为临时解决方案,可以添加 --force-insecure 标志(不推荐)。