CRI의 도입
컨테이너 기술이 처음 등장했을 때의 대표적인 기술로 Docker를 뽑을 수 있다.
Kubernetes는 Docker를 Ochestration(배포, 스케일링, 관리)하는 역할을 맡게 되었는데, 따라서 Docker 스펙과 매우 긴밀한 Dependency를 가지는 방향으로 설계되었다.
그러나 이후 Kubernetes가 점차 인기를 끌게되면서 rkt와 같은 다른 컨테이너 런타임들도 kubernetes에서 사용할 수 있도록 지원할 필요성이 생겼고, 이를 해결하기 위해 CRI, 즉 Container Runtime Interface라는 개념을 도입하게 되었다.
CRI란
CRI란 Kubernetes가 컨테이너 런타임과 상호작용하는 표준 인터페이스이다.
해당 표준을 통해 Docker 이외의 런타임도 Kubernetes에서 사용할 수 있다.
OCI(Open Container Initiative) 표준을 기반으로 만들어졌으며, 다음과 같은 두 가지 명세를 통해 구성된다.
- ImageSpec: 컨테이너 이미지가 어떻게 빌드 되어야하는지를 정의한다.
- RuntimeSpec: 컨테이너 런타임이 어떻게 동작해야 하는지를 정의한다.
Dockershim
Docker는 CRI가 개발된 당시, 해당 인터페이스를 통해 상호작용할 수 있도록 지원되지 않았다.
그러나 Docker는 그 당시에도 널리 사용되는 Container runtime이었기 때문에 이를 지원하고자 Dockershim이라는 임시 계층을 만들게되었다.
다만 이러한 구조는 구조적인 복잡성과 유지보수의 불리함을 유발하였기 때문에, 이를 해결하고자 Dockershim을 유지하는 대신 Docker를 구성하고 있는 Containerd를 직접 사용하도록하였고, CRI 표준을 통해 상호작용할 수 있도록 하였다.
결과적으로 dockershim은 Kubernetes 1.24 버전부터 완전히 제거되었다.
이후 등장한 다양한 CLI 도구
ctr
Containerd에 내장된 기본 CLI로 주로 디버깅용 도구에 해당한다.
nerdctl
Docker CLI와 거의 동일한 명령어를 사용하며 컨테이너 관리 기능을 가지고 있다.
또한 암호화된 컨테이너 이미지 관리나 lazy pulling 등의 추가적인 기능을 가지고있다.
crictl
CRI 표준을 따르는 컨테이너 런타임과 상호작용할 수 있으며 컨테이너 디버깅에 초점을 맞춘 CLI이다.
cri-dockerd를 통해 kubernetes의 컨테이너 실행 상태를 조사하는 데 사용한다.
'CKA' 카테고리의 다른 글
(TIL) Kube-Scheduler (0) | 2025.03.09 |
---|---|
(TIL) Kube Controller Manager in Kubernetes (0) | 2025.03.09 |
(TIL) Kube-API Server (0) | 2025.03.09 |
(TIL) Kubernetes의 ETCD (0) | 2025.03.03 |
(TIL) Cluster Archiectuer (0) | 2025.03.03 |