fbpx

#CRI を #Containerd にして #kubeadm で #Kubernetes クラスタをセットアップしてみた #k8s #Docker

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本記事では、KubernetesのインストールツールであるKubeadmでCRIにContainerdを指定してKubernetesをインストールし、デフォルトのCRIであるDocker (dockershim)の場合と比較してみました。

結論から言いますと、

  • kubeadm 1.20.0のデフォルトのCRIはDocker (dockershim)なので、ContainerdをCRIとするには少しオプションの追加が必要。
  • Dockerイメージはそのまま使えるので特に問題なく動作する。

といった感じです。

はじめに

2020年12月初め、Kubernetes Blogに「Don't Panic: Kubernetes and DockerDockershim Deprecation FAQ」という記事が立て続けに投稿され、Docker Blogにも「What developers need to know about Docker, Docker Engine, and Kubernetes v1.20」という記事が投稿され、DockerをCRIとして利用するための「dockershim」がKubernetes 1.20で非推奨となり、2021年後半リリース予定のKubernetes 1.22で削除されるという発表がなされました。

この直後、Mirantis社とDocker社はdockershimのサポートを引き継ぐという発表を行い、Kubernetesのコアから削除された後も別個のオープンソースプロジェクトとしてdockershimをメンテナンスする意向を示しています。

(ちなみに2018年5月には「Kubernetes Containerd Integration Goes GA」という記事が投稿されており、今回ほどではありませんが「KuberenetesからDockerが外される」と小さく騒がれた記憶があります)

以降は実際にkubeadmでKubernetes 1.20.0をインストールし、Docker (dockershim)をCRIとする場合と、Containerdを直接CRIとする場合を比較してみます。

事前準備

まず実験環境として、Virtualbox上にUbuntu 18.04を2ノード、Docker用とContainerd用の2セット用意しました。

これらのノードにContainer runtimesに従って、docker-ce (本記事執筆時 5:19.03.14~3-0 以下同様)をインストールしました。なお、この手順でdocker-ceだけでなくcontainerd.io (1.3.9-1)をインストールしていますが、そもそもモノリシックであったDocker Engineをリファクタリングし、コンテナランタイム部分としての機能を分離・依存しているものがContainerdだからです(参考: Dockerとcontainerdの統合)。これはdocker-ceのパッケージ依存関係からも確認でき、本来は明示的にcontainerd.ioを指定しなくても自動的にインストールされます。

$ apt-cache depends docker-ce | head
docker-ce
  Depends: docker-ce-cli
  Depends: containerd.io ←★
  Depends: iptables
  Depends: libseccomp2
  Depends: libc6
  Depends: libdevmapper1.02.1
  Depends: libsystemd0

さらにInstalling kubeadmに従って、kubeadm・kubelet・kubectl (1.20.0-00)をインストールしたものとします。

CRIがDocker (dockershim)の場合(kubeadm 1.20.0のデフォルト)

Creating a cluster with kubeadmに従い、kubeadmでKubernetesクラスタをセットアップします。kubeadm initに特にオプションは与えず、CRIを自動検知させています。また、Installing Calico for policy and networking (recommended)に従い、Calicoをインストールしておきます。

kubeadmのソースコードを見るとdetectCRISocketImplという関数があり、ここでCRIの検出を行っています。現時点での最優先はDockerソケットです。前述の通りDockerとContainerdは両方インストールされるため、ワークアラウンドも入っています。また、特にDockerソケットを検出したことによる警告は特に出ないようです。

一方、kubeletのログを見るとdockershimが非推奨であるメッセージが出ています。

$ sudo journalctl -u kubelet | grep dockershim
Dec 09 09:47:27 node01 kubelet[8975]: W1209 09:47:27.016437    8975 kubelet.go:297] Using dockershim is deprecated, please consider using a full-fledged CRI implementation

では、Mirantis社公認Dockerトレーニングで用いられているサンプルアプリDockerCoinsを動かし、プロセスツリーを見てみましょう。

$ hostname
node01
$ ps axf
:
 3205 ?        Ssl    0:23 /usr/bin/containerd
 9444 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9469 ?        Ss     0:00  |   \_ /pause
 9487 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9551 ?        Ss     0:00  |   \_ /pause
 9492 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9603 ?        Ss     0:00  |   \_ /pause
 9514 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9611 ?        Ss     0:00  |   \_ /pause
 9710 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9736 ?        Ssl    2:05  |   \_ etcd --advertise-client-urls=https://192.168.
 9753 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9801 ?        Ssl    9:02  |   \_ kube-apiserver --advertise-address=192.168.12
 9823 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9878 ?        Ssl    2:08  |   \_ kube-controller-manager --allocate-node-cidrs
 9832 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 9900 ?        Ssl    0:27  |   \_ kube-scheduler --authentication-kubeconfig=/e
10427 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
10454 ?        Ss     0:00  |   \_ /pause
10491 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
10518 ?        Ssl    0:01  |   \_ /usr/local/bin/kube-proxy --config=/var/lib/k
15132 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
15166 ?        Ss     0:00  |   \_ /pause
16346 ?        Sl     0:09  \_ containerd-shim -namespace moby -workdir /var/lib
16373 ?        Ss     0:00      \_ /usr/bin/runsvdir -P /etc/service/enabled
16448 ?        Ss     0:00          \_ runsv bird6
16550 ?        S      0:00          |   \_ bird6 -R -s /var/run/calico/bird6.ctl
16449 ?        Ss     0:00          \_ runsv felix
16452 ?        Sl     1:40          |   \_ calico-node -felix
16450 ?        Ss     0:00          \_ runsv confd
16454 ?        Sl     0:00          |   \_ calico-node -confd
16451 ?        Ss     0:00          \_ runsv bird
16549 ?        S      0:00              \_ bird -R -s /var/run/calico/bird.ctl -
 4542 ?        Ssl    2:46 /usr/bin/dockerd -H fd:// --containerd=/run/container
10184 ?        Ssl    4:47 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernet
:
$ hostname
node02
$ ps axf
:
 3190 ?        Ssl    0:39 /usr/bin/containerd
11866 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
11892 ?        Ss     0:00  |   \_ /pause
12036 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
12060 ?        Ssl    0:01  |   \_ /usr/local/bin/kube-proxy --config=/var/lib/k
12335 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
12383 ?        Ss     0:00  |   \_ /pause
15366 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
15466 ?        Ss     0:00  |   \_ /pause
15398 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
15499 ?        Ss     0:00  |   \_ /pause
15410 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
15541 ?        Ss     0:00  |   \_ /pause
15411 ?        Sl     0:09  \_ containerd-shim -namespace moby -workdir /var/lib
15485 ?        Ss     0:00  |   \_ /usr/bin/runsvdir -P /etc/service/enabled
15772 ?        Ss     0:00  |       \_ runsv bird6
15914 ?        S      0:01  |       |   \_ bird6 -R -s /var/run/calico/bird6.ctl
15773 ?        Ss     0:00  |       \_ runsv felix
15776 ?        Sl     1:44  |       |   \_ calico-node -felix
15774 ?        Ss     0:00  |       \_ runsv confd
15778 ?        Sl     0:00  |       |   \_ calico-node -confd
15775 ?        Ss     0:00  |       \_ runsv bird
15913 ?        S      0:01  |           \_ bird -R -s /var/run/calico/bird.ctl -
15961 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
15990 ?        Ssl    0:20  |   \_ /coredns -conf /etc/coredns/Corefile
16171 ?        Sl     0:04  \_ containerd-shim -namespace moby -workdir /var/lib
16220 ?        Ssl    0:02  |   \_ /usr/bin/kube-controllers
16176 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
16229 ?        Ssl    0:20  |   \_ /coredns -conf /etc/coredns/Corefile
 6107 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6142 ?        Ss     0:00  |   \_ /pause
 6416 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6509 ?        Ss     0:00  |   \_ /pause
 6452 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6531 ?        Ss     0:00  |   \_ /pause
 6453 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6555 ?        Ss     0:00  |   \_ /pause
 6499 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6575 ?        Ss     0:00  |   \_ /pause
 6933 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 6959 ?        Ssl    0:01  |   \_ redis-server *:6379
 7296 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 7329 ?        Ss     0:05  |   \_ python rng.py
 7805 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 7836 ?        Ssl    0:04  |   \_ ruby hasher.rb
 8258 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 8297 ?        Ssl    0:02  |   \_ node webui.js
 8460 ?        Sl     0:00  \_ containerd-shim -namespace moby -workdir /var/lib
 8487 ?        Ss     0:18      \_ python worker.py
 4532 ?        Ssl    3:21 /usr/bin/dockerd -H fd:// --containerd=/run/container
11550 ?        Ssl    3:46 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernet
:

一見すべてのコンテナがcontainerdの管理下にあるように見えますが、実際にはDockerも管理しています。CRIのCLIであるcrictlコマンドでもコンテナを確認してから、containerdのCLIであるctrコマンドとdockerコマンドの両方でも見てみましょう。

$ hostname
node01
$ sudo crictl --runtime-endpoint=unix:///var/run/dockershim.sock ps
CONTAINER ID        IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
e9a97494ae4c7       15f795b449d29       2 hours ago         Running             calico-node               1                   01f2ca8415bed
7bb8026798dd2       10cc881966cfd       2 hours ago         Running             kube-proxy                1                   e2b0bf5d21d36
d18e808e27f5e       ca9843d3b5454       2 hours ago         Running             kube-apiserver            1                   a62747339fa36
dfe114886f962       b9fa1895dcaa6       2 hours ago         Running             kube-controller-manager   1                   5279bfabbe239
72866360ac526       3138b6e3d4712       2 hours ago         Running             kube-scheduler            1                   26598a8bd4265
a036a08d0079d       0369cf4303ffd       2 hours ago         Running             etcd                      1                   d91b54ddc7b40
$ sudo ctr namespace list
NAME LABELS 
moby        
$ sudo ctr --namespace moby container list
CONTAINER                                                           IMAGE    RUNTIME                           
01f2ca8415bed461efd90d021c53706bb874fa1a9e49b2086a6c467376f6bf06    -        io.containerd.runtime.v1.linux    
26598a8bd42658e332eead4562a5a84bc9ea6ba9d91369ebe400c0baa2952857    -        io.containerd.runtime.v1.linux    
5279bfabbe239b3cae57ccf8950d4e6cbede96af16af39e70eeb49d964ccd3e3    -        io.containerd.runtime.v1.linux    
72866360ac526b4cdfe1a9fa25986e0188c9d83f494a48fc0adfb599c201d2a5    -        io.containerd.runtime.v1.linux    
7bb8026798dd2dd33f9fe1244e6ce6f138a9f3eb63335d55ba7ea57b9aa7e62c    -        io.containerd.runtime.v1.linux    
a036a08d0079d7e101b4de27843220b76db1d0496b60faaa4eae8ec13d8e6867    -        io.containerd.runtime.v1.linux    
a62747339fa36d63d94a7f7735eee4a5d7c3dea2ce6e12d1dbdcebdcb8fd7a0f    -        io.containerd.runtime.v1.linux    
d18e808e27f5e5e5c339b56b94bee01c5d02a4a7e830d734b10fc9920e344641    -        io.containerd.runtime.v1.linux    
d91b54ddc7b40aba168d0c64accaac55839b38634b9581c97065ac7018be82f3    -        io.containerd.runtime.v1.linux    
dfe114886f9624dca23c37bdb5b9ea799a931abcccb9a0a6b90170d6aa21ae1e    -        io.containerd.runtime.v1.linux    
e2b0bf5d21d366671d7a863eb85a24fead5c378101d0cac90fccba022397da75    -        io.containerd.runtime.v1.linux    
e9a97494ae4c72363d12da3452e055bf30602cda222b9f52060b4048cb1e3065    -        io.containerd.runtime.v1.linux    
$ sudo docker container ls
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
e9a97494ae4c        15f795b449d2           "start_runit"            2 hours ago         Up 2 hours                              k8s_calico-node_calico-node-8rhxl_kube-system_2b09b1db-6dc5-4385-86aa-25491f29d5af_1
7bb8026798dd        10cc881966cf           "/usr/local/bin/kube…"   2 hours ago         Up 2 hours                              k8s_kube-proxy_kube-proxy-g45h7_kube-system_982aff38-a15d-4c4a-b480-bfc41c28623c_1
01f2ca8415be        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-node-8rhxl_kube-system_2b09b1db-6dc5-4385-86aa-25491f29d5af_1
e2b0bf5d21d3        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-proxy-g45h7_kube-system_982aff38-a15d-4c4a-b480-bfc41c28623c_1
d18e808e27f5        ca9843d3b545           "kube-apiserver --ad…"   2 hours ago         Up 2 hours                              k8s_kube-apiserver_kube-apiserver-node01_kube-system_239767502b5b3123c73eb0e72f9fb6c4_1
dfe114886f96        b9fa1895dcaa           "kube-controller-man…"   2 hours ago         Up 2 hours                              k8s_kube-controller-manager_kube-controller-manager-node01_kube-system_78e47059dbfed9457c3418ec90e21b8e_1
72866360ac52        3138b6e3d471           "kube-scheduler --au…"   2 hours ago         Up 2 hours                              k8s_kube-scheduler_kube-scheduler-node01_kube-system_81d2d21449d64d5e6d5e9069a7ca99ed_1
a036a08d0079        0369cf4303ff           "etcd --advertise-cl…"   2 hours ago         Up 2 hours                              k8s_etcd_etcd-node01_kube-system_1c0e09163f12683aea537dcf25934c79_1
26598a8bd426        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-scheduler-node01_kube-system_81d2d21449d64d5e6d5e9069a7ca99ed_1
5279bfabbe23        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-controller-manager-node01_kube-system_78e47059dbfed9457c3418ec90e21b8e_1
a62747339fa3        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-apiserver-node01_kube-system_239767502b5b3123c73eb0e72f9fb6c4_1
d91b54ddc7b4        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_etcd-node01_kube-system_1c0e09163f12683aea537dcf25934c79_1
$ hostname
node02
$ sudo crictl --runtime-endpoint=unix:///var/run/dockershim.sock ps
CONTAINER ID        IMAGE                                                                           CREATED             STATE               NAME                      ATTEMPT             POD ID
0d5ae9d348f92       fc241370a696c                                                                   2 hours ago         Running             dockercoins-worker        1                   9e3998bbdf5fa
c2d53fb1737b3       bfe3a36ebd252                                                                   2 hours ago         Running             coredns                   1                   f40f633757e62
30a4d32771d49       081a5bf738add                                                                   2 hours ago         Running             calico-kube-controllers   1                   36b942129fbf3
10bd15556fb60       redis@sha256:5b98e32b58cdbf9f6b6f77072c4915d5ebec43912114031f37fa5fa25b032489   2 hours ago         Running             redis                     1                   77bdeaa09a6d1
6ca6c52f20e74       744d16381064b                                                                   2 hours ago         Running             dockercoins-rng           1                   040fc0550aea2
abc2b804aad50       bfe3a36ebd252                                                                   2 hours ago         Running             coredns                   1                   7b6b3da1649e2
012928c9508c9       487bf8f4aa7f6                                                                   2 hours ago         Running             dockercoins-hasher        1                   446a75f98af3a
650c6c8a6b9b9       d5ee8b2f0a4af                                                                   2 hours ago         Running             dockercoins-webui         1                   dca0e59c8df0a
416dedd29728c       15f795b449d29                                                                   2 hours ago         Running             calico-node               1                   198d68b3cae7a
d31f95dce5a72       10cc881966cfd                                                                   2 hours ago         Running             kube-proxy                1                   57e33e81ed90b
$ sudo ctr namespace list
NAME LABELS 
moby        
$ sudo ctr --namespace=moby container list
CONTAINER                                                           IMAGE    RUNTIME                           
012928c9508c9082bf587237cce4296d4aae9f9b5408cef6c95ff99012102b4d    -        io.containerd.runtime.v1.linux    
040fc0550aea2ae3cfad37d96658a4f7ece1434c311c90ce003c2ae61d807a8a    -        io.containerd.runtime.v1.linux    
0d5ae9d348f928d33b5a8e9afa3629d6806ed97eaf18ce7ff1abd0f7a10a5a2c    -        io.containerd.runtime.v1.linux    
10bd15556fb60e88c19d826bdd62bd7300e12f8643b15c254bba69cbe2d56ac1    -        io.containerd.runtime.v1.linux    
198d68b3cae7a81ce0f2b0e389bd2203168f79607389e3f01d7ad51f3b678420    -        io.containerd.runtime.v1.linux    
30a4d32771d4901ed5e11309047e8cc864154cd3e02cb008218c48bbf5fb4037    -        io.containerd.runtime.v1.linux    
36b942129fbf32fbccadb9ba85e9b4a762c0c7712aa9f8f6a1493f988b638bcf    -        io.containerd.runtime.v1.linux    
416dedd29728c21f68db526b964a5b0e822c613d50ed6316146ef0982a81af12    -        io.containerd.runtime.v1.linux    
446a75f98af3a1faf32712e9a5cedd94a840ec0c7cbd91a138f6baee5f6c1293    -        io.containerd.runtime.v1.linux    
57e33e81ed90ba6040c6a40aba4db5170c34d3a0617e54a706ef0e12eeb0578a    -        io.containerd.runtime.v1.linux    
650c6c8a6b9b924dca94c0e71f752a7db97e4fc8af5835d007bb661fac184b4a    -        io.containerd.runtime.v1.linux    
6ca6c52f20e74a442fe3cac9e4851594033119a2d60a7c209086535b5a171512    -        io.containerd.runtime.v1.linux    
77bdeaa09a6d14dc9e7b188fd2bb8100cc5993c715afb11457da331fe4846ca9    -        io.containerd.runtime.v1.linux    
7b6b3da1649e2043e0b90d8929f5d46f384aec9840c268cb200945e953fd8bd8    -        io.containerd.runtime.v1.linux    
9e3998bbdf5fab0cc7c6fa36ed8568d6d0cb98aec3fe15448b4e9ea066769b17    -        io.containerd.runtime.v1.linux    
abc2b804aad50dd6e2f9a3e434a1009b4f9ff4feb0b234a61564769e4012bd87    -        io.containerd.runtime.v1.linux    
c2d53fb1737b3e1c9e346e8c012035c6f6676be7acc75409e4da2b98a5f87ea6    -        io.containerd.runtime.v1.linux    
d31f95dce5a72f3a6514435d7574e718a583bbe90e4f0838a23b72555bd2b77f    -        io.containerd.runtime.v1.linux    
dca0e59c8df0a38ef18291d3991dc3ce820177d26df08ed7e7073952abf63677    -        io.containerd.runtime.v1.linux    
f40f633757e62e2964a285988a92e9471c31a17515fcc64187e9287ec113e15c    -        io.containerd.runtime.v1.linux    
$ sudo docker container ls
0d5ae9d348f9        fc241370a696           "python worker.py"       2 hours ago         Up 2 hours                              k8s_dockercoins-worker_worker-77c65b4f44-7682p_default_37a39a9d-a59d-4125-882b-330e4d1628f5_1
c2d53fb1737b        bfe3a36ebd25           "/coredns -conf /etc…"   2 hours ago         Up 2 hours                              k8s_coredns_coredns-74ff55c5b-vj4xq_kube-system_2a1dc072-504c-4352-8db1-1120c6499754_1
30a4d32771d4        081a5bf738ad           "/usr/bin/kube-contr…"   2 hours ago         Up 2 hours                              k8s_calico-kube-controllers_calico-kube-controllers-56b44cd6d5-rgj25_kube-system_0bca3060-9cb5-464e-b1dd-04c3ca3096ad_1
10bd15556fb6        redis                  "docker-entrypoint.s…"   2 hours ago         Up 2 hours                              k8s_redis_redis-6749d7bd65-nj6tw_default_d25bcfd0-1708-438f-992b-c06b58da75f3_1
6ca6c52f20e7        744d16381064           "python rng.py"          2 hours ago         Up 2 hours                              k8s_dockercoins-rng_rng-64dc757f75-z5v2z_default_3a15a436-edad-4d97-9339-0767d785028c_1
9e3998bbdf5f        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_worker-77c65b4f44-7682p_default_37a39a9d-a59d-4125-882b-330e4d1628f5_1
36b942129fbf        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-kube-controllers-56b44cd6d5-rgj25_kube-system_0bca3060-9cb5-464e-b1dd-04c3ca3096ad_4
abc2b804aad5        bfe3a36ebd25           "/coredns -conf /etc…"   2 hours ago         Up 2 hours                              k8s_coredns_coredns-74ff55c5b-fgjl2_kube-system_12af054d-b38f-417d-ae91-882ecdcf485d_1
012928c9508c        487bf8f4aa7f           "ruby hasher.rb"         2 hours ago         Up 2 hours                              k8s_dockercoins-hasher_hasher-5dc5698bfc-bw46h_default_0542ad8f-fda4-4505-9dca-5b4b590476d2_1
f40f633757e6        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_coredns-74ff55c5b-vj4xq_kube-system_2a1dc072-504c-4352-8db1-1120c6499754_5
040fc0550aea        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_rng-64dc757f75-z5v2z_default_3a15a436-edad-4d97-9339-0767d785028c_1
650c6c8a6b9b        d5ee8b2f0a4a           "node webui.js"          2 hours ago         Up 2 hours                              k8s_dockercoins-webui_webui-5bc8d89fb-9crbb_default_7fbbceb8-0815-4e0d-b61f-9d7a589c4af3_1
7b6b3da1649e        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_coredns-74ff55c5b-fgjl2_kube-system_12af054d-b38f-417d-ae91-882ecdcf485d_5
446a75f98af3        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_hasher-5dc5698bfc-bw46h_default_0542ad8f-fda4-4505-9dca-5b4b590476d2_1
dca0e59c8df0        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_webui-5bc8d89fb-9crbb_default_7fbbceb8-0815-4e0d-b61f-9d7a589c4af3_1
77bdeaa09a6d        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_redis-6749d7bd65-nj6tw_default_d25bcfd0-1708-438f-992b-c06b58da75f3_1
416dedd29728        15f795b449d2           "start_runit"            2 hours ago         Up 2 hours                              k8s_calico-node_calico-node-nnvzf_kube-system_ee3b579e-729b-466b-a67a-7b101bb7bd90_1
d31f95dce5a7        10cc881966cf           "/usr/local/bin/kube…"   2 hours ago         Up 2 hours                              k8s_kube-proxy_kube-proxy-d9d6r_kube-system_a4aaab4e-1af3-4712-b0a3-b722e538a349_1
198d68b3cae7        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-node-nnvzf_kube-system_ee3b579e-729b-466b-a67a-7b101bb7bd90_1
57e33e81ed90        k8s.gcr.io/pause:3.2   "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-proxy-d9d6r_kube-system_a4aaab4e-1af3-4712-b0a3-b722e538a349_1

CRIがContainerdの場合

では、ContainerdをCRIとしてKubernetesクラスタをセットアップしましょう。

Container runtimesに従い、まずContainerdをセットアップします。

$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
$ sudo sysctl --system
$ sudo mkdir -p /etc/containerd
$ sudo containerd config default | sudo tee /etc/containerd/config.toml
$ sudo systemctl restart containerd

kubeadm initに --cri-socket=/run/containerd/containerd.sock オプションを与えてContainerdソケットを明示的に指定します。Dockerを使わなくなったので、kubeletのログからはdockershimの警告は消えています。

$ sudo journalctl -u kubelet | grep dockershim
$

また、2台目のノードをクラスタに参加させます。この際、2台目のノードにもContainerdの設定を行い、kubeadm joinコマンドにも --cri-socket=/run/containerd/containerd.sock オプションを付与することをお忘れなく。

そしてCalicoをインストールし、同様にDockerCoinsを動かし、プロセスツリーを見てみましょう。

$ hostname
node01
$ ps axf
:
10176 ?        Ssl    0:39 /usr/bin/containerd
10207 ?        Ssl    0:01 /usr/bin/dockerd -H fd:// --containerd=/run/container
11173 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
11263 ?        Ss     0:00  \_ /pause
11491 ?        Ssl    0:23  \_ etcd --advertise-client-urls=https://192.168.123.
11184 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
11299 ?        Ss     0:00  \_ /pause
11557 ?        Ssl    1:40  \_ kube-apiserver --advertise-address=192.168.123.21
11204 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
11312 ?        Ss     0:00  \_ /pause
11566 ?        Ssl    0:05  \_ kube-scheduler --authentication-kubeconfig=/etc/k
11216 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
11339 ?        Ss     0:00  \_ /pause
11517 ?        Ssl    0:22  \_ kube-controller-manager --allocate-node-cidrs=tru
11802 ?        Ssl    0:35 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernet
12001 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
12026 ?        Ss     0:00  \_ /pause
12075 ?        Ssl    0:00  \_ /usr/local/bin/kube-proxy --config=/var/lib/kube-
14327 ?        Sl     0:01 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
14360 ?        Ss     0:00  \_ /pause
15244 ?        Ss     0:00  \_ /usr/bin/runsvdir -P /etc/service/enabled
15297 ?        Ss     0:00      \_ runsv bird6
15426 ?        S      0:00      |   \_ bird6 -R -s /var/run/calico/bird6.ctl -d 
15298 ?        Ss     0:00      \_ runsv felix
15302 ?        Sl     0:08      |   \_ calico-node -felix
15299 ?        Ss     0:00      \_ runsv confd
15304 ?        Sl     0:00      |   \_ calico-node -confd
15300 ?        Ss     0:00      \_ runsv bird
15427 ?        S      0:00          \_ bird -R -s /var/run/calico/bird.ctl -d -c
:
$ hostname
node02
$ ps axf
:
 9786 ?        Ssl    1:02 /usr/bin/containerd
 9824 ?        Ssl    0:01 /usr/bin/dockerd -H fd:// --containerd=/run/container
11435 ?        Ssl    0:22 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernet
11631 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
11665 ?        Ss     0:00  \_ /pause
11767 ?        Ssl    0:00  \_ /usr/local/bin/kube-proxy --config=/var/lib/kube-
12196 ?        Sl     0:01 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
12221 ?        Ss     0:00  \_ /pause
13225 ?        Ss     0:00  \_ /usr/bin/runsvdir -P /etc/service/enabled
13378 ?        Ss     0:00      \_ runsv bird6
13531 ?        S      0:00      |   \_ bird6 -R -s /var/run/calico/bird6.ctl -d 
13379 ?        Ss     0:00      \_ runsv felix
13383 ?        Sl     0:11      |   \_ calico-node -felix
13380 ?        Ss     0:00      \_ runsv confd
13385 ?        Sl     0:00      |   \_ calico-node -confd
13381 ?        Ss     0:00      \_ runsv bird
13532 ?        S      0:00          \_ bird -R -s /var/run/calico/bird.ctl -d -c
13323 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
13351 ?        Ss     0:00  \_ /pause
13817 ?        Ssl    0:00  \_ /usr/bin/kube-controllers
13582 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
13611 ?        Ss     0:00  \_ /pause
13966 ?        Ssl    0:02  \_ /coredns -conf /etc/coredns/Corefile
13704 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
13730 ?        Ss     0:00  \_ /pause
14005 ?        Ssl    0:02  \_ /coredns -conf /etc/coredns/Corefile
15854 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
15887 ?        Ss     0:00  \_ /pause
16512 ?        Ssl    0:00  \_ redis-server *:6379
16028 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
16068 ?        Ss     0:00  \_ /pause
16794 ?        Ssl    0:02  \_ ruby hasher.rb
16140 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
16173 ?        Ss     0:00  \_ /pause
16986 ?        Ss     0:01  \_ python rng.py
16220 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
16268 ?        Ss     0:00  \_ /pause
17293 ?        Ssl    0:01  \_ node webui.js
16284 ?        Sl     0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -i
16329 ?        Ss     0:00  \_ /pause
17390 ?        Ss     0:06  \_ python worker.py
:

Docker (dockershim)をCRIとしている場合と、少し違うことがわかると思います。

crictl、docker、ctrの各コマンドでコンテナを確認してみましょう。

$ hostname
node01
$ sudo crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps
CONTAINER ID        IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
011a6d3d65a1b       15f795b449d29       2 minutes ago       Running             calico-node               1                   7776ddb1b4f09
f289efafda317       10cc881966cfd       2 minutes ago       Running             kube-proxy                1                   57300d42f0cf5
05e509ff18df5       0369cf4303ffd       2 minutes ago       Running             etcd                      1                   a81e6dec9753a
8b64121e8868e       ca9843d3b5454       2 minutes ago       Running             kube-apiserver            1                   8ae7dfc3f93c2
9ca34d77adaa3       b9fa1895dcaa6       2 minutes ago       Running             kube-controller-manager   1                   7d53d0f602088
29469e4ea18bc       3138b6e3d4712       2 minutes ago       Running             kube-scheduler            1                   017ba8b30fb45
$ sudo docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ sudo ctr namespace ls
NAME   LABELS 
k8s.io        
$ sudo ctr --namespace k8s.io container list
CONTAINER                                                           IMAGE                                                                      RUNTIME                  
011a6d3d65a1b3f237880c51202b6540f84d685a2e9c6ac2b49af70b16e0caa2    docker.io/calico/node@sha256:f0fa77e900d79c2c9aeb4bdd03f68ed5d7fa891e404544a196e5b27203d9386e                  io.containerd.runc.v2    
017ba8b30fb45c461ebae759331d6c43ab11a35551c2f3313bbadee8dec6656d    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
05e509ff18df5f13f4558dfe557bc4d7b9fa45bb275ee1389b5099f44a6f302f    sha256:0369cf4303ffdb467dc219990960a9baa8512a54b0ad9283eaf55bd6c0adb934                                        io.containerd.runc.v2    
1242ba84d50b82584115ce83def4e678eeed7089bda75155d8a188d844c38fb1    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
1a0117f56f27b72858d1903ef2fcea25e3ce3fed278d755d28379375a3cc5fa2    docker.io/calico/pod2daemon-flexvol@sha256:41420907445f5b77897771ac17048d9191a04898adc5af1402953d209d454a91    io.containerd.runc.v2    
2003751162c2cd551d3c8442ec7abd0b84f8938df923d65e6588b4f49a283de6    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
2940bdeebdc9449c71943584de202b3a260b464459a4074c48dd6a896ce121bc    docker.io/calico/cni:v3.9.6                                                                                    io.containerd.runc.v2    
29469e4ea18bcddcfc3093c1557ed4af37eff7322d8688062e62b28a2cca9757    k8s.gcr.io/kube-scheduler:v1.20.0                                                                              io.containerd.runc.v2    
39396557abdde953c8d29f9b96ec6f08ab508dea14e233fb78420a5f7e7867bf    k8s.gcr.io/etcd:3.4.13-0                                                                                       io.containerd.runc.v2    
57300d42f0cf50adcaf280d338f0228811a4db406358cab0a59dc5637db2ebbc    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
6431f29ab873eadf97b22807fd9e88bc44060a7b2784a5fd02cfda53714d3900    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
6f605db00c97f7b695809b56249e8af473039e3134bc9fcbabfca746b21952d1    k8s.gcr.io/kube-scheduler:v1.20.0                                                                              io.containerd.runc.v2    
73f9af29c1aa51cd0cd1c97f7a5afd511c8018ef7aef3337f5df03ff827389ac    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
74b3029e69c6a27a445acccd6e0386c472271c8262717746e8667c9940e966b0    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
7776ddb1b4f09b2ec3f64b2aeeb96462acc2e153f2d57b875d0d9e4eccc8250a    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
7809920884a723a1a02200cac85e28891ff89294ea9218f51170b8cf120b4a3b    k8s.gcr.io/kube-apiserver:v1.20.0                                                                              io.containerd.runc.v2    
7d53d0f602088a0861c701a3497bb41327534c6d9a6e1254838f860a4113c9f5    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
83352d3481146131ac6b2c6168a0db48760599a0dd9edde6f4964016bc70454a    docker.io/calico/cni:v3.9.6                                                                                    io.containerd.runc.v2    
88bafbb6ce224b914980f2ec658d0eb3a0a709e16fba83b331688fbe5ddc8865    k8s.gcr.io/kube-proxy:v1.20.0                                                                                  io.containerd.runc.v2    
8ae7dfc3f93c218500dfc18037ac0549685a52a81a972931e3b9a94469facfa9    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
8b64121e8868e6a5d0aa7034dc10d9a5bbe3cab0c308d6e95c0385417d748985    k8s.gcr.io/kube-apiserver:v1.20.0                                                                              io.containerd.runc.v2    
9ca34d77adaa34e0fba88727d5a6e2ec7cb8c8de605ca1f385c70cf259e85c14    k8s.gcr.io/kube-controller-manager:v1.20.0                                                                     io.containerd.runc.v2    
a03a94c234ceb4bdcdfd7b924cd13d366b3cbae15dc02f61382fb2df2465c32c    sha256:b9fa1895dcaa6d3dd241d6d9340e939ca30fc0946464ec9f205a8cbe738a8080                                        io.containerd.runc.v2    
a81e6dec9753a2f6bf616edab5f650ea0294a6c783a82eb8ba73322ba3bfc400    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
c4a7992ea35f360fccbd16584f591c30243de1cd9be4584b9f345d797c686515    docker.io/calico/node:v3.9.6                                                                                   io.containerd.runc.v2    
e17ed99476b6431aae120ab5422101411153cd3ee6c60e08c96dbb77093b136f    k8s.gcr.io/pause:3.2                                                                                           io.containerd.runc.v2    
f289efafda3172e01b3a6e77fb7af88f8ea1d07b4db68eeb709f270f2ee91f23    k8s.gcr.io/kube-proxy:v1.20.0                                                                                  io.containerd.runc.v2    
$ hostname
node02
$ sudo crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps
CONTAINER ID        IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
78af29ce07369       74d1072210928       2 minutes ago       Running             redis                     1                   277fecdda41e0
d4bf8171f8653       487bf8f4aa7f6       2 minutes ago       Running             dockercoins-hasher        1                   0057733f2fa98
f4360be916dd2       bfe3a36ebd252       2 minutes ago       Running             coredns                   1                   6293cd9e350b6
aed06ee774342       744d16381064b       2 minutes ago       Running             dockercoins-rng           1                   41f09b5c8f897
25f9f6b8da172       bfe3a36ebd252       2 minutes ago       Running             coredns                   1                   d182c5788bd73
f69b8ae9d1949       081a5bf738add       2 minutes ago       Running             calico-kube-controllers   1                   4f848a6e62ab0
706f4392adb20       fc241370a696c       2 minutes ago       Running             dockercoins-worker        1                   9dc4b86c86f65
2078c341b6417       d5ee8b2f0a4af       2 minutes ago       Running             dockercoins-webui         1                   c044156b5b723
14290a19e41ea       15f795b449d29       2 minutes ago       Running             calico-node               1                   3f285f9bd1294
23d9b77e89db5       10cc881966cfd       2 minutes ago       Running             kube-proxy                1                   7fdb0b2ac831b
$ sudo docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ sudo ctr namespace list
NAME   LABELS 
k8s.io        
$ sudo ctr --namespace k8s.io container list
CONTAINER                                                           IMAGE                                                                                         RUNTIME                  
0057733f2fa98def3a7acdb935fd4511ff50ad1532126895c30dd5a9bd839ef0    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
04c72cdcd3059078d8f01d9aef84b91e2f967ba79b09fbf9b20b3a212db1c6e9    docker.io/training/dockercoins-webui:1.0                                                                       io.containerd.runc.v2    
0a818bae34e0e80542814ee4d9d61963513183abd5ebbf335a3fa2444f3ecdde    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
14290a19e41ea7f4035d9c11d918a90f31ffea69ae3b81a7170deb0ef92340da    docker.io/calico/node:v3.9.6                                                                                   io.containerd.runc.v2    
193fbfc7c5081413d03cb1c01cbfb0c592a4f37cf94681dea90fee5ccf966ddd    docker.io/training/dockercoins-hasher:1.0                                                                      io.containerd.runc.v2    
1f90d9f9220886d25e20c6be947646b55e00e868d4fcba8ee6876b92d9a4fd9d    k8s.gcr.io/coredns@sha256:73ca82b4ce829766d4f1f10947c3a338888f876fbed0540dc849c89ff256e90c                     io.containerd.runc.v2    
2078c341b641792bc056d785d448e589266f94182fd1ae5e772731ee6fa9a3bf    docker.io/training/dockercoins-webui:1.0                                                                       io.containerd.runc.v2    
23d9b77e89db583f505576601354c2925f7137dfb14aff1205fdcdf65fae6510    k8s.gcr.io/kube-proxy@sha256:40423415eebbd598d1c2660a0a38606ad1d949ea9404c405eaf25929163b479d                  io.containerd.runc.v2    
25f9f6b8da17282c532268787cb86189737cbfb96f76d0477db839f253870f73    k8s.gcr.io/coredns@sha256:73ca82b4ce829766d4f1f10947c3a338888f876fbed0540dc849c89ff256e90c                     io.containerd.runc.v2    
277fecdda41e09fbe1b148d713ef33162233fd815d66e57148325b4eb7b4b543    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
3f285f9bd129455a23c1a6f471e478e911906e443c2e4e88fdaa842bb2434fc4    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
41f09b5c8f8976c0908d770b43d80195d0932fdb1a44cdf87efb8d3d930d4f3d    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
455aa20edf705544e48bc1927739fdb72ea58df3f2e34e888bcb074e1cc770a6    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
4acfb1e13f6991a282a4b128e2e3f0aeb38b04a40fbc07747b6b3b2d5998882f    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
4f848a6e62ab0a131c076ba3d89e1101330f7a31eb10197903279487a4c514ab    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
5d00fa02b4d7cb5ecf609a7dddbbba5fecce4e6b662ff67fe1fd920baa1eba1c    docker.io/training/dockercoins-worker:1.0                                                                      io.containerd.runc.v2    
5dec789a7d3c7588004db236eada00e04b1a56f71d4dd99d563d5846c456d16c    sha256:744d16381064b8a08ba13b94668c045eb2cd8008b78e5923e53cfc0ccfa7a6fb                                        io.containerd.runc.v2    
626f4cd8ef232970a909490770d2dc90aced23a6a7806268abf1e3033150318b    docker.io/calico/pod2daemon-flexvol@sha256:41420907445f5b77897771ac17048d9191a04898adc5af1402953d209d454a91    io.containerd.runc.v2    
6293cd9e350b6f73341160ab55f99db2e81255922b6d4de9dfa2972fb35f456e    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
63015641d706cfc74b13c38474fd4862f8f5adb40105c42514dfa3594b523636    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
706f4392adb2062382452a610ad192e9e83c9e1fb1838609a09834895e2af0c7    docker.io/training/dockercoins-worker:1.0                                                                      io.containerd.runc.v2    
78af29ce073695a53d6d9b9d3b0a1f60eecd56ff65f959eefd4ef236a0693e16    docker.io/library/redis@sha256:5b98e32b58cdbf9f6b6f77072c4915d5ebec43912114031f37fa5fa25b032489                io.containerd.runc.v2    
7fdb0b2ac831b3ce4bcc662ef3eee303311c13d8107fba3008f56c4fdb7fb90f    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
80e4664abbf306d0908407511530823e723a7e39bf3c4a8a4a81d52881eb389a    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
82256ea1d1ac27fc8ee30cdcf571c0e012a93b453ca5ca5f77423c18fcb9fcca    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
9b0b1a1742e43bab315b602ab7e3a60210a248b60aaea9a3dc51928e2626aafe    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
9dc4b86c86f65257ff6f2def2f7ef1fea80fa10e30a0dbabcd52b328a1424972    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
aed06ee7743426f236bc170f5cb50d97d819ea259c3622139766376f397b12d0    docker.io/training/dockercoins-rng:1.0                                                                         io.containerd.runc.v2    
b1da090047327eb9037dfe9239736b4076da7388704e77653625ca765ace20b0    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
b9fc442066072200fbaa2d98446c7edda9ddb309b5a705bf295b839a372716ba    sha256:0ce7550069ed9c806ed28c0f83b6881191ce94390e23f67aaf94e539978992b8                                        io.containerd.runc.v2    
c044156b5b7237069385252ab1ab59431514fc4725972feabf9b35d83f1017cf    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
c4f5c5e457ab548a2e0b100af188bdbfe32865c808011d81fc478d731dd29d34    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
c96837c2982a10f48b9f7d35827209517c910d19dc31d08f2d70344177bee751    k8s.gcr.io/coredns@sha256:73ca82b4ce829766d4f1f10947c3a338888f876fbed0540dc849c89ff256e90c                     io.containerd.runc.v2    
cb7e2dbc4e4eefed6c3e3c92ea7c47d0e7e6f76fbd60c97d262abbe1fa3bef42    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
d182c5788bd731443e1ef8330575172d4bec7291f88c14380705d4d416272d9b    k8s.gcr.io/pause@sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f                       io.containerd.runc.v2    
d4bf8171f865384de3655cbf471dbe58a475e6c1d50c8ae37fc71dc09595c8ac    sha256:487bf8f4aa7f6c69f4a4253a5706f603c8d0cd5579dd174c83cc222ea3b89bba                                        io.containerd.runc.v2    
d99d4117d366d456fe0f02db3af1cee174af0ae2185ea640ee9f1b7051595487    docker.io/calico/kube-controllers:v3.9.6                                                                       io.containerd.runc.v2    
ee7e4ae849ee7eea887d1b477fbab9f22ac6d1ff5ff28294dc579675f23085bb    sha256:0ce7550069ed9c806ed28c0f83b6881191ce94390e23f67aaf94e539978992b8                                        io.containerd.runc.v2    
ef39815281fd614c2a2d3c91d13f3da5c2b68eff5e6edfc1eeecdfa39bb46243    sha256:74d107221092875724ddb06821416295773bee553bbaf8d888ababe9be7b947f                                        io.containerd.runc.v2    
f4360be916dd28e35caa78e202a72144f46fca2482b68ce4d23e40c941c77832    k8s.gcr.io/coredns@sha256:73ca82b4ce829766d4f1f10947c3a338888f876fbed0540dc849c89ff256e90c                     io.containerd.runc.v2    
f5565d6cff2e1695d18d9ae28bf9f12cfb63ccaa1f914f33edc5c7f001587187    sha256:10cc881966cfd9287656c2fce1f144625602653d1e8b011487a7a71feb100bdc                                        io.containerd.runc.v2    
f69b8ae9d1949afa9e10a04d9ca2f82893990fdddc29ad15e93bbdbc893b8584    docker.io/calico/kube-controllers:v3.9.6                                                                       io.containerd.runc.v2    
f83167d9386ff7c627e3f37d270dc3fe75b5993b79bcb6b45e894be46af64795    docker.io/calico/node:v3.9.6                                                                                   io.containerd.runc.v2    

このように、Docker管理下におかれていないためdockerコマンドではコンテナは確認できず、crictlコマンドとctrコマンドにて確認できるようになっています。
またDockerイメージをそのままContainerd管理下で実行できていることもわかります。

まとめ

Kubeadmを用いて、現在のデフォルトのCRIであるDocker (dockershim)の場合と、CRIにContainerdを指定した場合のそれぞれでサンプルアプリを動かし、状態を比較してみました。
Containerdは現在のデフォルトではないため、利用する場合はインストールや確認の手順がデフォルトのDockerの場合と異なるので多少戸惑うことがあるかもしれません。ただ、今後Containerdがデフォルトとなればそのような戸惑いはなくなるでしょう。
そしてDockerイメージはそのまま利用でき、今回のサンプルアプリで簡単に確認した限りは特に問題なく動作するようなので、クラスタの利用者側には大きな影響はないように見えます。

ただし、クラスタの運用者は、いずれ決断を迫られます。
今回はDockerを使ったクラスタとContainerdを使ったクラスタを別個に用意して比較してみましたが、実際の運用では将来Mirantis社とDocker社が提供するdockershimを導入してDockerをCRIとして使い続けるか、CRIをContainerdに切り替えるかを決定しなければいけません。

クリエーションラインでは今後も動向を追い続けていきたいと思います。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA