쿠버네티스 : Kubernetes 1.20 부터 Docker 사용을 중단합니다.
쿠버네티스 ( Kubernetes ) 프로젝트는 2020 년 12 월 8 일 (미국 시간) “Kubernetes v1.20 ‘을 공개하기 앞서 공식 블로그에서 “Do not Panic : Kubernetes and Docker “이라는 게시물을 게시하고 컨테이너 런타임으로 도커 사용을 중지 한다는 내용에 대해 설명하였습니다.
Kubernetes is deprecating Docker as a container runtime after v1.20
쿠버네티스 는 버전 v1.20 이후 Docker 에 대해 컨테이너 런타임 으로 사용 중지를 알렸습니다.
GKE 및 EKS 등의 관리 Kubernetes 서비스를 사용하는 경우 오퍼레이터에서 지원되는 버전의 런타임을 사용하는 것을 확인하고 쿠버네티스 릴리스에서 도커 지원이 만료되기 전에 변경 해야합니다.
Kubernetes 1.20 에서 Docker 사용 중지(Deprecation)
쿠버네티스와 도커 등 컨테이너 기술 관련하여 2020년 12 월 초 GitHub와 공식 Slack, Twitter 등을 뒤흔든 사건이 바로 Docker 에 대한 향후 사용 중지에 대한 것이였습니다. 공식 릴리즈 노트는 다음과 같습니다.
Deprecation
Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called “dockershim” which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available. (#94624, @dims) [SIG Node]
쿠버네티스는 컨테이너 런타임과 통신 할 때 CRI라는 표준 인터페이스 API 를 사용하지만 Docker는 이를 지원하지 않습니다.
이런 이유로 쿠버네티스는 “dockershim”라는 브리지 용 서비스로 Docker API와 CRI의 변환을 해주었으나 , 이것이 deprecation 되면서 앞으로 마이너 릴리스 된 후에 삭제 예정입니다.
쿠버네티스에서 Dockershim가 사용 중지 되면서 자동으로 Docker할 수 없게 되었습니다. 이제 쿠버네티스에서는 CRI를 지원하는 컨테이너 런타임만 사용하게 됩니다.
CRI에 지원하는 한 컨테이너 런타임은 cri-o 와 containerd 가 있습니다.
쿠버네티스와 도커 FAQ
Question – 쿠버네티스는 왜 도커 지원을 중단한 것인가요?
가장 큰 이유는 도커는 CRI (Container Runtime Interface) 와 호환성이 없다는 것 입니다.
Docker는 Kubernetes에 통합되도록 설계되어 있지 않기 때문에 많은 문제가 있습니다.
쿠버네티스에서 도커를 사용하기 위해 필요한 Dockershim 은 유지 보수 비용이 높다는 지적이 있습니다.
도커는 쿠버네티스에서는 사용하지 않는 많은 기능들이 포함되어 있어 자원의 오버 헤드가 높다는 문제가 있습니다.
Question – 도커를 사용하던 사용자에게 어떤 영향을 미치는 걸까요?
개발용으로 Docker 를 사용하는 것은 쿠버네티스 클러스터의 런타임과는 아무 상관이 없습니다.
또한 OCI 표준을 준수하는 이미지는 도구에 관계없이 쿠버네티스에서 동일하게 사용할 수 있습니다. containerd 와 CRI-O는 기존 도커 이미지와 호환성이 뛰어납니다.
이것이 바로 컨테이너 표준이 만들어진 이유입니다.
Question – Dockershim 은 어떤 역할을 하는 것인가요?
Dockershim는 Docker과 Kubernetes API를 잇는 다리 역할을 합니다.
Kubernetes가 만들어진 당시에는 Docker 가 가장 범용적으로 사용되고 있었기 때문에 Dockershim을 폭녋게 사용하였습니다.
그러나 Docker 사는 Kubernetes 공개 직후 자신의 오케스트레이션 도구 인 Docker Swarm을 발표했, 그 외에도 레드햇 ( 구 CoreOS )는 rkt와 Rancher 사의 Cattle 컨테이너 관리를위한 도구들을 출시하였기 때문에 Kubernetes있어서의 Docker 의존할 수 뿐이 없었습니다.
쿠버네티스 CRI 하이레벨 런타임
CRI 런타임은 하이레벨 런타임으로 도커 와 같이 쿠버네티스에서 컨테이너를 관리하는 기능을 제공합니다. 2021 년 4 월 현재, CRI 런타임에는 “containerd”며 “CRI-O”라는 두 가지 구현체가 있습니다.
CRI-O 런타임
CRI-O 는 레드햇에서 주도적으로 개발하고 있는 오픈소스 프로젝트로 쿠버네티스에서 CRI 구현을 목적으로 만들었기 때문에 “쿠버네티스 전용 런타임”라고 부르기도 합니다.
레드햇의 주력 제품 중 하나 인 ‘Red Hat OpenShift “의 컴포넌트로서 도입되어 Docker 대신 컨테이너를 운영하기 위한 도구로 다양한 환경에서 사용할 수 있습니다.
쿠버네티스 컨테이너 런타임으로 비교되는 containerd 와의 가장 큰 차이점은 그 구현 배경에 있습니다. 이름에서 부터 강조하는 것처럼 “CRI 위한 런타임 ‘ 으로 가볍고 최적화된 런타임으로 강조하고 있습니다.
containerd 는 Kubernetes와 같이 CNCF 프로젝트 하나로 CRI 를 준수하면서 Docker 의 다양한 기능을 제공합니다. 런타임은 Docker 동작에 필요한 기능을 제공합니다.
지금까지 Kubernetes에서 런타임에 Docker를 사용해 온 이용자들에게는 큰 변화 없이 도커에서 전환 할 수 있습니다.
쿠버네티스 표준 컨테이너 런타임
Docker 에서 표준 컨테이너 런타임 인터페이스로 전환 시 고려해야 하는 쿠버네티스 에서 사용가능한 컨테이너 런타임 CRI (Container Runtime Interface) 와 OCI (Open Container Initiative) 개요에 대해 설명합니다.
Kubernetes 는 kubectl 명령을 사용하여 Pod를 만듭니다. 이때 Kubernetes 내부에서는 etcd에 Pod를 만들기 위한 정보를 기록합니다.
이후 스케줄러 등의 처리를 거쳐 특정 노드의 kubelet 에서 새로 생성할 Pod 정보를 가져옵니다.
kubelet는 가져온 Pod 정보를 CRI 통해 하이 레벨 런타임에 전달합니다. CRI 런타임은 그것을 JSON 구성 파일로 변환합니다.
마지막으로 OCI 에서 로우 레벨 런타임을 실행하여 컨테이너를 만듭니다.
이 때 Linux 커널과의 커뮤니케이션은 OCI 런타임이 맡으며, CRI 런타임은 관리를 위한 인터페이스 역할을 합니다.
High-level Container Runtime
-
CRI 런타임
-
외부 (kubelet)에서 CRI 인터페이스에서 명령을 받아
-
컨테이너 이미지 관리를 담당하고, Low-level에 지시를 내린다
-
containerd, CRI-O
Low-level Container Runtime
-
OCI 런타임
-
표준 사양 OCI 준수하여 High / Low 다른 런타임간에 연계 가능
-
High-level의 지시에 따라 컨테이너의 시작 / 정지 등 직접적인 제어를 할
-
runC, crun, gVisor (runsc) , Kata Containers Runtime
클라우드 개념 뽀개기와 데모 그리고 원격 실습까지 무료 체험
References & Related Links
- 당황하지 마세요. 쿠버네티스와 도커 – https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/
- kubernetes/CHANGELOG/CHANGELOG-1.20.md – https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
- 컨테이너 기술에 대한 표준화 – OCI ( OPEN CONTAINER INITIATIVE ) – http://www.opennaru.com/kubernetes/open-container-initiative/
- CONTAINERD – KUBERNETES 표준 컨테이너 런타임 – http://www.opennaru.com/kubernetes/containerd/
- CRI-O 소개 : 여러분은 KUBERNETES에서 어떤 컨테이너 런타임을 사용하고 계신가요? – http://www.opennaru.com/kubernetes/cri-o/
애플리케이션의 비동기 스레드가 느릴때 OPENMARU APM을 이용한 원인분석 방법_chapter 2
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원왜 클라우드네이티브 를 도입해야 하나요?
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원애플리케이션의 비동기 스레드가 느릴때 OPENMARU APM을 이용한 원인분석 방법_chapter 1
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원