본문 바로가기
INFRA/DevOps

[K8S] containerd 란

by it-zero 2022. 6. 16.

안녕하세요. 막내즈입니다~!~!!

오늘은 쿠버네티스에서 필요한 containerd에 대해서 알아보도록 하겠습니다 !!

 

Containerd 란?

containerd는 고수준 컨테이너 런타임(High-level Container Runtime)으로서, 컨테이너를 실행하기 위한 여러 OS의 syscall들을 추상화하여, 컨테이너를 사용하는 시스템이 커널에 직접 접근하지 않고도 runC와 같은 저수준 컨테이너 런타임을 관리할 수 있습니다. 그 밖에도 컨테이너 이미지를 실행/관리하고 컨테이너들의 수명주기 관리, 오버레이 파일시스템과 같은 Graphdriver가 작동하는 방식을 정의하는 등 여러 가지 역할을 하고 있습니다.

 

CONTAINERD - KUBERNETES 표준 컨테이너 런타임

containerd는 Docker 사에서 moby project 와 함께  발표하여  CNCF 에 기증한  오픈소스 입니다.

moby project는 Docker 사에서 2017 년에 발표 한 오픈소스 소프트웨어  프로젝트로서  Docker를  구성하는 기능들 중에 일부를 공개한 것입니다.

Containerd는 Kubernetes의 하이 레벨 런타임 표준인 CRI 런타임으로  현재는 CRI-O 와 함께 두 가지 구현체가 있습니다.

컨테이너 기술로 주목받은 Docker 사는 2016년 12월 컨테이너 런타임 부분을

독립적인 오픈 소스 프로젝트인 “containerd” 로 분리하여 마이크로 소프트, Google, AWS, IBM 등과 공동으로 개발하기로 발표하였습니다.

이것은 Docker 의해 빠르게 확산되기 시작한 컨테이너형 가상화 환경에서 컨테이너 런타임을 특정 벤더에 의존하지 않고 중립적인 입장에서 컨테이너 표준인 OCI (Open Container Initiative) 에 기준으로 구현하는 것을 목적으로 합니다.

그 3 개월 후 2017 년 3 월에는 containerd 오픈 소스 프로젝트 CNCF (Cloud Native Computing Foundation)에 기증받아 2017 년 12월 버전 1.0 을 출시하였습니다 .


Containerd는 컨테이너를 실행하고 노드에서 이미지를 관리하는 데 필요한 최소한의 기능 세트를
제공하는 OCI 호환 코어 컨테이너 런타임 중 하나입니다.


 

KUBERNETES 와 CONTAINERD 통합 아키텍처의 발전

일반적으로 Kubernetes로 구축하는 클러스터에서는 Docker를 이용하여 컨테이너를 실행합니다.

이때 Kubernetes과 Docker 사이에서는 Kubernetes에서 표준화 된 API 인 CRI (Container Runtime Interface) 에 의해 교환이 이루어집니다.

그러나 Docker는 현재 CRI를 기본적으로는 지원하지 않기 때문에 Kubernets과 Docker는 “dockershim”라는 다리를 통해 교환이 이루어지고 있습니다.


DOCKER 와의 성능 비교

 

성능 향상은 containerd1.1 릴리스에서 핵심 항목 중 하나였습니다. 성능은 포드 시작 지연 (Pod startup latency) 와 자원사용부분에서 최적화하였습니다.

다음 결과는 containerd1.1과 Docker 18.03 CE를 비교 한 것입니다.

containerd1.1은 containerd에 내장 된 CRI 플러그인을 사용합니다. Docker 18.03 CE 통합은 dockershim을 사용합니다.


왜 Kubernetes는 Container Runtime으로 널리 잘 사용되던 Docker를 지원 중단하는 것일까요?

Docker는 하나의 "플랫폼"으로서 containerd에서 제공하지 않는 Network, 빌드 등 여러가지 기능들을 쉽게 사용할 수 있도록 좀더 사용자(user) 친화적인 UX를 제공하고 있는데요.

 

굳이 Docker를 사용할 필요가 없는 Kubernetes.

Docker는 이미 CRI를 제공하는 containerd를 기반으로 하고 있습니다. 그리고 Kubernetes에서는 이미 containerd를 컨테이너 런타임으로 사용할 수 있도록 제공하고 있으며, 기존에 Docker를 컨테이너 런타임으로 사용하더라도 containerd를 컨테이너 런타임으로 사용하는 데 있어서 문제가 없습니다. 때문에 Docker를 지속적으로 지원하는 것은 비효율적이고 불필요하다고 판단한 것입니다.

 

 


출처 : http://www.opennaru.com/kubernetes/containerd/

https://blog.hyojun.me/5

 

'INFRA > DevOps' 카테고리의 다른 글

[Docker] Docker container 생성  (0) 2022.06.21
git과 github이란?  (0) 2022.06.20
[Docker] Docker Engine 설치 실습  (0) 2022.06.14
Service - 2  (0) 2022.06.13
IaC 별 역할과 Terraform, Ansible에 대해서 알아봅시다  (0) 2022.06.10

댓글