install

ContainerD Install


ContainerD 환경구성


# CRI를 사용하기 위한 네트워크 설정
# net.bridge.bridge-nf-call-iptables: 브리징된 네트워크 인터페이스에서 트래픽을 iptables를 통해 필터링 할 수 있도록 허용
# net.bridge.bridge-nf-call-ip6tables: IPv6 네트워크에서도 브리지된 트래픽을 ip6tables를 통해 필터링할 수 있도록 허용
# net.ipv4.ip_forward: IP 포워딩을 활성화
$ cat > /etc/sysctl.d/99-k8s-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF


# 변경사항 적용
$ sysctl --system


# OverlayFS: 파일 시스템을 로드하여 컨테이너의 파일 시스템을 효율적으로 관리
# br_netfilter: 브리지 네트워크 트래픽을 iptables로 전달할 수 있도록 하는 모듈
$ modprobe overlay; modprobe br_netfilter
$ echo -e overlay\\nbr_netfilter > /etc/modules-load.d/k8s.conf


# iptables 백엔드를 iptables-legacy로 전환
# 쿠버네티스는 일부 환경에서 iptables-legacy 백엔드와 더 잘 호환되기 때문에 이를 설정
# iptables-legacy: 전통적인 iptables
# iptables-nft: nftables 기반의 iptables 구현
$ update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).

  Selection    Path                       Priority   Status
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        auto mode
  1            /usr/sbin/iptables-legacy   10        manual mode
  2            /usr/sbin/iptables-nft      20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode


# swap off
$ swapoff -a
$ sed -i '/\/swap.img/s/^/#/' /etc/fstab


# apparmor 프로파일 비활성화
$ apparmor_parser -R /etc/apparmor.d/runc
$ apparmor_parser -R /etc/apparmor.d/crun
$ ln -s /etc/apparmor.d/runc /etc/apparmor.d/disable/
$ ln -s /etc/apparmor.d/crun /etc/apparmor.d/disable/


ContainerD 설치



# ContainerD를 설치합니다.
$ apt -y install containerd

# ContainerD의 디렉터리를 생성합니다.
$ mkdir /etc/containerd

# ContinerD의 기본 설정파일을 생성합니다.
$ containerd config default | tee /etc/containerd/config.toml

# sandbox_image 버전을 설정합니다.
sed -i "s|^\( *sandbox_image *= *\).*|\1\"registry.k8s.io/pause:3.9\"|" /etc/containerd/config.toml

# Cgroup의 사용여부를 수정합니다.
sed -i "s|^\( *SystemdCgroup *= *\).*|\1true|" /etc/containerd/config.toml

# 설정적용
$ systemctl restart containerd

# 설치확인
$ containerd -version
containerd github.com/containerd/containerd 1.7.12

$ systemctl status containerd
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; preset:>
     Active: active (running) since Mon 2024-09-23 09:31:59 UTC; 8min ago
       Docs: https://containerd.io
    Process: 1416 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCC>
   Main PID: 1418 (containerd)
      Tasks: 7
     Memory: 13.3M (peak: 14.9M)
        CPU: 1.004s
     CGroup: /system.slice/containerd.service


container.d config 정리


섹션 설명
disabled_plugins 비활성화된 플러그인 목록을 정의합니다.
imports 가져올 플러그인 목록을 정의합니다.
oom_score OOM(Out-Of-Memory) 점수를 설정하여 우선 순위를 결정합니다.
root Containerd의 루트 디렉토리를 설정합니다.
state 상태 정보를 저장할 디렉토리 위치를 설정합니다.
cgroup cgroup 설정 경로를 지정합니다.
debug 디버깅 설정 (주소, 포맷, 레벨 등)과 관련된 옵션입니다.
grpc GRPC 서버 설정 (소켓 주소, 메시지 크기 제한 등)을 지정합니다.
metrics 메트릭 수집을 위한 설정입니다.
plugins 다양한 Containerd 플러그인의 설정을 정의합니다.
plugins."io.containerd.gc.v1.scheduler" 가비지 컬렉션 스케줄러의 설정입니다.
plugins."io.containerd.grpc.v1.cri" CRI(Container Runtime Interface) 관련 설정입니다.
plugins."io.containerd.grpc.v1.cri".cni CNI(Container Network Interface) 설정입니다.
plugins."io.containerd.grpc.v1.cri".containerd Containerd 자체 설정을 정의합니다.
plugins."io.containerd.grpc.v1.cri".registry 이미지 레지스트리와 관련된 설정입니다.
plugins."io.containerd.runtime.v1.linux" Linux 런타임 설정입니다.
plugins."io.containerd.snapshotter.v1.overlayfs" OverlayFS 스냅샷터 설정입니다.
stream_processors 스트림 프로세서 관련 설정을 정의합니다.
timeouts Containerd 내부에서 다양한 작업의 타임아웃을 정의합니다.
ttrpc TTRPC 관련 설정입니다.
RSS Feed