[k8s] containerd란? 쿠버네티스와의 관계
Programming

[k8s] containerd란? 쿠버네티스와의 관계

728x90

오랜만에 돌아왔습니다~! 

오늘은 containerd에 대해서 이야기해보려고합니다. 참고로 읽을때는 컨테이너드가 아니라 컨테이너 디(d)로 읽습니다. 여기서 d는 daemon을 뜻합니다.

 

Containerd의 탄생과 배경

Containerd의 탄생 배경은 Docker와 쿠버네티스에 아주 밀접하게 관계가 있기 때문에 이 둘을 먼저 집고 넘어가겠습니다. 

 

Docker

2013년 Docker가 처음 세상에 등장한 이후, IT 업계는 급격한 변화를 겪었습니다. Docker는 애플리케이션 배포 단위를 war, jar, zip에서 Docker 이미지로 바꾸었고, 애플리케이션은 container에서 실행되며 OS에 종속되지 않고 Windows나 Ubuntu 같은 다양한 환경에서 동일하게 동작할 수 있게 되었습니다.

 

Docker의 기본 아이디어는 프로세스와 CPU, memory, disk I/O, network 등의 리소스들을 컨테이너라는 하나의 그룹으로 묶어서 관리하자는 것으로 namespace, cgroup 등 Linux의 여러 커널기능들을 조합하여 만들어졌습니다. namespace는 시스템 리소스(Filesystem, Network 등)의 가상화 및 격리를 가능케하고, cgroups는 컨테이너 안에서 사용할 수 있는 리소스의 양을 제한하는데 쓰입니다.

 

이러한 Docker의 특성 덕분에, 수백에서 수천 대의 서버를 운영하는 환경에서 Docker를 도입하는 사례가 증가했습니다. Docker는 빠르게 업계의 표준 기술 중 하나로 자리 잡았습니다.

 

Kubernetes

Docker의 혁신은 구글 내부에서도 새로운 바람을 불게 했습니다. 바로 대규모의 서비스를 컨테이너로 운영하는 것이었죠. 엄청난 양의 컨테이너를 운영해야하다보니 사람이 관리할 수 있는 영역을 벗어났고 kubernetes라는 컨테이너 오케스트레이션 플랫폼을 만들었죠.

 

Containerd

Docker와 Kubernetes는 이렇게 나란히 성공신화를 써내려가고 있었는데.. 문제가 있었습니다.

 

[Docker에 대한 높은 의존도]

Kubernetes도 결국 container를 운영해야하는데 Docker 엔진을 사용해서 container 운영을 하다보니 Docker에 상당히 의존적이었습니다. Docker 엔진 자체 버전이 올라가거나 변경이 생겼을 때 kubenetes에도 고스란히 영향이 전파되었던거죠.

 

[쓸데없이 무거운 라이브러리]

또한 초기 Docker는 하나의 완성된 컨테이너 사용자경험을 만드는 것에 집중하다보니 Docker Engine이라는 하나의 패키지에 API, CLI, 네트워크, 스토리지 등 여러 기능들을 모두 담게 되었습니다. 그렇다 보니 kubnernetes에서 Docker Engine을 사용하면 불필요하게 모든게 포함된 무거운 라이브러리를 사용할 수 밖에 없었습니다.

 

그래서 Docker를 중심으로 구글 등 컨테이너 기술에 관심있는 여러 집단들이 한데 모여 OCI(Open Container Initiative)라는 프로젝트를 시작하여 컨테이너에 관한 표준을 정하는 일들을 시작하게 됩니다. 그리고 Kubernetes에서는 Docker와 무관하게 OCI 표준을 준수하는 어떤 이미지도 실행시킬 수 있는 컨테이너 런타임을 만들기 위한 인터페이스 CRI(Container Runtime Interface)를 제공하게 됩니다.

 

이제 Kubernetes는 Docker로부터 해방되었습니다. 누구든 CRI를 사용하여 컨테이너 런타임을 만들면 우리는 kubernetes cluster node에서 container를 실행시킬 때 해당 컨테이너 런타임을 사용할 수 있습니다.

 

Containerd는 그 중 Docker에서 만든 컨테이너 런타임입니다. 그 외에도 Red Hat, Intel, SUSE, Hyper, IBM 측에서도 CRI-O를 만들었으며 Containerd와 CRI-O 이 두가지 컨테이너 런타임이 현재 가장 널리 사용되고 있습니다.

 

Containerd는 Docker Engine에 기본으로 탑재되어 있어서 지금도 Docker를 사용한다면 내부적으로 사용되는 Container Runtime은 containerd 를 사용하게 됩니다.

 

 

출처:

https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/

https://www.samsungsds.com/kr/insights/docker.html

https://www.docker.com/blog/containerd-vs-docker/

 

728x90

'Programming' 카테고리의 다른 글

[MQ] RabbitMQ 미러링(Mirroring)  (0) 2023.05.01
[MQ] RabbitMQ 클러스터링(Clustering)  (0) 2023.04.28
[클라우드] 오픈스택(OpenStack) 이란?  (0) 2023.04.15
[MQ] RabbitMQ 란?  (0) 2023.04.11
[보안] SHA 암호화 알고리즘  (0) 2022.11.01