前言
rbd-hub
组件是基于Docker Registry封装。默认rbd-hub
清理策略是清理30天内未使用的镜像,这会使磁盘较小的用户堆积无用的镜像。
因此需使用 registry-cli 项目来清理镜像。
注意:无论是delete方法调用restful接口,还是registry 自带工具的GC清理,都需要registry开启允许删除功能
!!!删除镜像后不能在组件的构建版本历史中进行回滚
1. 开启hub删除功能
修改rbd-hub环境变量,开启删除功能
添加环境变量 REGISTRY_STORAGE_DELETE_ENABLED=true
kubectl edit rbdcomponent rbd-hub -n rbd-system
spec:
env:
- name: REGISTRY_STORAGE_DELETE_ENABLED
value: "true"
image: registry.cn-hangzhou.aliyuncs.com/goodrain/registry:2.6.2
修改完成后,pod会自动重启。
2. 清理镜像
获取rbd-hub镜像仓库密码,并使用docker运行以下命令
docker run --rm --network host registry anoxis/registry-cli \
-r https://goodrain.me \
-l user:pass \
--delete --num 10 \
--no-validate-ssl
可选参数
参数 | 解释 |
-r | registry镜像仓库访问地址 |
–layers | 列出所有图像、标签和图层 |
-i rbd-gateway | 列出特定图像或图像:标签(本示例中为 ubuntu 和 alpine 的所有标签) |
-l “username”:“password” | 用户名和密码 |
–delete | 删除镜像 |
–delete –num 10 | 设置要保留的标签数量,例如 10 |
–no-validate-ssl | 如果使用带有自签名 ssl 证书的 docker registry,可以禁用 ssl 验证 |
3. 垃圾清理
docker registry API 实际上并没有删除标签或图像,而是将它们标记为以后的垃圾收集。因此,请在rbd-hub内部运行以下内容彻底删除镜像,释放磁盘空间:
kubectl exec -it rbd-hub-xxx -n rbd-system sh
registry garbage-collect /etc/docker/registry/config.yml