컨테이너 런타임 인터페이스(CRI)
쿠버네티스 공식문서를 확인하며 CRI(컨테이너 런타임 인터페이스)에 대해서 기억해야 하는 부분을 기록한다.
- CRI는 클러스터 컴포넌트를 다시 컴파일 하지 않아도 Kubelet이 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스다.
- 클러스터의 모든 노드에 동작 중인 컨테이너 런타임이 존재해야, kubelet이 파드들과 컨테이너들을 구동할 수 있다.
- CRI는 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜이다.
- 쿠버네티스 CRI는 클러스터 컴포넌트 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 gRPC 프로토콜의 정의한다.
API
- kubelet은 gRPC를 통해 컨테이너 런타임과 연결할 때 클라이언트의 역할을 수행한다.
- 런타임과 이미지 서비스 엔드포인트는 컨테이너 런타임 내에서 사용 가능해야 하며, 이는 각각 kubelet 내에서
--image-service-endpoint
와--container-runtime-endpoint
커맨드라인 플래그를 통해 설정할 수 있다. - 쿠버네티스 v1.25에서는, kubelet은 CRI v1을 사용하는 것을 권장한다.
- 컨테이너 런타임이 CRI v1 버전을 지원하지 않는다면, kubelet은 지원 가능한 이전 지원 버전으로 협상을 시도한다.
- v1.25 kubelet은 CRI
v1alpha2
버전도 협상할 수 있지만, 해당 버전은 사용 중단(deprecated)으로 간주한다. - kubelet이 지원되는 CRI 버전을 협상할 수 없는 경우, kubelet은 협상을 포기하고 노드로 등록하지 않는다.
업그레이드
- 쿠버네티스를 업그레이드할 때, kubelet은 컴포넌트의 재시작 시점에서 최신 CRI 버전을 자동으로 선택하려고 시도한다.
- 최신 버전 선택이 실패하면 위에서 살펴본 이전 버전을 선택하는 과정을 거친다.
- 컨테이너 런타임이 업그레이드되어 gRPC 재다이얼이 필요하다면, 컨테이너 런타임도 처음에 선택된 버전을 지원해야 하며, 그렇지 않다면 재다이얼은 실패하게 된다.
- 업그레이드를 진행하기 위해서는 kubelet의 재시작이 필요하다.
[참고]
CRI는 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜이며 kubelet과 컨테이너 런타임은 gRPC로 통신한다. v1.25에서는 kubelet이 CRI v1을 사용하는 것을 권장하며 컨테이너 런타임이 지원하지 않는 경우 kubelet은 버전 협상을 시도하고 협상에 실패하는 경우 노드를 등록하지 않는다.
쿠버네티스를 업그레이드할 때 kubelet은 지시작 시점에 최신 CRI 버전을 등록하려고 시도하고 최신 버전 선택이 실패하면 이전 버전을 선택하는 과정을 거치게 된다.
참고 자료
'Infrastructure > Kubernetes' 카테고리의 다른 글
[컨테이너] 런타임클래스 (0) | 2022.10.14 |
---|---|
[컨테이너] 이미지 (0) | 2022.10.14 |
[클러스터 아키텍처] 가비지 수집 (0) | 2022.10.13 |
[클러스터 아키텍처] cgroup v2 (0) | 2022.10.13 |
[클러스터 아키텍처] 클라우드 컨트롤 매니저 (0) | 2022.10.13 |