Kubernetes

Container Runtime & CRI (Container Runtime Interface)

id1112 2025. 4. 15. 12:19

Container Runtime 과 CRI는 Kubernetes 환경에서 Container 를 실제로 실행하는 역할과 그 실행 방식을 추상화하는 역할을 한다.

1. Container Runtime

컨테이너를 실제로 생성, 시작, 정지, 삭제하는 등의 역할을 수행하는 소프트웨어이다.

일반적으로 사용되는 Container Runtime 에는 Docker , Containerd, CRI - O 등이 있다.

Docker: 한때 가장 널리 사용되었으며, 컨테이너 이미지를 빌드하고 관리하는 도구까지 포함하는 종합 플랫폼.

containerd: Docker의 핵심 구성 요소로 시작되었으나, 독립적인 런타임으로 발전. Docker보다 경량화되어 있고, 컨테이너 실행에 집중되어 있음.

CRI-O: Kubernetes의 CRI(Container Runtime Interface) 표준에 맞춰 설계된 또 다른 경량화 런타임.

주요기능

- 컨테이너 실행

이미지 기반으로 Container Instance 를 시작한다

- 자원할당 및 관리

CPU, 메모리, Network 등 Resource 할당을 효율적으로 관리한다

- 격리 및 보안

각각의 컨테이너가 독립적으로 격리되어 실행되도록 지원한다.

 

2. CRI (Container Runtime Interface)

CRI는 Kubernetes 와 Container Runtime 사이의 표준화된 인터페이스를 의미한다.

Kubernetes가 Container 를 실행하고 관리할 때 각기 다른 Runtime의 내부 동작 방식을 몰라도 동일한 방식으로 요청하고 제어할 수 있도록 해주는 중간 계층이다.

CRI를 통해 Kubernetes 는 각기 다른 Container Runtime의 세부 구현 방식이나 내부 API를 의존하지 않고 CRI가 제공하는 통일된 Instance(API)를 사용하여 컨테이너를 실행, 상태 확인, 로그 수집 등의 작업을 수행할 수 있다.

 

CRI 기능

- Pod 실행 요청

Cluster 관리자가 Pod Deployment 명령을 내리면 CRI를 통해 해당 작업을 Container Runtime에게 전달한다

- 상태 체크

실행 중인 컨테이너의 상태나 로그를 조회할 수 있게 해준다.

컨테이너 관리

생성, 업데이트 및 삭제 등 컨테이너 lifecycle 관리를 표준화하여 처리한다.

 

CRI 은 추상적인 인터페이스라고도 불리는 데 이는 CRI이 여러 Container Runtime이 각기 다른 내부 구현 방식이 가지더라도 Kubernetes 에서 동일한 명령어와 API 호출을 통해 작업할 수 있도록 하게 하기 위해서다.

예를 들어, Kubernetes가 Pod를 스케줄링할 때, CRI 인터페이스를 통해 다음과 같은 순서로 작업이 진행된다.

  1. Pod 생성 요청: Kubernetes는 CRI API를 호출하여 새 Pod 생성 명령을 전달한다.
  2. 런타임 내부 처리:
    • Docker: Docker 데몬이 해당 요청을 받아 컨테이너 생성 및 실행.
    • containerd: 경량화된 방식으로 컨테이너를 생성하고 시작.
    • CRI-O: CRI 표준에 맞춰 간소화된 방식으로 작업을 처리.
  3. 상태 및 결과 반환: 각 런타임은 성공, 실패, 상태 정보 등을 CRI를 통해 Kubernetes에 전달하여 클러스터 상태를 업데이트한다

이처럼 Kubernetes는 내부에서 CRI를 두어 여러 Runtime의 차이를 일관된 방식으로 컨테이너 작업을 수행할 수 있게 만들어준다는 것이다.