Containerd

개요


쿠버네티스에서 많이 쓰이는 컨테이너 런타임 중 하나다.
대중적으로 활용되는데, EKS에서도 활용되고 kubeadm도 기본적으로는 이 녀석을 설치해준다.
2019년에 Prometheus, CoreDNS와 더불어 CNCF 졸업 작품이 되었다.


CRI 스펙을 준수하고 있기 때문에, kubelet이 이를 이용하여 컨테이너를 생성하고 관리할 수 있다.

이 친구들은 문서 관리하다 귀찮았는지 모든 문서를 깃헙으로 올려버렸다..
덕분에 문서를 어떻게 봐야할지 아주 난감한 녀석..

구조


내부적으로는 이렇게 생겼다고 한다.
OS 단의 OCI를 준수하는 런타임을 또 활용한다.
기본적으로 runc를 활용하고 있다고 한다.
(사실 그래서 CRI-O랑 유의미한 성능 차이는 없다고 함)

파일 구조

containerd는 파일시스템 상으로 두 가지 디렉토리를 분리하여 사용한다.

root

image.png
영구적으로 남는 데이터들을 보관하는 영역이다.
스냅샷, 메타데이터, 이미지 등이 보관되는 장소이다.
플러그인들도 여기에 보관되며 각자 독립적인 디렉토리로 관리된다.

state

image.png
여기는 컨테이너가 실행될 때만 생기는 일시적인 데이터들이 보관되는 영역이다.
사진처럼 컨테이너 thin layer가 여기에 보관된다.
또 소켓, PID, 마운트 포인트 등의 정보들이 여기에 담긴다.

설정

version = 2

# persistent data location
root = "/var/lib/containerd"
# runtime state information
state = "/run/containerd"
# set containerd's OOM score
oom_score = -999

# grpc configuration
[grpc]
  address = "/run/containerd/containerd.sock"
  # socket uid
  uid = 0
  # socket gid
  gid = 0

# debug configuration
[debug]
  address = "/run/containerd/debug.sock"
  # socket uid
  uid = 0
  # socket gid
  gid = 0
  # debug level
  level = "info"

# metrics configuration
[metrics]
  # tcp address!
  address = "127.0.0.1:1234"

이 친구의 모든 설정은 /etc/containerd/config.toml에 해주면 된다.
상단에 root, state의 장소를 지정하는 것도 보인다.
어떤 곳에서 disk io가 많이 일어나는지 궁금해서 3주차 - 스토리지#containerd는 어디에서 disk io가 많이 일어나는가에서 탐구를 진행했다.

관련 문서

EXPLAIN - 파생 문서

이름1related생성 일자
파드 마운팅 recursiveReadOnly스토리지2025-02-27 16:08

기타 문서

Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완
이름1코드타입생성 일자
3W - EFS 드라이버, 인스턴스 스토어 활용Z8published2025-02-22 04:27

참고