k8s 1.20からDockerは非推奨に
Kubernetesがコンテナランタイムと通信する際に使うCRIというAPI仕様をDockerはサポートしておらず、Kubernetesでは「dockershim」というブリッジ用のサービスを別で用意していました。こいつがDocker APIとCRIの変換をしてくれているわけですが、今回のdeprecationにより、ここから先は数マイナーリリース後に削除される見込みです。 もともとCRIが規定される前にはDockerしかk8sに対応していなかった?
ローカル環境でDockerを動かす分には非常に強力で、みなさんも開発環境で使われているという方は多いと思います(自分もそうです)。しかし、今回の騒動を理解するにあたっては「KubernetesにおけるDockerの立ち位置」を理解する必要があります。
K8sが実際に使うDockerの機能はContainerdだけ。ContainerdはDocker内部で使われているランタイム コンテナランタイム
CRIはKubernetesがコンテナランタイムと会話するために提供する規格
kubeletから命令を受けたCRIランタイムは、OCIランタイムに実際のコンテナの作成削除を、OCIランタイムのバイナリを実行することによって行います OCIランタイムはLinuxのシステムコールであるnamespaceとcgroupを用いて実際のコンテナ(ホスト上で隔離されたプロセス)を作成、削除する役割を持ちます。 今回の騒動はKubernetesにおけるDocker依存排除が目的