K8S Cluster CICD 배포 (2/3)

Hyor·2024년 9월 9일
post-thumbnail

개요

  • K8S 에 배포를 위하여 Docker image tag명을 변경하면서 배포를 하다보니 많은 이미지들이 쌓이게 되었고 Docker Registry 용량 문제로 image 삭제가 필요해졌습니다. 이를 해결하기위하여 Gitlab-CI를 통해 script를 추가했습니다.

스크립트

현재 사용중인 image tag 구하기

current_image_tag:
    ...생략...
    stage: current_image_tag
    image: bitnami/kubectl:latest
    script:
        - kubectl describe deployment [delpoyment name] -n [namespace] | grep "Image:" | awk '{print $2}' | rev | cut -c 1-8 | rev > current_image_tag.txt
...생략...
  • k8s로 접속하여 현재 Deployment 가 사용중인 image를 current_image_tag.txt 에 저장합니다.

현재 사용중인 image tag를 제외하고 모두 삭제하기

prepare_image_delete:
    ...생략...
    stage: prepare_image_delete
    image: alpine:latest
    script:
        ...생략...
        - curl -s "[url]/tags/list" -u [auth] | grep -o '"tags":\[[^]]*\]' | grep -o '"[^"]*"' | tr -d '"' | tail -n +2  > tags.txt
        - tags=$(cat tags.txt)
        - |
            for TAG in $tags; do
                echo $TAG
                if [[ "$TAG" != ${currentTag} ]]; then
                    DIGEST=$(curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "[url]/manifests/$TAG" -u [auth] | grep Docker-Content-Digest | awk '{print $2}' | tr -d '\r')
                    curl -s -X DELETE [url]/manifests/${DIGEST} -u [auth]
                fi
            done
...생략...
  • 현재 사용중인 image tag를 제외한 모든 tag를 삭제합니다.

GC를 통해 용량 확보하기

docker exec [registry] bin/registry garbage-collect /etc/docker/registry/config.yml

느낀점

  • 작업한 내용을 정리하면서 느꼈지만 script를 나눠서 처리하는것보다 tag list를 가져와서 n개 row까지 자르고 나머지를 삭제하는 로직으로 하였다면 남길수있는 image 갯수를 유연하게 변경이 가능했을텐데 아쉬움이 남는다. 추후에 여유로울때 변경하는 작업을 진행해야겠다.
profile
개발 노트

0개의 댓글