본문 바로가기

Kubernetes

[Kubernetes] Kubernetes 1.2 version 부터 Docker 사용 중단

728x90
반응형

Kubernetes 1.2 version 부터 Docker 사용 중지(deprecation)

쿠버네티스는 컨테이너 런타임과 통신할 때 CRI 라는 표준 인터페이스 API를 사용하지만 Docker는 이를 지원하지

않습니다.

이런 이유로 쿠버네티스는 "dockershim"라는 브리지 용 서비스로 Docker API와 CRI의 변환을 해주었으나, 이것이

deprecation 되면서 앞으로 마이너 릴리스 된 후에 삭제 예정입니다.

쿠버네티스에서 dockershim가 사용 중지 되면서 자동으로 Docker 할 수 없게 되었습니다.

이제 쿠버네티스에서는 CRI를 지원하는 컨테이너 런타임만 사용하게 됩니다.

CRI에 지원하는 컨테이너 런타임은 cri-o와 continerd 가 있습니다.

 

1. 쿠버네티스는 왜 도커 지원을 중단한 것인가?

가장 큰 이유는 도커는 CRI (Container Runtime Interface)와 호환성이 없다는 것 입니다.

Docker는 쿠버네티스에 통합되도록 설계되어 있지 않기 때문에 많은 문제가 있습니다.

쿠버네티스에서 도커를 사용하기 위해 필요한 Dockershim은 유지보수 비용이 높다는 지적이 있습니다.

도커는 쿠버네티스에서는 사용하지 않는 많은 기능들이 포함되어 있어 자원의 오버 헤드가 높다는 문제가 있습니다.

 

2. 도커를 사용하던 사용자에게 어떤 영향을 미치는 것인가?

개발용으로 Docker를 사용하는 것은 쿠버네티스 클러스트의 런타임과는 아무 상관이 없습니다.

또한, OCI 표준을 준수하는 이미지는 도구에 관계없이 쿠버네티스에서 동일하게 사용할 수 있습니다. containerd 와

CRI-O는 기존 도커 이미지와 호환성이 뛰어납니다.

 

3. Dockershim은 어떤 역할을 하는 것인가?

Dockershim은 Docker와 Kubernetes API를 이어주는 다리 역할을 합니다.

 

 

쿠버네티스 CRI 하이레벨 런타임

CRI 런타임은 하이레벨 런타임으로 도커와 같이 쿠버네티스에서 컨테이너를 관리하는 기능을 제공합니다.

 

CRI-O 런타임

CRI-O 는 레드햇에서 주도적으로 개발하고 있는 오픈소스 프로젝트로  쿠버네티스에서 CRI 구현을 목적으로 만들었기

때문에 “쿠버네티스 전용 런타임”라고 부르기도 합니다.

레드햇의 주력 제품 중 하나 인 ‘Red Hat OpenShift “의 컴포넌트로서 도입되어 Docker 대신 컨테이너를 운영하기 위한

도구로 다양한 환경에서 사용할 수 있습니다.

쿠버네티스 컨테이너 런타임으로 비교되는 containerd 와의 가장 큰 차이점은 그 구현 배경에 있습니다. 이름에서 부터

강조하는 것처럼 “CRI 위한 런타임 ‘ 으로 가볍고 최적화된  런타임으로 강조하고 있습니다.

 

containerd 런타임

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

 

 

[참고]

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

- https://www.openmaru.io/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%99%80-%EB%8F%84%EC%BB%A4/

728x90
반응형

'Kubernetes' 카테고리의 다른 글

[Kubernetes] Pod에 Resource 할당하기  (0) 2022.12.02
[Kubernetes] static Pod 만들기  (0) 2022.11.30
[Kubernetes] Pod - init container & infra container  (0) 2022.11.29
[Kubernetes] Pod - livenessProbe  (0) 2022.11.27
[Kubernetes] Pod 란?  (0) 2022.11.24