OCI & CRI

Dongmin Lee·2023년 8월 6일
0

Kubernetes

목록 보기
4/10
post-thumbnail

1. Open Container Initiative (OCI)

  • OCI Website
  • OCI의 목표는 컨테이너 포맷과 런타임의 표준화하여, 다양한 컨테이너 기술들이 일관된 방식으로 동작하도록 하는 것이다.
  • 2015년 리눅스 재단의 주도 하에 시작되었으며, Docker, CoreOS, AWS, Google, FaceBook, Microsoft, IBM 등 주요 기업들이 참여하고 있다.
  • runc: OCI 런타임 사양에 따른 구현체로, CLI 도구로 컨테이너를 생성하고 실행할 수 있다.

2. Container Runtime Interface (CRI)

  • Kubernetes - Container Runtimes
  • CRI는 쿠버네티스와 연계된 개념으로, 컨테이너 런타임이 쿠버네티스의 kubelet과 어떻게 통신해야 하는지 정의한 인터페이스이다.
  • kubelet이 컨테이너를 관리하려면 실제로 컨테이너를 실행하고 관리할 수 있는 컨테이너 런타임이 필요한데, CRI는 이러한 런타임과 kubelet 간의 통신 방법을 표준화한다.
  • CRI 통신을 통해 kubelet은 다양한 컨테이너 런타임 (e.g., Docker, containerd, rkt)과 연동할 수 있다.

3. Container Runtimes

3.1 CRI <-> Container Runtimes

CRIContainer Runtimes
dockershim (deprecated)docker (dockerd) -> containerd -> shim API -> runc
containerdcontainerd -> shim API -> runc/Katacontainer/Firecracker/gVisor
cri-ocri-o -> runc (or other OCI compatible runtimes)
singularity-crisingularity

4. When we created a pod

  1. API 요청: 사용자는 kubectl과 같은 도구를 사용하여 Pod 생성 요청을 쿠버네티스 API 서버에 보낸다.
  2. 스케줄링: 스케줄러가 해당 Pod을 실행할 적절한 노드를 선택한다.
  3. kubelet 감지: 선택된 노드의 kubelet은 새로운 Pod을 생성해야 한다는 것을 감지하고, 해당 Pod에 대한 작업을 시작한다.
  4. CRI 호출: kubelet은 컨테이너 런타임에 Pod을 생성하라는 요청을 하기 위해 CRI를 호출. CRI는 gRPC 프로토콜을 사용하여 통신한다.
  5. 컨테이너 런타임 동작: CRI를 구현한 컨테이너 런타임은 요청을 받고, OCI 스펙을 준수하여 컨테이너의 이미지를 가져오고, 파일 시스템을 준비하며, 네트워크를 구성하고, 프로세스를 실행한다.
  6. 독립된 실행 환경: 각 컨테이너는 OCI 스펙에 따라 네임스페이스와 같은 리눅스 커널 기능이 사용하여 독립된 실행 환경에서 실행한다.
  7. 상태 보고: 컨테이너 런타임은 kubelet에게 컨테이너 상태 정보를 보고하며, kubelet은 이 정보를 API 서버에 업데이트하여 클러스터 전체에서 상태를 동기화한다.
  8. 사용자에게 응답: 최종적으로 사용자는 kubectl을 통해 Pod의 상태를 조회할 수 있으며, 성공적으로 실행 중인 Pod의 정보를 얻을 수 있다.

0개의 댓글