kubeletが使うコンテナランタイムをdockerからcontainerdに変更する

kubeletが使うコンテナランタイムはこれまでdockerを使っていたのだが、別のものを試してみようということでcontainerdに変更してみた。

containerdをインストールする

containerdはaptでインストールできる(パッケージ: containerd)。また、containerdが使うLow Level Runtimeであるruncも同時にインストールされる。インストールした後、以下のコマンドを実行して設定のデフォルト値を /etc/containerd/config.toml に書き込み、systemctl start containerd で起動する。

$ containerd config default

kubeletからcontainerdを使う

kubeletの引数に以下を追加して再起動することで、containerdを使うようになる。

 --container-runtime=remote
 --container-runtime-endpoint=/run/containerd/containerd.sock

CRIのおかげで、これだけでランタイムを切り替えることができてとても便利。

ノード上で動いているコンテナ一覧を見るには

これまではdocker psを実行してそのノード上で動いているコンテナの一覧を表示していた。containerdの場合はどうすればいいのかというと、2つ方法がある。

まずはcontainerdに付属しているctrコマンド。namespaceフラグでk8s.ioを指定することで、kubeletによって作成されたコンテナの一覧を見ることができる。

$ sudo ctr --namespace k8s.io containers list
CONTAINER                                                           IMAGE                                                                                                    RUNTIME
24ff8b4bb5d6cdfdc5311aa44716a53fa7cd578da76b125e063660e8459ea96f    k8s.gcr.io/metrics-server-amd64:v0.3.1                                                                   io.containerd.runtime.v1.linux

しかし、コンテナのIDとイメージ、ランタイムしか見えずトラブルシュートに使うには物足りない。そこで、もう1つの方法としてcrictlを使うことができる。

https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md

crictlはCRIに互換性のあるコンテナランタイム向けのCLIツールである。crictl psでコンテナ一覧を見ることができる。表示項目はdocker psに近く、使いやすいだろう。また、docker psコマンドでコンテナ一覧を見るとコンテナ名が長くなり読みにくいが、crictlだと素朴に名前が表示されるので視認性も高い。しかし、pauseコンテナは表示されないのでその点は注意(見えないことで困ることがあるのかはよく分からない)。

$ sudo crictl ps
CONTAINER ID        IMAGE               CREATED             STATE               NAME                       ATTEMPT             POD ID
24ff8b4bb5d6c       61a0c90da56e7       22 hours ago        Running             metrics-server             0                   68dfed1214a0a

crictlはexecやlogsなど、ノード内でコンテナを見るときに使うコマンドも備えているので基本的にはこれを使い、必要に応じてctrコマンドを使うのが良さそう。なお、runcにもlistコマンドがありコンテナ一覧を表示できそうだったが何も見えなかった。

containerdをkubernetesから使ってみたい方、参考になれば幸いです。

reference

Leave a Reply

Your email address will not be published. Required fields are marked *