이 내용은 다음 레퍼런스들을 읽고 간단히 요약한 것입니다. k8s와 docker 및 container에 대해 깊은 이해가 없는 상태에서 나름대로 정리하려고 노력한 글이므로, 가급적이면 훑어만 보시고 나머진 원문을 읽으시길 권장합니다.
(타이틀은 유머로 받으시길)
2021/8/20 추가: https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/ 이 글을 읽을 것을 강력히 권장함
Wait, Docker is deprecated in Kubernetes now? What do I do?
원문: https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m
k8s가 작동하는 방식
k8s
: Orchestration tool that "controls distributed compute resources"
- k8s ->
node
에 붙어있는 kubelet
를 통해 node를 관리
kubelet
-> node에 (pod
라는 logical group을 이용하여) container
(for images)를 구동
- 그런데 container가 구동되기 위해선
container runtime
, 즉 컨테이너를 돌리기 위한 environment가 필요함. (마치 js 코드를 서버에서 돌리려면 node가 필요하듯이)
docker의 두 가지 문제점
- kubelet이 컨테이너를 생성하거나 제거하기 위해서 사용하는 API가
CRI
(Container Runtime Inferface)
- 그런데 docker는 이 CRI를 지원하지 않음. 조금 비약을 섞자면, 표준을 지키지 않는 셈
- k8s는 그동안
dockershim
이라는 브리지 서비스를 운영해옴. 이것은 CRI support for docker인데, 그동안 이것으로 Docker 속의 containerd와 소통하고 있었음. 그런데 k8s 커뮤니티는 이것을 운영하는 것이 점점 힘들어지는 상황. 이것이 docker를 버리는 첫 번째 이유. (구체적으로 힘든 이유)
- 또한, docker는 그 자체로 Volume, Network, Container Runtime등 다양한 컴포넌트들을 가지고 있는데 k8s에선 사실 Runtime만 있으면 됨. 나머진 k8s의 다른 컴포넌트들이 책임지니까. 이것이 docker를 버리는 두 번째 이유.
대안 - pure Container Runtimes
Containerd
(Docker에서 runtime job을 맡고 있음)
CRI-O
그런데 CRI는 정확히 무엇을 하나?
- kublet으로부터 gRPC request를 받아서,
- OCI 구동을 위한 json config 파일 생성, 이후 OCI에 전달함
- 실질적으로 컨테이너를 직접 spawn하는 것은 OCI. CRI는 그것을 추상화한 중간 매개자 정도
- OCI examples:
runC
, gVisor
Don't Panic: Kubernetes and Docker
원문: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
tl;dr
- end-user: 그냥 도커 계속 써도 됨 (*클러스터 업데이트 안할 경우, 를 말하는 것 같음)
- managed-k8s' user: 지금 쓰는 Container Runtime이 향후 사라질 예정인지(=docker인지) 체크
- cluster admin: v1.20 부터는 deprecation warning for Docker 등장. 2021년 말 쯤엔 완전히 지원 끊음
개발자들을 위한 추가 설명
- Docker가 만드는 Image는 docker-specific하다는 통념과 다르게 OCI(Open Container Initiative) image다. 따라서 쿠버네티스 안에서는 어떤 container runtime을 쓰던 (OCI-compliant하다면) 이미지는 일관되게 똑같을 것이며, containerd와 CRI-O는 이러한 image를 어떻게 pull하는지 잘 알고 있음. 이게 표준이 필요한 이유임.
그 외 읽기 쉽고 알아두면 좋은 글
https://post.naver.com/viewer/postView.nhn?volumeNo=28882881
http://www.opennaru.com/kubernetes/cri-o/