Kubernetes v1.24가 22년 5월에 릴리즈 되면서 container runtime으로써 도커를 사용 중단했습니다.
아래 링크의 쿠버네티스 공식 블로그 글을 보면 20년 12월이듯, 꽤 오랜 기간동안 이 변경에 대해서 알려왔는데요. 저는 쿠버네티스를 운영하지는 않고 잘 사용하는 엔드유저라서, 이제야 뭐가 바뀌는건지 알아봤습니다.
임팩트 부터 보자면,
1. 엔드 유저에게는 변화가 (거의) 없습니다. 도커로 빌드한 이미지를 이전과 동일하게 쿠버네티스에서 사용할 수 있고, 이전과 동일하게 yaml로 k8s 리소스를 생성할 수 있습니다.
2. 쿠버네티스를 관리하는 사람이라면 워커 노드가 지원되는 컨테이너 런타임(containerd, CRI-O, ...)을 사용하는지 확인하고, 필요에 따라 업데이트 해야합니다.
내부를 이해하려면 쿠버네티스와 도커, 그리고 컨테이너에 대해 조금 이해해야합니다. 쿠버네티스는 CRI(container runtime interface)를 통해 '컨테이너 런타임'이라는 컨테이너 관리 프로그램과 소통합니다. 이 프로그램에는 docker, containerd, CRI-O 등이 있고요.
그런데 docker는 CRI를 준수하지 않기 때문에 docker를 컨테이너 런타임으로 사용하려면 dockersim이라는 추가 도구가 필요합니다. 자연스럽게 dockershim에 대한 관리가 추가적으로 필요한데, 이 부분에 대해서 더 이상 지원하지 않기 위해 도커를 컨테이너 런타임에서 제외하는 겁니다.
컨테이너 런타임을 도커로 사용할 때:
k8s - [ dockershim - docker ] - containerd
컨테이너 런타임을 containerd로 사용할 때:
k8s - containerd
잉? 도커 뒤에 containerd가 또 있는데요? > 도커는 하나가 아니라 전체 기술 스택이고, 컨테이너 런타임은 그 중 한 부분일 뿐입니다. 그리고 도커는 컨테이너 런타임으로 containerd를 씁니다.
---
이미 작년 5월에 v1.24가 배포되었으니, 저를 포함한 대부분 사용자는 변화를 느끼지 못한 채 지나가지 않았을까 하지만, 쿠버네티스를 관리하는 분은 숨은 역경이 있었을지도 모르겠네요.