이 내용은 다음 레퍼런스들을 읽고 간단히 요약한 것입니다. 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/