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 관련 설정입니다. |