쿠버네티스 컨테이너 런타임 인터페이스(CRI)

컨테이너 런타임 인터페이스는 지난 쿠버네티스 컴포넌트 글에서 컨테이너 런타임을 할때 잠깐 나왔던 개념이다.

컨테이너 런타임은 파드에 포함된 컨테이너 실행을 실질적으로 담당하는 소프트웨어라고 소개한적 있다.

CRI

컨테이너 런타임 인터페이스는 클러스터 컴포넌트를 다시 컴파일하지 않아도 kubelet이 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스이다.

클러스터의 모든 노드에 동작 중인 컨테이너 런타임이 존재해야, kubelet이 파드들과 컨테이너들을 구동할 수 있다.

CRI는 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜이다.

kubelet과 컨테이너 런타임 사이의 통신을 위한 gRPC 프로토콜을 정의한다.

 

여기서 gRPC프로토콜은 구글에서 개발한 어느 환경에서 실행할 수 있는 고성능 RPC프레임워크라고 한다.

그렇다면 RPC는 무엇인가? Remote Procedure Call의 약자로 원격제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스간 통신 기술이라고 한다. 다양한 언어나 프레임워크로 개발되었을 때 언어에 구애 받지 않고 사용할 수 있게 해주는 기술이라고 나는 이해했다.

 

컨테이너 런타임의 구현 세부사항에 관계 없이 쿠버네티스랑 통합할 수 있게 하고 이 때문에 쿠버네티스는 컨테이너 런타임을 교체하고 다른 런타임을 사용하는 환경에 쉽게 대응할 수 있다.

 

API

kubelet은 gRPC를 통해 컨테이너 런타임과 연결할 때 클라이언트 역할을 수행한다.

컨테이너 런타임과 이미지 서비스 엔드포인트에 대한 연결을 설정해야한다.

이미지 서비스 엔드포인트는 이미지와 관련된 작업을 수행하기 위해 사용되는 것으로 이 엔드포인트를 통해서 kubelet이 이미지 관련 정보를 가져오고, 이미지를 다운로드하고, 이미지에 대한 작업을 수행한다.

엔드포인트를 쉽게 말하면 api가 서버에서 리소스에 접근할 수 있도록 기능하게 하는 URL이므로 이미지 서비스에 대한 접근 url이라고 나는 이해했다.

 

kubelet은 다음과 같은 커맨드 라인 플래그를 사용해 컨테이너 런타임과 이미지 서비스 엔드포인트에 대한 연결을 설정한다고 한다.

--container-runtime-endpoint : kubelet이 컨테이너 런타임과 통신하기 위한 gRPC엔드 포인트 설정에 사용됨

--image-service-endpoint:kubelet에게 이미지 서비스의 엔드포인트를 제공한다.

 

 

 

myoskin