はじめに
k8s
がdockershim
をサポートしなくなるという話はずいぶん前からあって、いつか何とかしないとなーと思っていたのですが、軽く調べてもそれらしい情報が出てこなかったので放置していました。
が、ふと気になって調べてみるとドンピシャな情報が。
基本的には↑に書いてある通りなのですが、やってみると実際の手順は少なく、ものすごく簡単だったので改めてまとめてみます。
移行
Docker
はcontainerd
で動いているため、公式のインストール手順でもDocker
インストール時にcontainerd
も一緒にインストールしています。
そのため、基本的には設定を切り替えるだけで移行が完了します。
containerdの設定変更
以下のファイルを編集します。nano
でもvi
でもOKです。
sudo nano /etc/containerd/config.toml
disabled_plugins
という項目があるので、これをコメントアウトします。
#disabled_plugins = ["cri"]
ランタイム変更
こちらも、好きなエディタで開いてください。
sudo nano /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS
という環境変数が記載されているので、以下を追加します。
--container-runtime=remote --container-runtimeendpoint=unix:///run/containerd/containerd.sock"
全体ではこんな感じになります。
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.2
--resolv-conf=/run/systemd/resolve/resolv.conf --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
この環境変数が、kubelet
実行時に読み込まれるようです。
再起動
手順としてはこの2つのみになるので、再起動します。
ホストのアップデートなど、他に用があればkubectl drain
した後にノードを物理的に再起動しても良いのですが、サービスだけを再起動する場合は以下のコマンドになります。
sudo service containerd restart
sudo service kubelet restart
おわりに
今まで手をこまねていたのは何だったのかと思うほどあっさり終わりました。
ほぼ元記事を日本語にしただけですが、何かの参考になれば幸いです。