1. CRI

기본적으로 쿠버네티스는 포드 관리의 역할을 하는 데몬인 kubelet이 명령을 받으면 도커 런타임을 통해 컨테이너가 생성되거나 삭제된다.

그런데 쿠버네티스 내 컨테이너 기술로 도커 이외의 것들도 사용되다보니 컨테이너 런타임에 대한 이슈가 생겼고 해당 컨테이너 런타임마다 kubelet을 수정해야 하는 문제가 생겼다. 그래서 kubelet과 컨테이너 런타임과의 표준을 정하게 되었는데 이것이 CRI(Container Runtime Interface)이다. 이는 컨테이너의 생성, 삭제 등 라이프사이클을 관리하는 스펙으로 gRPC 기반의 API로 플러그인 구조로 추가할 수 있다.

  • Docker : Docker Shim 구현체 제공
  • rtk : rtklet 구현제 제공

따라서 컨테이너 런타임을 교체 가능하게 되었다. CRI 표준을 따른다면 어떤 컨테이너라도 쿠버네티스와 통합 가능하다.


2. OCI

컨테이너 종류가 증가함에 따라 계속 CRI을 구현해야 하는 문제가 생겨 아예 컨테이너 런타임 자체를 표준화하게 된다. 이것이 OCI(Open Container Initiative)으로 Linux Foundation의 지원을 받는 프로젝트이다.

단 이것은 스펙으로 자체 구현체가 있는 것은 아니다.

그래서 현재 쿠버네티스에서 사용 가능한 런타임은 도커, rtk, containerd, CRI-O 등이 있다.

2.1. runc

OCI에는 컨테이너 런타임 환경이 구현해야 하는 사양들(컨테이너 구성, 실행환경, 라이프사이클 정의)과 runc라고 하는 시드 컨테이너 런타임 엔진이 포함되어 있다.

2.2. 이미지

OCI 이미지 형식은 매니패스트, 이미지 인덱스, 파일 시스템 등으로 구성되어 있다.


3. CRI-O

레드햇이 만든 CRI-O는 OCI 컨테이너 런타임으로 도커를 대체하는데 목적이 있다. 2017년 CRI-O 1.0이 출시되었다.