默认镜像仓库rbd-hub镜像清理分享

前言

rbd-hub是基于Docker Registry封装

默认rbd-hub清理策略是清理30天内未使用的镜像,这会使磁盘较小的用户堆积无用的镜像。

因此可临时使用脚本来清理无用的镜像。

注意:无论是delete方法调用restful接口,还是registry 自带工具的GC清理,都需要registry开启允许删除功能

!!!删除镜像后不能在组件的构建版本历史中回滚了

一. 开启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个tag

此脚本清理策略是保留镜像最新的两个tag

wget https://storageclass.oss-cn-shanghai.aliyuncs.com/clean_images.sh && sh clean_images.sh

三. 指定仓库清理镜像

指定脚本参数清理镜像

sh clean_images.sh \
-b $hub \
-r $repos \
-u $user \
-p $pass \
-n $pod_name \
-s $namespace
参数说明
-b --hub registry url 可使用 service ip + port
-r --repos registry repos 多个用空格区分,例如:nginx tomcat 。也可以传入存储目录路径
-u --username registry 账号 参考文档获取
-p --password registry 密码 参考文档获取
-n --pod_name registry 的pod名称
-s --namespace registry 所在的命名空间

指定仓库,例子:

sh clean_images.sh \
-b http://10.10.10.10:5000 \
-r nginx tomcat \
-u admin \
-p admin \
-n rbd-hub-85b7b94846-frppq \
-s rbd-system

这里执行会有问题

这里是默认用的nfs存储才是这里,这里的操作就是扫描下仓库名,可以使用:

docker run --rm registry.cn-hangzhou.aliyuncs.com/zqqq/docker-registry-clean:latest -b http://$hub_url:5000 -r $repos_list -u $username -p $password

-b url + port
-r 仓库名 多个用空格区分
-u 账号
-p 密码

kubectl get rainbondcluster -n rbd-system -o yaml|grep username

这个命令也无法获取用户名

repos_list=kubectl exec -it $(kubectl get pod -n rbd-system | grep rbd-hub | awk '{print $1}') -n rbd-system -- /bin/sh -c 'cd /var/lib/registry/docker/registry/v2/repositories/ && ls -d *'

这一行可以修改为这个,比较通用