[Kubernetes Fundamentals] 컨테이너 런타임 인터페이스(CRI)

IMKUNYOUNG·2024년 7월 8일
0

KCNA

목록 보기
4/56

컨테이너 기술의 시대 초기, Docker는 컨테이너 작업을 매우 간단하게 만들어주어 가장 인기 있는 컨테이너 솔루션으로 자리 잡았습니다. Kubernetes가 처음 도입되었을 때도 Docker 컨테이너 오케스트레이션만 지원했습니다. 그러나 Kubernetes의 인기가 높아지면서 Rocket과 Containerd와 같은 다른 컨테이너 솔루션도 Kubernetes와 통합되기를 원하게 되었습니다. 이를 해결하기 위해 Kubernetes는 컨테이너 런타임 인터페이스(CRI)를 도입했습니다.

CRI의 도입과 그 필요성

CRI는 모든 컨테이너 벤더가 Open Container Initiative(OCI) 표준을 준수하는 한 Kubernetes의 컨테이너 런타임으로 작동할 수 있도록 합니다. 이는 Kubernetes가 핵심 코드를 수정하지 않고도 다양한 컨테이너 런타임을 지원할 수 있음을 의미합니다. CRI는 컨테이너 런타임이 Kubernetes와 통합할 수 있는 API를 정의하는 플러그인 인터페이스입니다. Kubernetes kubelet이 컨테이너 이미지를 관리하고 컨테이너와 네트워킹을 관리하기 위해 컨테이너 런타임과 상호작용하는 gRPC 프로토콜을 정의합니다.

CRI의 주요 기능

CRI의 주요 기능은 다음과 같습니다:

  1. 유연성 제공: 특정 사용 사례에 맞는 최적의 컨테이너 런타임을 선택할 수 있는 유연성을 제공합니다.
  2. 독립적 개발 가능: 컨테이너 런타임이 CRI API를 구현하는 한 Kubernetes와 독립적으로 개발될 수 있습니다.
  3. 혁신 촉진: 컨테이너 런타임 사양의 혁신을 가능하게 합니다.

Docker와 Dockershim

Docker는 이미 Kubernetes와 널리 사용되고 있었기 때문에 Kubernetes는 CRI를 도입한 후에도 Docker 지원을 계속 제공해야 했습니다. 이를 위해 Kubernetes는 Dockershim이라는 임시 솔루션을 도입했습니다. Dockershim은 Docker가 CRI를 사용하지 않고도 Kubernetes와 통신할 수 있게 해주며, Kubernetes가 Docker 컨테이너를 이전과 동일하게 관리할 수 있게 해줍니다. 그러나 Dockershim은 이전 버전의 Kubernetes와 Docker와의 하위 호환성을 위해서만 유지되는 임시 솔루션으로 간주됩니다.

Kubernetes가 진화하면서 점점 더 컨테이너 런타임에 독립적이 되었고, Dockershim의 사용은 권장되지 않게 되었습니다. 따라서 Dockershim은 Kubernetes 버전 1.24에서 제거되었으며, Docker 지원은 완전히 제거되었습니다. 그러나 Docker와 작동하던 모든 것은 Containerd와 계속해서 작동합니다. Containerd는 Docker의 추상화입니다.

CRI의 장점과 권장 사항

사용자들은 CRI를 지원하는 컨테이너 런타임을 사용하는 것이 권장됩니다. 이는 컨테이너 런타임 간의 더 나은 호환성과 표준화를 가능하게 하고 벤더 종속을 피하는 데 도움이 됩니다. Kubernetes에서 Docker 지원이 제거된 후에도 모든 Docker 이미지는 문제없이 원활하게 작동합니다. 이는 Docker 이미지가 OCI(Open Container Initiative) 표준을 준수하므로, Containerd와 같이 OCI 표준을 따르는 다른 컨테이너 런타임과 함께 사용할 수 있기 때문입니다.

결론

컨테이너 런타임 인터페이스(CRI)는 호환성과 유연성을 높이고 사용자가 특정 컨테이너 런타임에 의존하지 않고 원하는 최적의 컨테이너 런타임을 선택할 수 있게 했습니다. CRI의 도입으로 Kubernetes는 다양한 컨테이너 솔루션과의 통합이 가능해졌고, 이는 컨테이너 기술의 발전과 혁신을 더욱 촉진하게 되었습니다.

0개의 댓글