#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 Docker」Dockershim 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に切り替えるかを決定しなければいけません。
クリエーションラインでは今後も動向を追い続けていきたいと思います。