Kubernates) MSA 쿠버네티스 적용기-1(Containerd)

박우영·2023년 6월 18일
0

프로젝트 설정

목록 보기
2/2

개요

메모리 이슈 에 정리되어 있는 내용처럼 Free tier 를 사용하지않고 램4기가 cpu2 개의 클라우드 서비스를 이용 하고있었지만 메모리이슈가 발생하고 있습니다. 적은 사양에 너무 많은 메모리를 사용하기 때문입니다. 따라서 이러한 메모리를 효율적으로 관리할 필요성을 느꼈고, JVM HEAP 설정으로도 어느정도 조율이 가능 했지만 더 많은 서비스가 생기고 그때마다 설정을 다시 하고.... 이것이 반복된다면 결국 성능이 잘 나오지 않을것입니다.
따라서 이러한 MicroService 들을 orchestration 할 필요가 있는데요 AWS 에선 구글 계정만 있다면 free tier를 이용 할 수 있습니다. 따라서 생성된 free tier(워커노드) 들에게 임무를 분담시키는 방향으로 하고자 합니다.

Docker 지원중단?

우리는 컨테이너 라고하면 = docker 가 떠오르는 것처럼 많이 사용하는데요 하지만 Docker 또한 이름일뿐 다양한 컨테이너들이 있습니다. Kubernates 는 구글에서 만들었지만 CNCF 사에서 "벤더락" 을 걱정해 docker 에 종속되지않기 위해 쿠버네티스에서 CRI 를 구현했는데 이를 따르지 않은것 입니다.

대신 프로젝트에서 containerd 를 사용하여 CRI 를 구현하고 컨테이너를 가동 시킬 예정입니다.

따라서 기존에 CI/CD 에서 docker run 을 사용하지 않고

  • docker 이미지를 빌드 후 hub에 퍼블리싱
  • 쿠버네티스를 이용해 containerd 로 컨테이너 실행

와 같이 구현할 예정입니다. 마스터 노드는 지금 사용중인 4기가 램 2cpu 를 그대로 사용할 예정이고 4기가 램 2cpu 를 1개더 만들고 나머지는 free tier 로 대체할 예정입니다.

Containerd 의 좀더 자세한 설명

Containerd는 OCI Image Spec 및 OCI Runtime Spec(Open Container Initiative)을 지원하는 고수준 컨테이너 런타임입니다. Containerd는 컨테이너 배포 및 수명 주기를 위한 단순성, 견고성 및 이식성에 중점을 두고 만들어졌습니다. Docker 및 Kubernetes와 같은 최신 시스템에 쉽게 내장할 수 있도록 설계되었습니다. 내부적으로 새로운 Docker 버전은 Containerd를 사용하여 컨테이너 수명 주기를 관리합니다.


Containerd 설치

먼저 저는 ubuntu 22.04 에서 진행 하였고 docker 가 설치되어있습니다.

containerd 설치

sudo apt update
sudo apt install containerd.io

실행

sudo systemctl start containerd
sudo systemctl enable containerd

서비스 확인

sudo systemctl status containerd

containerd 기본 설정파일 생성

containerd config default > /etc/containerd/config.toml

config 설정

vim /etc/containerd/config.toml

다음과 같이 SystemdCgroup = true 로 변경

CNI 플러그인 다운

wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz

디렉터리 "/opt/cni/bin" 생성후 CNI 플러그인을 추출

mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz

재시작

systemctl restart containerd

이 시점에서 Containerd 컨테이너 런타임은 이제 CNI 플러그인 및 SystemdCgroup과 함께 실행됩니다.


nerdctl을 통해 Containerd와 통신

ContaiNERD CTL은 Containerd 컨테이너 런타임용 컨테이너를 관리하기 위한 명령줄 도구입니다. Docker용 Docker CLI와 호환되며 "docker" 명령과 동일한 UI/UX를 갖습니다.

wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local/bin nerdctl-0.22.2-linux-amd64.tar.gz

설치 후 위치 확인

which nerdctl

0개의 댓글