Openshift私有仓库爆了,怎么办??!!
背景
像大家担心的那样,Openshift私有仓库磁盘爆了,使用率100%!!!
使用oc adm prune
来作对openshift集群的清理,你敢吗?
会不会把需要的镜像也一并删了呢,要是如此,就只能像DBA一样走人了。
今天就来探讨下oc adm prune
的用法。
先给出答案
如你所料,我们最终的清理镜像的办法是oc adm prune images
1 | oc login -u admin -p admin |
注意
以上oc adm prune images
命令只能在普通用户下执行,无法在system:admin用户下执行,所以必须先登录普通用户,同时用户拥有system:image-pruner权限。
精减镜像命令oc adm prune images的用法
为了让镜像不占用过多的磁盘空间,需要对它全精减。很多时候,比如重复地构建镜像,会留下很多不必要的镜像层,而这些镜像层会占用非常多的空间。
1 | oc adm prune images [<options>] |
options说明
参数 | 说明 |
---|---|
–all | 默认:true,删除除了私有镜像仓库中的多余的镜像外,也删除ImageStream中连接外部镜像的ImageStream。如果只删除私有镜像仓库中的镜像则设置–all=false |
–certificate-authority | 访问私有镜像仓库的证书,openshift中的路径在master节点中的/etc/origin/master/registry.crt。如果是在集群中的master节点执行命令,这个参数不需要添加 |
–confirm | 确认执行,如果不加只是进行检查演练 |
–force-insecure | 强制使用不安全的连接,不作证书检查 |
–keep-tag-revisions= |
默认:3,为每个ImageStream中的每个Tag保留N个镜像 |
–keep-younger-than= |
默认:60m,不清理创建时间低于duration时间内的镜像,也不清理任何创建时间低于duration时间的对象引用的镜像 |
–prune-over-size-limit | 清理同一个项目下超过指定LimitRanges的镜像,该先项不能与–keep-tag-revisions和–keep-younger-than同时使用 |
–registry-url | 私有镜像链接,如果是在集群中的master节点执行命令,这个参数不需要添加 |
使用
--keep-tag-revisions
与--keep-younger-than
来清理镜像,以下情况对应的镜像不会被清理
- 创建时间在
--keep-younger-than
指定的时间以内的所有Pod - 创建时间在
--keep-younger-than
指定的时间以内的所有ImageStream - 所有正在运行的Pod
- 所有状态为pending状态的Pod
- 所有的replication controllers
- 所有的build configurations
- 所有的builds
- ImageStream的状态items下最近的
--keep-tag-revisions
镜像
使用
--prune-over-size-limit
清理超过指定Limit的镜像,以下情况下指向的镜像不会清理
- 所有正在运行的Pod
- 所有状态为pending状态的Pod
- 所有的replication controllers
- 所有的build configurations
- 所有的builds
注意:以下情况并不会真正删除镜像
- 手动删除image,这只会删除etcd中的数据,不会删除私有仓库中的镜像
1
oc delete image <sha256:image-id>
oc adm prune用来清理deployments与builds
当然oc adm prune
并不仅仅只是用于清理镜像,它还用来清理deployments与builds
1 | oc adm prune deployments/builds [<options>] |
options说明
参数 | 说明 |
---|---|
–confirm | 确认执行,如果不加只是进行检查演练 |
–orphans | 清理所有的deploymentconfig/buildconfig不存在的deployment/build |
–keep-complete= |
默认:5,保留最近N个成功的deployment/build |
–keep-failed= |
默认:1,保留最近N个出错的deployment/build |
–keep-younger-than= |
默认:60m,不清理创建时间低于duration时间内的deployment/build |
实例:清理deployments/builds
1 | oc adm prune deployments --orphans --keep-complete=5 --keep-failed=1 --keep-younger-than=60m --confirm |
定时清理,做到永无后患
1 | cat cleanregistry.sh |
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论