컨테이너 기술의 발전으로 인해, 많은 기업과 개발자들이 Podman과 CRI-O를 사용하여 컨테이너를 관리하고 있습니다. 이 두 도구는 Docker와 유사한 기능을 제공하지만, 각기 다른 방식으로 컨테이너를 처리하고 관리합니다. 하지만 장기간 운영하면서 오래된 컨테이너들이 쌓이면 시스템 리소스가 낭비될 수 있습니다. 이를 방지하기 위해 오래된 컨테이너를 자동으로 삭제하는 정책을 설정하는 것이 중요합니다.
1. Podman의 오래된 컨테이너 자동 삭제
Podman은 Docker와 유사한 CLI(Command Line Interface)를 제공하며, rootless 방식으로 컨테이너를 실행할 수 있다는 장점이 있습니다. Podman은 컨테이너를 관리하는 데 있어 다양한 방법을 제공하며, 오래된 컨테이너를 자동으로 삭제하는 정책을 적용할 수 있습니다.
1.1. Podman에서 오래된 컨테이너 자동 삭제
Podman에는 podman system prune 명령어를 사용하여 불필요한 리소스를 정리할 수 있습니다. 이 명령어는 중지된 컨테이너, 사용되지 않는 이미지, 빌드 캐시 등을 삭제할 수 있습니다.
podman system prune -a
- -a 옵션: 모든 중지된 컨테이너 및 사용되지 않는 이미지를 삭제합니다.
- --volumes 옵션: 사용되지 않는 볼륨도 함께 삭제하려면 이 옵션을 추가할 수 있습니다.
자동화된 정책을 설정하려면 cron job이나 systemd timer를 사용하여 정기적으로 해당 명령어를 실행하도록 설정할 수 있습니다.
1.2. cron job을 이용한 자동 삭제 설정
Podman에서 오래된 컨테이너를 정기적으로 삭제하려면 cron을 사용하여 주기적으로 podman system prune 명령어를 실행할 수 있습니다. 예를 들어, 매일 자정에 자동으로 오래된 컨테이너를 삭제하도록 설정하려면 다음과 같이 crontab에 작업을 추가합니다.
crontab -e
그리고 다음 항목을 추가합니다:
0 0 * * * /usr/bin/podman system prune -a -f
이렇게 하면 매일 자정에 Podman이 자동으로 모든 중지된 컨테이너 및 사용되지 않는 이미지를 삭제합니다.
2. CRI-O의 오래된 컨테이너 자동 삭제
CRI-O는 Kubernetes와 통합되어 컨테이너를 관리하는 데 특화된 도구입니다. CRI-O는 Kubernetes의 Container Runtime Interface (CRI) 구현체로, Kubernetes와 원활하게 통합되어 컨테이너 실행, 이미지 관리 등을 처리합니다. CRI-O에서 오래된 컨테이너를 자동으로 삭제하는 방법은 다음과 같습니다.
2.1. CRI-O에서 오래된 컨테이너 삭제
CRI-O는 기본적으로 오래된 컨테이너나 이미지를 자동으로 삭제하는 기능을 제공하지 않지만, 관리자가 직접 관리해야 합니다. CRI-O에서는 crictl이라는 CLI 도구를 제공하여 컨테이너를 관리할 수 있습니다. crictl을 사용하면 실행 중이거나 중지된 컨테이너를 쉽게 확인하고 삭제할 수 있습니다.
crictl ps -a # 모든 컨테이너 목록 조회
crictl rm <container_id> # 특정 컨테이너 삭제
2.2. CRI-O에서 자동 삭제를 위한 스크립트 작성
CRI-O에서는 containerd를 기반으로 컨테이너를 관리하므로, 오래된 컨테이너를 삭제하기 위한 자동화 스크립트를 설정할 수 있습니다. 이를 위해서는 일정 시간 이상 사용되지 않은 컨테이너를 자동으로 삭제하는 스크립트를 작성할 수 있습니다.
다음은 오래된 컨테이너를 삭제하는 간단한 Bash 스크립트 예시입니다:
#!/bin/bash
# 30일 이상된 컨테이너 목록을 가져옵니다.
old_containers=$(crictl ps -a --since 720h | awk '{print $1}' | tail -n +2)
# 오래된 컨테이너 삭제
for container in $old_containers; do
crictl rm $container
done
이 스크립트를 주기적으로 실행하도록 cron이나 systemd timer를 사용할 수 있습니다.
2.3. containerd의 컨테이너 가비지 수집
CRI-O는 containerd를 사용하여 이미지를 관리하고 있습니다. containerd는 가비지 컬렉션(Garbage Collection, GC)을 사용하여 오래된 이미지나 컨테이너를 정리할 수 있습니다. 이를 통해 자동으로 사용되지 않는 리소스를 제거할 수 있습니다. containerd에서 가비지 컬렉션을 활성화하려면 다음과 같이 설정할 수 있습니다.
containerd config default > /etc/containerd/config.toml
그 후, config.toml 파일에서 [gc] 섹션을 수정하여 자동으로 가비지 컬렉션을 실행할 수 있습니다.
[gc]
# 설정을 통해 자동 수집 주기 조정
# 예시: 매일 가비지 컬렉션 실행
interval = "24h"
'DevOps > Container' 카테고리의 다른 글
[Container] 호스트 디렉토리 마운트 시 Linux과 Mac 환경의 차이점 (0) | 2024.10.08 |
---|---|
[Container] 폐쇄망 환경에서 Docker 설치하는 방법 (3) | 2024.09.29 |
[Container] 컨테이너 사용자 설정 및 권한 (0) | 2024.09.14 |