docker와 cri-o

다 먼지같은 일입니다·2021년 7월 27일
1

지금까지는 쿠버네티스의 역할이 도커로 만들어진 컨테이너들을 오케스트레이션 하기 위한 것으로 알고 있었다.

그런데..?

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에서는 큰 문제가 없지만, 조만간 버전업에 대한 요구가 있을 것이기에 한번 알아보기로 했다.

cri-o

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내에 있어서 쿠버네티스가 설치되는 형태인듯 했다.

0개의 댓글