[kubernetes] containerd 설치하기
Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너 오케스트레이션 도구입니다.
Kubernetes에서의 containerd는 컨테이너를 실행하고 관리하는 역할을 하는 컨테이너 런타임으로, 컨테이너의 라이프사이클(생성, 실행, 종료)을 처리합니다. Kubernetes는 CRI(Container Runtime Interface)를 통해 containerd와 통신하여 파드 내 컨테이너를 조정하고 상태를 모니터링합니다.
Kubernetes 를 사용하기 전 containerd를 설치하고 확인하는 것을 테스트 해보도록 하겠습니다.
설치
containerd 설치 작업은 Rocky Linux 9.4 버전에서 테스트를 진행했습니다.
containerd는 github으로 프로젝트가 관리되고 있습니다.
containerd의 최신 릴리즈 노트를 확인 후 설치하고자 하는 버전 및 OS에 맞는 패키지를 wget 명령어로 다운로드 받습니다.
# wget https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-amd64.tar.gz
--2024-09-05 08:22:56-- https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-amd64.tar.gz
Resolving github.com (github.com)... 20.200.245.247
Connecting to github.com (github.com)|20.200.245.247|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/46089560/4cdd822a-9a57-4fde-a891-e5bb5e3693a8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240904%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240904T232257Z&X-Amz-Expires=300&X-Amz-Signature=66ac189261e5205e2013370f0428faf9020156f0beaf112e8f8ec82714b1bd4d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=46089560&response-content-disposition=attachment%3B%20filename%3Dcontainerd-1.7.21-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream [following]
--2024-09-05 08:22:57-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/46089560/4cdd822a-9a57-4fde-a891-e5bb5e3693a8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240904%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240904T232257Z&X-Amz-Expires=300&X-Amz-Signature=66ac189261e5205e2013370f0428faf9020156f0beaf112e8f8ec82714b1bd4d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=46089560&response-content-disposition=attachment%3B%20filename%3Dcontainerd-1.7.21-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 47904009 (46M) [application/octet-stream]
Saving to: ‘containerd-1.7.21-linux-amd64.tar.gz’
containerd-1.7.21-linux-amd64. 100%[===================================================>] 45.68M 10.6MB/s in 4.3s
2024-09-05 08:23:02 (10.6 MB/s) - ‘containerd-1.7.21-linux-amd64.tar.gz’ saved [47904009/47904009]
패키지를 /usr/local
경로에 압축 해제합니다.
tar Cxzvf /usr/local containerd-1.7.21-linux-amd64.tar.gz
# tar Cxzvf /usr/local containerd-1.7.21-linux-amd64.tar.gz
bin/
bin/ctr
bin/containerd
bin/containerd-shim-runc-v2
bin/containerd-shim-runc-v1
bin/containerd-shim
bin/containerd-stress
systemd를 통해 containerd를 시작하기 위해 containerd.service
파일을 다운로드 후 systemd 서비스 유닛 파일을 저장하는 /usr/local/lib/systemd/system/
경로에 추가합니다.
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -P /usr/local/lib/systemd/system/
# wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -P /usr/local/lib/systemd/system/
--2024-09-05 08:25:40-- https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1251 (1.2K) [text/plain]
Saving to: ‘/usr/local/lib/systemd/system/containerd.service’
containerd.service 100%[===================================================>] 1.22K --.-KB/s in 0s
2024-09-05 08:25:40 (34.1 MB/s) - ‘/usr/local/lib/systemd/system/containerd.service’ saved [1251/1251]
systemctl
명령어를 사용하여 데몬 리로드 및 containerd를 시작합니다.
# systemctl daemon-reload
# systemctl enable --now containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/local/lib/systemd/system/containerd.service.
*** 2024-10-21 추가
Kubernetes 노드가 systemd 기반으로 관리되지만 containerd가 cgroupfs를 사용하면, 두 가지 cgroup 관리자가 충돌할 수 있습니다. 이로 인해 성능 저하, 리소스 관리 실패, 컨테이너의 불안정한 상태 등이 발생할 수 있으므로 systemd 기반의 cgroup 드라이버를 사용하도록 설정을 변경합니다.
우선 runc를 사용하여 systemd 기반의 cgroup-을 사용할 수 있도록 runc를 설치합니다.
containerd 설정 파일을 만든 후 SystemdCgroup 옵션을 true로 변경합니다.
containerd를 재시작 후 적용합니다.
# containerd config default | tee /etc/containers/config.toml
# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containers/config.toml
# systemctl restart containerd
해당 설정 적용 이후에 kubernetes 설치 시 충돌 관련 오류가 발생하지 않습니다.
설치 확인
여러 명령어를 사용하여 containerd가 정상적으로 설치되고 구동 중인지 확인합니다.
systemctl
명령어를 사용하여 containerd 서비스 데몬의 상태를 확인합니다.
# systemctl status containerd
● containerd.service - containerd container runtime
Loaded: loaded (/usr/local/lib/systemd/system/containerd.service; enabled; preset: disabled)
Active: active (running) since Thu 2024-09-05 08:26:51 KST; 9s ago
Docs: https://containerd.io
Process: 96710 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 96711 (containerd)
Tasks: 13
Memory: 23.4M
CPU: 191ms
CGroup: /system.slice/containerd.service
└─96711 /usr/local/bin/containerd
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084327200+09:00" level=info msg="Start subscribing>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084492500+09:00" level=info msg="Start recovering >
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084697700+09:00" level=info msg="Start event monit>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084760100+09:00" level=info msg="Start snapshots s>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084804600+09:00" level=info msg="Start cni network>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.084843100+09:00" level=info msg="Start streaming s>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.085571800+09:00" level=info msg=serving... address>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.085782700+09:00" level=info msg=serving... address>
Sep 05 08:26:51 K8S-CN-001 containerd[96711]: time="2024-09-05T08:26:51.086589400+09:00" level=info msg="containerd succes>
Sep 05 08:26:51 K8S-CN-001 systemd[1]: Started containerd container runtime.
containerd
명령어를 사용하여 containerd 버전을 확인합니다.
containerd --version
# containerd --version
containerd github.com/containerd/containerd v1.7.21 472731909fa34bd7bc9c087e4c27943f9835f111
containerd 소켓이 정상적으로 생성되었는지 확인합니다.
kubernetes 에서는 해당 경로의 소켓을 설정하여 컨테이너 런타임을 설정할 수 있습니다.
# ls -al /run/containerd/containerd.sock
srw-rw----. 1 root root 0 Sep 5 08:26 /run/containerd/containerd.sock
Rocky Linux 9.4 및 기타 OS에서 containerd를 설치하여 kubernetes에서 컨테이너 런타임으로 사용할 수 있습니다.
먼저, GitHub에서 최신 버전의 containerd 패키지를 다운로드하고, /usr/local 경로에 압축을 풀어 설치를 진행합니다.
그 후, containerd.service 파일을 /usr/local/lib/systemd/system/ 경로에 추가하고, systemctl을 사용해 데몬 리로드 후 containerd를 활성화합니다.
설치 후, systemctl status 및 containerd --version 명령어를 통해 containerd가 정상적으로 구동 중인지 확인할 수 있습니다.
지금까지 containerd 설치 및 설치 방법을 간단히 알아보는 시간을 가졌습니다....! 끝...!
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
[Reference]
https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#containerd
https://github.com/containerd/containerd/blob/main/docs/getting-started.md
'kubernetes' 카테고리의 다른 글
[kubernetes] kubeadm init 클러스터 구성하기 (0) | 2024.10.22 |
---|---|
[kubernetes] kubeadm, kubelet, kubectl 설치하기 (0) | 2024.09.25 |
[kubernetes] kubeadm init "found multiple CRI endpoints on the host" 오류 (0) | 2024.09.19 |
[kubernetes] runc 설치하기 (0) | 2024.09.13 |
[kubernetes] CRI-O 설치하기 (0) | 2024.09.09 |