- 1、进入镜像仓库所在容器,执行下面的命令
mkdir -p /etc/docker/registry
cat <<EOF > /etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
EOF
- 2、在K8s的另外一个容器内执行如下操作:
创建shell脚本,并且执行它;脚本含义:排除两个基础镜像后,其他的全部删除
#!/bin/bash
REGISTRY="http://docker-registry-service.devops-tools.svc.cluster.local:5000"
REPO="spider"
KEEP=("minibase" "dappradar8")
# 获取所有 tags
ALL_TAGS=$(curl -s "${REGISTRY}/v2/${REPO}/tags/list" | jq -r '.tags[]')
for TAG in $ALL_TAGS; do
# 如果是保留的 tag,则跳过
if [[ " ${KEEP[*]} " == *" $TAG "* ]]; then
echo "Skipping tag: $TAG"
continue
fi
# 获取 digest
DIGEST=$(curl -sI -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
"${REGISTRY}/v2/${REPO}/manifests/${TAG}" | grep -i Docker-Content-Digest | awk '{print $2}' | tr -d $'\r')
if [[ -n "$DIGEST" ]]; then
# 删除 tag(实际上是删除 digest)
echo "Deleting tag: $TAG -> digest: $DIGEST"
curl -X DELETE "${REGISTRY}/v2/${REPO}/manifests/${DIGEST}"
else
echo "Failed to get digest for tag: $TAG"
fi
done
- 3、垃圾回收,进入镜像仓库所在的容器,执行下面的命令
第2步的删除操作,还得需要一个垃圾回收才能真正的释放磁盘空间
registry garbage-collect /etc/docker/registry/config.yml
- 4、校验磁盘空间是否已经被释放
在镜像仓库的容器内执行下面的命令
du -sh ./*
背景信息:
部署镜像仓库的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-registry
spec:
replicas: 1
selector:
matchLabels:
app: docker-registry
template:
metadata:
labels:
app: docker-registry
spec:
containers:
- name: registry
image: registry
env:
- name: bitget_logs_spider
value: "stdout"
- name: REGISTRY_STORAGE_DELETE_ENABLED
value: "true"
resources:
limits:
memory: "3000Mi"
requests:
memory: "3000Mi"
volumeMounts:
- name: registry-storage
mountPath: /var/lib/registry
volumes:
- name: registry-storage
persistentVolumeClaim:
claimName: docker-pv-claim
Top comments (0)