[Jenkins] 디스크 공간 확보하기

CID.Y·2021년 4월 16일
0

알쓸신잡

목록 보기
2/2
post-thumbnail

저장 공간이 부족합니다

우리 팀에서는 CI 도구로 젠킨스를 사용하고 있다.

코드 저장소는 회사에서 제공하는 Git을 사용하고 있으며 feature, pr-head에 대한 테스트 & 빌드를 통과해야 배포될 수 있는 구조로 구성되어 있으며 빌드가 끝나면 추출된 아티펙트를 dockerize 하여 레지스트리에 올린다(push)

디스크 사용량 확인해 주세요

빌드 머신에 하드디스크 공간을 95%나 쓰고있다고 연락이 왔다.

역시나 우연의 일치로 동료분에게 메시지도 왔다.

젠킨스 접속 안되는데요...

확인해 보자


# 디스크 사용량 보기
df -h

# 결과
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  394M  3.5G  11% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda3       199G   190G   9G  96% /
/dev/sda2      1014M  178M  837M  18% /boot
/dev/sda1       200M   12M  189M   6% /boot/efi
tmpfs           779M     0  779M   0% /run/user/1000

하드 디스크 사용량이 아주 빵빵!!!하다. 구글님에게 문의하자

젠킨스 용량 100% 해결하기 글이 보인다
젠킨스 용량 100% 찬 상황 해결하기

job 디스크 사용량 보기

좀더 자세하게 사용 용량을 보여주는 명령이 있으니 한번 확인 해보고

# 디스크 사용량으로 정렬하여 확인
du -hsx * | sort -rh | head -n 10

# 결과
5.7G	workspace
851M	plugins
12.6G   jobs
82M	war
26M	monitoring
18M	org.jenkinsci.plugins.github_branch_source.GitHubSCMProbe.cache
2.4M	updates
1.1M	fingerprints
280K	logs
52K	secrets

음?...

job이 차지하는 공간이 생각보다 적은것 같다.
그래도 경고를 멈추기 위해 수동으로 job(젠킨스 작업 단위)데이터를 지워보자

# 젠킨스 job 생성 구조가 조금 다르다. 블루 오션이라 그런가?
# 올드 버전 데이터를 지우는 거니 자신의 구조에 맞게 지우면 됨
rm -rf /var/{JENKINS_HOME}/*/jobs/*/branches/*/builds/*

다시 확인해 보면

du -hsx * | sort -rh | head -n 10

# 결과
5.7G	workspace
851M	plugins
600M   jobs			# 줄기는 줄었는데.. 
82M	war
26M	monitoring
18M	org.jenkinsci.plugins.github_branch_source.GitHubSCMProbe.cache
2.4M	updates
1.1M	fingerprints
280K	logs
52K	secrets

줄어든 용량이 택도 없다. 이게 아닌가보다

하긴 생각해보니 젠킨스 설정에서 이미 job 관련 보관 개수를 정해 놨기 때문에 그렇게 많은 공간을 사용할 일은 없을 것 같다.

아.. 젠킨스에서 도커 빌드를 하고 있지? 느낌이 온다

도커 이미지 정리하기

도커 이미지를 정리해 보자. prune

# 사용하지 않는 이미지 제거
# https://docs.docker.com/engine/reference/commandline/image_prune/
docker image prune

# 삭제 경고
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

0B? 지워진게 없네..

# 결과
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  394M  3.5G  11% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda3       199G   178G  21G  89% /
/dev/sda2      1014M  178M  837M  18% /boot
/dev/sda1       200M   12M  189M   6% /boot/efi
tmpfs           779M     0  779M   0% /run/user/1000

이미지도 아니라면 이젠 도커 빌드 캐시밖에 범인이 없다.

도커 시스템 정리하기

도커는 레이어 구조로 이미지를 생성하기에 빌드 속도 향상을 위해 캐시를 사용한다
(이 내용은 조만간 정리해야지)

일단 터프한 명령인 system prune + 모두(a) + 강제(f)로 날리자

# 터프한 명령어, 빌드 머신에서 실행중인 컨테이너가 없기에 쿨하게 실행
docker system prune -a -f

WARNING! ThDeleted Images:
untagged: 232123048478.dkr.ecr.ap-northeast-2.amazonaws.com/project:latest
.................................................................................
.................................................................................
.................................................................................
deleted: sha256:06b9a94d7befa1634b382f972c8844e865cd01ef6e9980116c23a1e058ebe451

Deleted build cache objects:
gsltrijb4xgdv4nzbr7coqnvk
g8po53jcf9yzm5jc7x2tt8wrk
e1lzobqbm4jf8u0o1h94gyvoa
srbvq001xgiwebnubac3mvwvu
yj4d9nyqok52c2ba3az4ll6w7
sp8fkw9cxvyy8tzy3afqst1r1
tnnoeywgfv2iipsmh4uos7vgp
vedoju5u92m3vsbly547tlpu1
tuij8wztyklet2914txtg1wx6
uxpdfdhtsunnrvcggqpz1vty5
x23qls4pp7nk89qkyxlcwhrcg
jmu8jeto10dniguyez5m2u7x8
il2relqcrwrzq6q56p2hs41gz
4k59zayzfokydkett6yoiffl6
.........................
.........................

Total reclaimed space: 163GB

엄청나게 많은 빌드 캐시가 쌓여 있었고 제거 되었다고 나왔으니 용량을 확인해 보자

$df -h

# 결과
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  394M  3.5G  11% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda3       199G   15G  185G   8% /
/dev/sda2      1014M  178M  837M  18% /boot
/dev/sda1       200M   12M  189M   6% /boot/efi
tmpfs           779M     0  779M   0% /run/user/1000

사용량이 줄었다.

정리

디스크 사용량의 대부부을 차지하고 있던 녀석은 도커 빌드 캐시였고 이를 삭제하여 다시 평온한 상태를 유지할 수 있게 되었다. 앞으로도 이런 경우가 있다면 다음과 같이 정리해 보자

  1. 빌드 머신의 하드 디스크 사용량이 부족할때는 사용하지 않는 파일을 지우자
  2. 젠킨스의 경우, job에서 생성되는 아티펙트 및 히스토리 데이터를 지우면 용량을 확보할 수 있다.
  3. 빌드 머신에서 도커 이미지를 빌드하는 경우 사용하지 않는 이미지를 제거하면 저장 공간을 확보할 수 있다.
  4. 도커 이미지 빌드 시 속도 향상을 위해 캐시를 사용하는데 이게 생각보다 많은 용량을 차지한다 system prune같은 파괴적 명령을 통해 사용한 캐시를 제거하자. 단 해당 머신이 컨테이너를 운영하는 머신이라면 조심해야 한다
profile
Do Infinity And Beyond

0개의 댓글