지금까지는 쿠버네티스의 역할이 도커로 만들어진 컨테이너들을 오케스트레이션 하기 위한 것으로 알고 있었다.
그런데..?
https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
2020년 12월에 kubernetes 블로그에 한 글이 올라왔다.
kubernetes v1.20 부터는 docker를 지원하지 않음
...?
뭐지 그럼 어떻게 하라는걸까
컨테이너 = Docker 라는 개념을 가지고있던 나에게는 약간 멘붕
찾아보니 docker 이외에 cri-o, rkt, containerd 등 docker 이외에도 컨테이너를 다룰 수 있는 런타임들이 있었다.
당장 내가 주로 사용하는 v1.17에서는 큰 문제가 없지만, 조만간 버전업에 대한 요구가 있을 것이기에 한번 알아보기로 했다.
crio를 처음 접한건 kind 라는 툴을 공부하면서 였다.
kind로 클러스터를 만들면 다음과 같은 상태가 된다.
$ ./kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-558bd4d5db-ttnwr 1/1 Running 0 3m46s
kube-system coredns-558bd4d5db-xzxhr 1/1 Running 0 3m46s
kube-system etcd-kind-control-plane 1/1 Running 0 3m36s
kube-system kindnet-w8g4p 1/1 Running 0 3m36s
kube-system kube-apiserver-kind-control-plane 1/1 Running 1 4m2s
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 3m36s
kube-system kube-proxy-842ks 1/1 Running 0 3m47s
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 3m36s
local-path-storage local-path-provisioner-547f784dff-b7tlb 1/1 Running 0 3m33s
자동으로 스토리지 클래스, CNI 까지 설치해준다 개꿀
근데 pod가 이렇게 많이 떠있음에도 불구하고 docker ps 를 해보면 node 단 1개만이 떠있는걸 알 수 있다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
189162605e30 kindest/node:v1.21.1 "/usr/local/bin/entr…" 45 minutes ago Up 44 seconds 127.0.0.1:43743->6443/tcp kind-control-plane
구동되는 pod들의 컨테이너를 보려면 저 node의 컨테이너에서 crictl을 이용하여 조회해야 한다.
$ docker exec -it kind-control-plane crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
9dabfbdf472c0 296a6d5035e2d 5 minutes ago Running coredns 0 8028d59d21673
729ffb40c0358 e422121c9c5f9 5 minutes ago Running local-path-provisioner 0 90e0407ca8b38
31eeb718ae47c 296a6d5035e2d 5 minutes ago Running coredns 0 c65a04678b516
149218f6762db 6de166512aa22 6 minutes ago Running kindnet-cni 0 1ede59e4129b1
f0bb49391d4ea 0e124fb3c695b 6 minutes ago Running kube-proxy 0 550f19109c02f
091c72edc21a2 0369cf4303ffd 7 minutes ago Running etcd 0 edbb8bf484be5
37a1cb490cef7 94ffe308aeff9 8 minutes ago Running kube-apiserver 1 36b670492e4d5
9f3c2bf4ef328 96a295389d472 8 minutes ago Running kube-controller-manager 0 be60a6e9ff727
874d170cf360d 1248d2d503d37 9 minutes ago Running kube-scheduler 0 54b0ae1fad891
cri 런타임이 따로 image내에 있어서 쿠버네티스가 설치되는 형태인듯 했다.