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
上。要将镜像视为需要修剪,管理员必须:
在运行
oc adm prune images
命令时指定--keep-tag-revisions=0
。小心此操作将从所有含有基础镜像的命名空间中有效移除所有标签,除非它们比指定阈值年轻,或者有比指定阈值年轻的对象引用它们。
-
删除所有位置低于修订阈值的 is tag,即
myapp:v2.1
和myapp:v2.1-may-2016
。 - 在历史记录中进一步移动镜像,可以通过运行新构建并推送到同一 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
-
重新连接的解决方案是保护 注册表的安全。如果不需要,您可以在命令后附加
--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
标志(不推荐)。