Blog

Kubernetes, cri-o, runC? 컨테이너 기술 표준과 구분

Kubernetes, cri-o, runC의 차이와 역할을 알아보세요. 컨테이너 기술 표준과 구성 요소를 이해하여 현대적 클라우드 네이티브 환경을 구축하세요.

2025년 01월 08일

Kubernetes, cri-o, runC? 컨테이너 기술 표준과 구분

주요 토픽

컨테이너 구분

컨테이너 런타임(Container Runtime)은 컨테이너를 생성, 실행, 정지 및 제거하는 역할을 담당하는 핵심 소프트웨어 컴포넌트입니다. 컨테이너 기술이 발전하면서 런타임도 여러 계층과 기준에 따라 구분됩니다. 아래는 컨테이너 런타임의 기준과 구분에 대한 설명입니다.

Container Runtime 구현체의 역할과 구분

컨테이너 관련 구분과 컨테이너 런타임

주요 런타임은 Containerd와 CRI-O가 CRI와 OCI를 모두 준수하며, runc는 기본 런타임으로 사용됩니다. Kata Containers와 gVisor는 보안을 강화한 특화된 런타임입니다.

카테고리 구성 요소 설명 특징
컨테이너 오케스트레이션 Kubernetes
  • 컨테이너 배포, 확장, 관리 자동화를 위한 인기 있는 오픈 소스 플랫폼.
  • 가장 널리 사용되는 컨테이너 오케스트레이션 도구.
  • 고급 기능: 자동 복구, 확장성, 롤링 업데이트.
  • 복잡한 설정과 높은 학습 곡선.
Docker Swarm
  • Docker 컨테이너를 위한 기본 클러스터링 및 오케스트레이션 도구.
  • 소규모 프로젝트 및 간단한 클러스터 설정.
  • 빠른 컨테이너 오케스트레이션 필요 시.
OpenShift
  • Kubernetes 기반의 기업용 컨테이너 플랫폼으로 배포 및 확장 자동화.
  • Kubernetes 기반의 Red Hat 배포판. – 엔터프라이즈 환경에 적합한 추가 도구 및 Red Hat 지원 제공.
  • 통합된 CI/CD 파이프라인.
노드 단독 컨테이너 Docker Engine
  • 컨테이너 생성 및 관리 기능을 지원하는 독립형 컨테이너 런타임.
  • 단일 노드에서 컨테이너 실행 및 테스트. 로컬 개발 환경.
Podman
  • Docker와 유사한 컨테이너 엔진으로 리소스 소모가 적은 특성을 가짐.
  • 단일 노드에서 컨테이너 실행 및 테스트. 로컬 개발 환경.
컨테이너 엔진 (High-Level Runtime) CRI-O
  • Kubernetes와의 통합을 위해 최적화된 경량 컨테이너 엔진.
  • Kubernetes CRI(Container Runtime Interface)를 지원하여 Kubernetes 클러스터 내에서 컨테이너 실행.
  • Kubernetes 전용, CRI를 지원하는 엔진.
  • Kubernetes 환경에서만 사용되는 경우가 많음.
Containerd
  • 컨테이너 실행, 이미지 관리, 저장소 관리, 네트워크, 로그 등의 기능을 제공.
  • Docker와 Kubernetes에서 사용하는 핵심 엔진.
  • 고수준의 컨테이너 실행을 위한 엔진.
  • 다양한 컨테이너 런타임과 함께 동작 가능.
컨테이너 런타임 (Low-Level Runtime) runc
  • 컨테이너를 실행하는 경량의 표준화된 런타임.
  • Docker, containerd 등에서 사용되는 기본 런타임.
  • 컨테이너 생성 및 실행을 위한 낮은 수준의 도구.
  • 컨테이너 엔진과 함께 동작하며, 컨테이너를 실행하는 데 직접적으로 사용됨.
gVisor
  • 보안을 강화한 컨테이너 런타임.
  • 시스템 콜을 사용자 공간에서 처리하여 컨테이너 격리성을 강화.
  • 컨테이너 런타임으로 보안과 격리성에 초점을 둔 런타임.
  • 성능에 영향을 미칠 수 있음.
Kata Containers
  • VM과 컨테이너의 장점을 결합한 런타임.
  • 가상화 기술을 이용하여 컨테이너 격리 수준을 높임.
  • 보안에 중점을 두며, 경량 VM 기반의 컨테이너 실행.
  • 가상화 오버헤드로 성능이 다소 떨어질 수 있음.
rkt (서비스 종료)
  • 앱 중심의 컨테이너 런타임.
  • CoreOS에서 개발, Kubernetes 이전에 사용됨.
  • 서비스 종료된 런타임으로 현재는 더 이상 사용되지 않음.
  • 기존에는 앱 중심의 배포에 중점을 둠.

컨테이너 런타임의 구분

컨테이너 런타임을 계층에 따른 구분

하이 레벨 런타임 (High-Level Runtime)

설명: 컨테이너 오케스트레이션 도구(Kubernetes, Docker 등)와 통합되며, 여러 로우 레벨 런타임을 관리.

  • 예시제품:
    • containerd: Docker와 Kubernetes에서 사용하는 고수준 런타임.
    • CRI-O: Kubernetes CRI 표준에 맞춰 설계된 경량 런타임.
    • Podman: 단일 호스트 환경에서 컨테이너 실행 및 관리.

로우 레벨 런타임 (Low-Level Runtime)

설명: 컨테이너의 실제 실행을 담당하며, 컨테이너 프로세스의 격리 및 자원 관리 구현.

  • 예시 제품:
    • runc: 가장 기본적인 경량 런타임, Docker 및 Kubernetes의 기본 런타임으로 사용.
    • gVisor: 사용자 공간에서 커널 기능을 제공, 보안에 초점.
    • Kata Containers: 경량 가상 머신 기반으로 보안을 강화.

컨테이너 런타임 표준

CRI와 OCI의 역할

  • CRI (Container Runtime Interface): High Level Runtime에 속합니다. Kubernetes와 같은 오케스트레이션 도구가 다양한 Low Level Runtime(컨테이너 런타임)과 통신할 수 있도록 하는 API 표준입니다. CRI는 Kubernetes와 컨테이너 런타임 간의 상호작용을 표준화하여, Kubernetes가 다양한 컨테이너 런타임을 사용할 수 있게 합니다.
  • OCI (Open Container Initiative): Low Level Runtime에 속합니다. OCI는 컨테이너 이미지 포맷과 컨테이너 런타임 표준을 정의하는 표준입니다. OCI 표준을 따르는 런타임은 서로 호환되며, 다양한 환경에서 실행될 수 있습니다.

CRI (Container Runtime Interface)

  • 정의:
    • Kubernetes에서 컨테이너 런타임과 통신하기 위한 인터페이스 표준.
    • Kubernetes가 다양한 컨테이너 런타임과 상호작용할 수 있도록 설계되었습니다.
  • 목적:
    • Kubernetes가 컨테이너 생성, 삭제, 상태 확인 등의 작업을 런타임에 요청할 때 일관된 방식으로 수행하도록 보장.
  • 구성 요소:
    • Container Service: 컨테이너를 생성, 실행, 정지, 삭제.
    • Image Service: 컨테이너 이미지를 관리(다운로드, 삭제 등).
  • 특징:
    • Kubernetes 전용 인터페이스로 설계.
    • gRPC 프로토콜 기반.
    • 런타임 간 상호운용성 제공.
  • CRI를 따르는 런타임:
    • CRI-O: Kubernetes 환경에 최적화된 경량 런타임.
    • Containerd: Docker와 Kubernetes 모두에서 사용 가능.
    • 기타 Kubernetes 통합 런타임.

OCI (Open Container Initiative)

  • 정의:
    • 컨테이너 기술의 상호운용성을 보장하기 위한 표준.
    • 컨테이너 이미지와 런타임의 명세를 정의하여 다양한 도구와 플랫폼 간 호환성을 제공합니다.
  • 목적:
    • 컨테이너 기술의 벤더 종속성을 줄이고, 표준화된 규격을 통해 생태계 확장.
  • 구성 요소:
    • OCI Runtime Specification: 컨테이너 생성, 시작, 정지와 같은 런타임 동작 정의. (예: runc는 OCI Runtime Spec을 구현.)
    • OCI Image Specification:
      • 컨테이너 이미지의 형식과 구성 정의.
      • Docker 이미지와 호환.
  • 특징:
    • 런타임과 이미지를 분리하여 정의.
    • 다양한 컨테이너 런타임 및 오케스트레이션 도구에서 지원.
  • OCI를 따르는 런타임:
    • runc: OCI 표준 준수를 위한 기본 런타임.
    • Containerd: Docker와 Kubernetes에서 사용하는 고수준 런타임.
    • Kata Containers: 경량 VM 기반 보안 런타임.
    • CRI-O: Kubernetes 환경에 특화되었으나 OCI 표준 준수.

컨테이너 구분

  • OpenShift와 Kubernetes는 컨테이너 오케스트레이션 제품군으로, 다수의 노드를 관리하고 대규모 애플리케이션을 배포하는 데 사용됩니다.
  • Podman/Docker는 노드 단독 컨테이너 제품군에 속하며, 단일 노드에서 컨테이너를 실행하고 관리하는 데 초점이 맞춰져 있습니다.
  • CRI-O와 containerd는 Kubernetes 런타임 제품군으로, 클러스터 환경에서 Kubernetes의 일부로 작동합니다.

Podman이나 Docker처럼 노드 단독 컨테이너 구성을 주로 지원하는 제품들은, 클러스터 환경보다는 개별 호스트에서 컨테이너를 실행하고 관리하는 데 초점이 맞춰져 있습니다.

마무리

컨테이너 기술의 구조, 표준, 제품별 특성을 이해하는 데 기반이 되는 공식 문서와 신뢰할 수 있는 기술 블로그에서 참조했습니다. 이를 통해 각각의 제품과 기술이 어떤 역할을 수행하며 어떤 표준에 속하는지를 명확히 정리했습니다.

References & Related Links

  1. 컨테이너 표준 및 기술 자료:
  2. 각 런타임의 공식 문서:
  3. 기술 블로그 및 해설:
  4. 컨테이너 오케스트레이션 관련 정보:

Share This Story, Choose Your Platform!