DevOps K8S(4) – Dockershim? 앞으로는 CRI containerd!

DevOps실 김용호 님이 작성해 주신 ‘Dockershim? 앞으로는 CRI containerd!’에 대해 알아보겠습니다.

K8S 1.24 버전부터 dockershim이 deprecated 되었고, containerd를 사용하도록 하고 있습니다. 그에 따라 헷갈릴 수 있는 부분을 정리해 보았습니다.

Docker? Containerd? CRI-O?

참고자료1 : https://kr.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee

도커가 세상에 나온 뒤, 도커와 쿠버네티스가 둘 다 잘나가자 도커는 사용자 경험 때문에 Docker Engine이라는 하나의 패키지에 모든 기능을 담게 되었습니다. 쿠버네티스에서는 도커엔진을 기본으로 사용하여 구성되었는데, 그러다 보니 도커 버전이 업그레이드 되면 영향을 받게 되었습니다.
(Docker Engine 에서 사용하던 게 Dockershim 이라는 특수한 도구)

따라서 이 문제를 해결하기 위해 컨테이너 기술에 대한 집단들(Docker 가 중심)이 모여 OCI(Open Container Initiative) 라는 컨테이너 표준을 만들게 되었고, Docker 에서 OCI 표준을 준수하는 containerd(Container Daemon) 라는 Container Runtime 을 만들었습니다.


그에 맞춰 쿠버네티스 진영에서는 OCI 표준을 준수하는 이미지들을 실행할 수 있는 CRI(Container Runtime Interface) 를 만들게 되었는데,
이제부터는 Docker 버전과 상관없이 OCI 표준을 준수해 만든 이미지라면 모두 쿠버네티스에서 사용 가능하게 되었습니다.



한편 Red Hat, Intel 등에서 만든 OCI 표준을 따른 Container Runtime 이 CRI-O 이고, 도커 진영에서 만든 containerd 와 CRI-O 중 무엇을 사용하더라도 상관없게 되었습니다.
(containerd 는 도커 엔진에 기본으로 탑재되어 있음)

Dockershim? CRI?

참고자료2 : https://www.youtube.com/watch?v=gQmauyVqGPs

dockershim 은 도커 컨테이너를 실행시키기 위한 “도커 컨테이너 런타임”입니다.

윗 글에서 언급한 대로 Dockershim 은 이제 무거워진 도커 엔진에서 벗어나고자 deprecated 되었고,

CRI(Container Runtime Interface) 에 맞춰 만들어진 containerd를 도커 컨테이너 런타임으로 사용하게 되었습니다.

따라서 K8S 1.24부터는 dockershim 으로 정상적인 설치가 안되며,

이미 EKS, AKS, GKE 와 같은 클라우드 업체의 K8S 플랫폼에서는 모두 dockershim -> containerd로 변경되었습니다.

따라서 K8S 1.24 이후 버전에서는 

`$ docker ps` 와 같은 명령어를 사용할 수 없으며

`$ crictl ps` 명령어로 container들의 상태를 확인할 수 있게 되었습니다.

Written by 김 용호 / Yongho Kim

Software Engineer