IT/containerd

[containerd] containerd를 CRI 런타임으로 하는 Kubernetes 클러스터를 구축해보자

wookiist 2021. 6. 19. 13:29

Prologue

사내에서 테스트 용도로 사용할 쿠버네티스 클러스터가 필요해서 급하게 VM을 만들고 구축을 하려던 참이었습니다. 이전에 올렸던 글에서 소개드린 것처럼, 1.20 릴리즈부터는 Docker가 Deprecated 되었다는 것이 생각나서, 이참에 containerd로 클러스터를 구축해보자는 생각이 들어 이렇게 진행하게 되었습니다.

본 포스트에서는 Ubuntu 18.04 위에서 containerd를 설치합니다. Kubernetes 클러스터 구축 과정은 별도의 포스트로 다룰 예정이니 참고해주세요! 그리 어렵지 않으니 쉽게 따라하실 수 있습니다.

Kubernetes 클러스터 구축 과정을 다룬 포스트가 올라왔습니다. 여기를 참조해주세요!

containerd 설치를 위한 사전 작업

우선 containerd를 CRI 런타임으로 활용하려면 몇 가지 필요한 사전 작업이 있습니다. Kubernetes 공식 문서에서 소개하는 방법입니다.

참고 : https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd

$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

# 필요한 sysctl 파라미터를 정의합니다.
# 이 파라미터는 재시작하더라도 그대로 유지됩니다.
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 시스템을 재시작하지 않고 sysctl 파라미터를 반영하기 위한 작업입니다.
$ sudo sysctl --system

containerd 설치

사전 작업이 마무리 되었다면, 본격적으로 containerd를 설치해볼 차례입니다. 사실 containerd는 Docker를 설치하게 되면 자연스럽게 함께 설치하게 되는데요, 이는 Docker의 컨테이너 런타임이 containerd이기 때문입니다. 짤막하게 설명드리자면, Docker는 containerd를 사용자 입장에서 더 편리하고 쉽게 상호 작용할 수 있도록 UX를 개선한 기술 스택입니다. (참고)

containerd를 설치하는 과정은 Docker를 설치하는 과정에 포함되므로, 다음의 내용을 따라가시면 됩니다.

본 포스트에선 Ubuntu 18.04를 사용하고 있으므로, Ubuntu 설치 과정을 참고하여 진행하겠습니다.

참고 : https://docs.docker.com/engine/install/#server

# HTTPS를 활용해 저장소에 접근하기 위해 다음의 패키지를 설치합니다.
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Docker의 공식 GPG 키를 시스템에 추가합니다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Docker를 **stable** 버전으로 설치하기 위해 아래의 명령을 내립니다.
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 새로운 저장소가 추가되었으므로, 업데이트를 합니다.
$ sudo apt-get update

# 이제 containerd.io를 설치합니다.
# 여담으로 docker를 설치하는 경우라면, 
# 아래 과정에 docker-ce, docker-ce-cli를 추가 설치해주면 됩니다.
$ sudo apt-get install containerd.io

containerd 설정 작업

containerd를 실행하기 전에 containerd의 기본 설정을 정의해줍니다. containerd config default 를 수행하면 기본적으로 제공하는 설정값들을 얻을 수 있습니다. tee 명령어를 통해 화면으로도 출력하고, config.toml 파일로도 저장합니다.

$ sudo mkdir -p /etc/containerd
$ containerd config default | sudo tee /etc/containerd/config.toml

systemd를 cgroup driver로 사용하기

systemd를 cgroup driver로 사용하려면 /etc/containerd/config.toml에 다음 설정을 추가합니다. 참고로, 아래 설정은 config.toml 파일에 사전 정의되어 있지 않으니 직접 추가하셔야 합니다.

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

위 과정을 잘못 수행하는 경우 정상적으로 containerd가 실행되지 않습니다. (참고) 제 경우엔 이미 config.toml에 정의되어 있던 systemd_cgroup 이라는 필드를 고쳤는데, 그대로 뻗어버리더군요. 정확하게 위의 설정대로 추가해주셔야 합니다.

containerd 재시작

위 단계를 모두 마쳤다면 이제 containerd를 재시작할 차례입니다. 아래 명령어로 containerd를 재시작합니다.

$ sudo systemctl restart containerd

Kubernetes 설치

본 내용은 별도의 포스트에서 다룹니다. 빠른 시간 내에 포스트하여 링크를 추가하겠습니다 🙂

참고

마무리

여기까지 따라오시느라 고생이 많으셨습니다. 만약 이 튜토리얼이 도움이 되셨다면 글 좌측 하단의 하트❤를 눌러주시면 감사하겠습니다.

혹시라도 튜토리얼에 이상이 있거나, 이해가 가지 않으시는 부분, 또는 추가적으로 궁금하신 내용이 있다면 주저 마시고 댓글💬을 남겨주세요! 빠른 시간 안에 답변을 드리겠습니다 😊

반응형