Cloud/k8s

[k8s] CRI + container runtime + OCI 관계 정리

jinkwon.kim 2024. 7. 19. 09:19
728x90
반응형

목표

CRI , container runtime , OCI들의 각 개념을 알아보고 해당 개념들이 어떻게 연결되는지 알아보겠습니다.

CRI

정의

CRI(Container Runtime Interface)는 container runtime을 제어하 하기위한 spec정의 입니다.

 

다음은 CRI에 대한 공식 문서 입니다.

CRI github : https://github.com/kubernetes/cri-api

목적: This repository contains the definitions for the Container Runtime Interface (CRI). CRI is a plugin interface which enables kubelet to use a wide variety of container runtimes, without the need to recompile. CRI consists of a protocol buffers and gRPC API

목적

다양한 container runtime들은 CRI 스펙에 맞추어 interface를 구현하여 제공합니다.

그러면 kubelet 등의 프로그램은 해당 interface를 사용하여 container runtime을 제어 합니다.

container runtime

정의

container image를 실행하고 관리하는 software입니다.

지원 기능

container 생성 및 실행

container runtime은 container image를 사용하여 새로운 container를 생성하고 실행하는 기능을 제공합니다. 이는 애플리케이션이 격리된 환경에서 실행될 수 있도록 합니다.

  • image pulling: 컨테이너 이미지를 원격 레지스트리에서 로컬 시스템으로 가져옵니다.
  • container 시작 및 중지: 컨테이너를 시작하고 중지하는 기능을 제공합니다.

자원 관리

container runtime 은 container resource 사용을 제어하고 관리할 수 있는 기능을 제공합니다.

  • CPU 및 메모리 제한: container가 사용할 수 있는 CPU와 Memory양을 제한합니다.
  • storage 관리: container 에 필요한 파일 시스템을 생성하고 관리합니다.

Network 설정

container  runtime은 각 container에 대해 network 설정을 관리합니다.

  • network interface 구성: container에 network interface를 설정합니다.
  • port mapping: container의 port를 host의 port에 매핑합니다.

보안 및 격리

container runtime은 각 container가 격리된 환경에서 실행될 수 있도록 보안 기능을 제공합니다.

  • namespace 격리: 각 container가 별도의 namespace에서 실행되도록 합니다.
  • Cgroups 사용: resource 사용을 제어하기 위해 Linux Cgroups를 사용합니다.

Log 관리

container runtime은 container의 Log를 수집하고 관리하는 기능을 제공합니다.

  • Log 파일 저장: container 로그를 파일로 저장합니다.
  • Log 스트리밍: 실행 중인 container의 Log를 실시간으로 streamming합니다.

image 관리

컨테이너 런타임은 컨테이너 이미지를 관리하는 기능을 제공합니다.

  • 이미지 태깅: 이미지를 태그를 붙여 관리합니다.
  • 이미지 삭제: 사용하지 않는 이미지를 삭제합니다.

CRI 지원

container runtime 은 Kubernetes와의 통합을 위해 CRI를 지원합니다.

  • gRPC API: Kubernetes kubelet과 통신하기 위해 gRPC API를 제공합니다.
  • protocol buffer: data 교환 형식으로 protocol buffer를 사용합니다.

주요 container runtime

  • Docker: 가장 널리 알려진container runtime으로, 사용이 간편하고 다양한 기능을 제공합니다.
  • containerd: Docker에서 파생된 경량 런타임으로, Kubernetes와의 통합이 잘 되어 있습니다.
  • CRI-O: Kubernetes와의 긴밀한 통합을 위해 설계된 경량 container runtime입니다.
  • gVisor: 보안을 강화한 sandbox runtime으로, 격리된 환경에서 컨테이너를 실행합니다.
  • kata-containers: 가상화를 이용하여 높은 수준의 격리를 제공하는 런타임입니다.

OCI

정의

OCI는 Open Container Initiative의 약자로, container 기술의 표준화를 위해 설립된 개방형 표준화 단체입니다.

목표

주요 목표는 container runtime 및 image 사양의 표준을 정의하고 유지보수하는 것입니다.

제공되는 표준 

OCI Runtime Specification

  • 목적: container를 실행하기 위한 표준 runtime 사양을 정의합니다.
  • 내용: container의 생명 주기 관리(생성, 실행, 중지 등), file system 설정, network 구성 등을 포함합니다.
  • 예시: runc는 OCI Runtime Specification을 구현한 runtime입니다.

OCI Image Format Specification

  • 목적: container image를 저장하고 배포하기 위한 표준 images사양을 정의합니다.
  • 내용: image의 레이어, metadata, 배포 형식을 포함합니다.
  • 호환성: Docker image는 OCI image 형식과 호환됩니다.

CRI , container runtime , OCI 관계

요약

k8s 관점에서위 3가지 개념을 연결하여 도식화 하면 아래와 같습니다. 

위도식의 관계를 설명하면 다음과 같습니다.

  • kublet은 CRI 스펙을 구현한 container runtime의 CRI Plugin을 통하여 container runtime을 제어
  • container runtime은 OCI 스펙을 구현한 OCI Runtime을 사용하여 실제 container를 제어
  • container runtime은 OCI 스펙을 구현한 OCI Image을 관리

그리고 위 구조에서 container runtime은 종류에 따라서 

좀더 상세한 container runtime의 구조설명 아래 site를 참고 하시면됩니다.

https://www.alibabacloud.com/blog/a-discussion-on-container-runtime---starting-with-dockershim-being-deleted-by-kubernetes_600118

 

A Discussion on Container Runtime - Starting with Dockershim Being Deleted by Kubernetes

This article explains the evolution of OCI and Docker, explores CRI and CRI-compliant containerd and CRI-O, and describes the principle of Kubernetes log collection.

www.alibabacloud.com

 

정리

CRI : container runtime을 외부에서 제어 할수 있게 container runtime에 제공하는 interface

container runtime : OCI 스펙에 맞는 container image를 사용해서 container를 관리하는 Tool

OCI : container 실행 관련 표준을 정의하는 단체

- OCI Runtime Specification : container를 실행하기 위한 표준 runtime 사양을 정의합니다.

- OCI Image Format Specification : container image를 저장하고 배포하기 위한 표준 images사양을 정의합니다.

 

 

 

 

 

 

728x90
반응형

'Cloud > k8s' 카테고리의 다른 글

[k8s] calico - multiple nic + metallb 사용법  (2) 2023.12.08
[k8s] Prometheus  (1) 2023.12.06
[k8s-deep dive] OCI 란?  (0) 2023.11.21
[k8s] container runtime별 관리 tools  (0) 2023.03.06
[급한 k8s] 4. 외부 서비스  (0) 2023.01.01