前言
rbd-hub
组件是基于Docker Registry封装。默认rbd-hub
清理策略是清理30天内未使用的镜像,这会使磁盘较小的用户堆积无用的镜像。
注意:无论是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. 清理镜像
2.1 Rainbond v5 版本清理镜像
Rainbond v5 获取 rbd-hub 账号密码
1.获取 repositories 列表
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 * | tr "\n" " "')
2.获取 rbd-hub 的 service IP
hub_svc=$(kubectl get svc rbd-hub -n rbd-system | awk '{print $3}' | grep -v CLUSTER-IP)
3.执行以下命令清理 repositories 的 tag,
docker run --rm registry.cn-hangzhou.aliyuncs.com/zqqq/docker-registry-clean:latest \
-u admin \
-p admin1234 \
-b http://$hub_svc:5000 \
-r $repos_list \
2.2 Rainbond v6 版本清理镜像
Rainbond v6 版本默认账号密码为 admin/admin1234
Rainbond v6 版本 rbd-hub
的数据是存储在 minio
中,因此需要在 minio
的存储桶中获取 repositories 列表。
1.获取 pv 路径
$ kubectl get pv | grep rbd-system/minio | awk '{print $1}' | xargs kubectl get pv -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-585300d9-0cc4-49b4-8d9a-ccac38f02a9c
spec:
......
hostPath:
path: /opt/rainbond/local-path-provisioner/pvc-585300d9-0cc4-49b4-8d9a-ccac38f02a9c_rbd-system_minio-data-minio-0
nodeAffinity:
......
- 172.17.80.60
......
2.进入到 172.17.80.60
节点的 path
+ rbd-hub/docker/registry/v2/repositories
目录下,获取 repositories 列表。
repos_list=$(ls -d * | tr "\n" " ")
3.获取 rbd-hub 的 service IP
hub_svc=$(kubectl get svc rbd-hub -n rbd-system | awk '{print $3}' | grep -v CLUSTER-IP)
4.执行以下命令清理 repositories 的 tag,
docker run --rm registry.cn-hangzhou.aliyuncs.com/zqqq/docker-registry-clean:latest \
-u admin \
-p admin1234 \
-b http://$hub_svc:5000 \
-r $repos_list
3. 垃圾清理
:docker registry API 实际上并没有删除标签或图像,而是将它们标记为以后的垃圾收集。因此,请在rbd-hub内部运行以下内容彻底删除镜像,释放磁盘空间:
kubectl exec -it rbd-hub-xxx -n rbd-system sh
registry garbage-collect /etc/docker/registry/config.yml