skip to Main Content

Kubernetes, Docker 지원 중단(Deprecated)

💬  Kubernetes, Docker 지원 중단

2020년 12월, Kubernetes 1.20 버전 이후부터 도커 컨테이너 런타임을 지원 중단을 발표하였습니다.

도커 컨테이너 런타임 중단 사유는 도커가 OCI(Open Container Initiative)를 준수하지만 컨테이너 런타임 인터페이스인 CRI를 준수하지 않았기 때문입니다.
사용자의 편의를 위해 도커심(Dockershim)은 유용하지만 쿠버네티스에서 추가적인 유지 관리를 필요로 하고 오류의 가능성도 높이기 때문입니다.

도커 컨테이너 런타임 중단이라는 것이지 더 이상 개발 도구로 사용할 수 없거나, 도커 이미지를 사용할 수 없다는 것은 아닙니다. 기존과 동일하게 docker build 로 만들어진 이미지도 쿠버네티스에서 사용할 수 있습니다.

cri

아코디언에서는 1.18 버전부터 Docker와 CRI-O 를 지원하고 있습니다. 2.0에서는 Containerd와 CRI-O를 지원하고 있습니다.

💬  컨테이너 런타임

더 이상 도커 런타임을 지원하지 않기 때문에 Containerd 또는 CRI-O 컨테이너 런타임 중 하나로 전환해야 합니다. 

CRI-O

OCI (Open Container Initiative) 호환 런타임을 사용할 수 있도록 Kubernetes CRI (Container Runtime Interface)를 구현 한 것입니다. 

CRI-O 아키텍처

🔗 https://cri-o.io/

Containerd

containerd는 단순성, 견고성 및 이식성을 강조하는 산업 표준 컨테이너 런타임입니다. 

architecture

🔗 https://containerd.io/

💬  그럼 Dockerfile은?

하지만 CRI-O, Containerd 는 컨테이너의 실행을 목적으로 경량화했기 때문에 도커가 제공하는 컨테이너 생성 및 이미지 빌드와 같은 기능은 제공하지 않습니다. 

일반적으로 컨테이너를 만들기 위해서는 기반이 되는 이미지 작성이 사전에 이루어져야합니다. 컨테이너 이미지를 제작하기 위해서 dockerfile을 작성하고 docker build 명령어로 이미지를 제작했는데 이를 대체할 수 있는 도구에 대해서 알아보겠습니다.

Buildah

2017년 6월 릴리즈 되었으며 OCI 이미지를 쉽게 생성할 수 있게 도와주는 도구입니다.

docker build 명령보다 더욱 세밀한 제어가 가능하여 이미지 생성 및 관리와 관련된 상위 명령집합이라고 정의할 수 있습니다.

이미지를 제작할 때 컨테이너 런타임이 필요하지 않는다는 특징이 있으며 루트 권한이 요구되지 않아 보안이 뛰어납니다. 또한, 이미지 자체에 빌드 툴을 포함하지 않아(종속성 제거) 이미지의 크기도 줄일 수 있는 장점을 가지고 있습니다. Dockerfile 없이 스크립트 언어(bash 등)을 사용해 이미지를 빌드할 수 있습니다.

🔗 https://buildah.io/

Podman

docker build 명령어와 동일하게 podman build 명령으로 이미지를 빌드할 수 있습니다. 이때, docker 에서 Dockerfile을 작성하는 것 처럼 Containerfile 또는 Dockerfile을 작성하여 이미지를 생성할 수 있습니다.

하지만 podman은 컨티이너를 관리에 더욱 중점을 두고 있으며 podman build에는 buildah 의 하위 기능이 포함되어 있다고 볼 수 있습니다.

🔗 https://podman.io/

Jib

Java 애플리케이션용 OCI 이미지를 빌드하며 Maven 및 Gradle용 플러그인이 제공됩니다.

🔗 https://github.com/GoogleContainerTools/jib

kaniko

Docker 소켓(/var/run/docker.sock)에 의존적이지 않고 완전히 사용자공간(userspace) 에서 명령을 실행할 수 있습니다. 쉽고 안전하게 이미지를 빌드할 수 있습니다.

🔗 https://github.com/GoogleContainerTools/kaniko

💬  이번 발표로 체감할 수 있는 어려움은?

쿠버네티스의 도커 지원 중단은 애플리케이션을 개발하고 이미지 빌드하는 사용자에게는 큰 차이점을 못 느낄 수 있지만 인프라를 운영하는 관점에서는 많은 어려움이 있습니다. 1.20 이전 도커 런타임을 사용했던 클러스터는 향후 업그레이드부터 컨테이너 런타임을 변경하고 쿠버네티스 버젼 업그레이드를 준비해야합니다. 그리고 기존에 docker.sock 을 이용했던 기능도 대체할 수 있는 툴을 찾아야하기 때문에 당분간 혼란이 있을 것으로 예상됩니다.

🔗 Related Links

https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/

https://kubernetes.io/blog/2020/12/02/dockershim-faq/

Back To Top