Kubernetes v1.20中不再推荐使用Dockershim 常见问题FAQ

由于在Kubernetes v1.20中,Dockershim已大量被弃用而引起了很多讨论,所以我阅读并翻译了官方博客于2020年12月02日(星期三)。如果有任何错误,请在评论中指出。

为什么Dockershim被废弃了?

总结来说,对于Kubernetes来说,保留dockershim并不是一件令人开心的事。原因是Docker和Kubernetes所支持的容器运行时API规范不同。Kubernetes在与容器运行时进行协作时使用了称为CRI标准的API规范,但是Docker本身目前并没有实现CRI,所以出现了问题。

首先,Dockershim始终意图提供临时解决方案,因此被称为shim(接合件)。
此外,新的CRI(容器运行时接口)运行时实现了与dockershim大部分不兼容的功能,例如cgroups v2和Namespace。由于无法使用这些API来支持dockershim,因此无法继续支持dockershim。

基于这些问题,社区得出了不再支持dockershim的结论。

在 Kubernetes 1.20 版本中,是否仍然可以使用 Docker?

如果使用Docker作为运行时,
1.20版本只有一个变化,即在kubelet启动时会显示一个警告日志。

docker shim 何时会被删除?

听说最早也要到2021年下半年的1月23日。

你能像以前一样使用现有的Docker映像吗?

是的,通过docker build生成的镜像在所有的CRI实现中都可以正常运行。现有的镜像也会完全按照相同的方式运行。

你还可以像以前一样使用私人形象吗?

是的,所有的CRI运行时都通过PodSpec或ServiceAccount来支持与Kubernetes中使用的相同的拉取密钥配置。

现在,在实际环境中,有没有使用其他运行时的例子?

在kind项目中,我们早就开始使用containerd,并且使用它提高了用例的稳定性。kind和containerd每天都被用来验证对Kubernetes代码库的更改。另外,自2019年6月起,OpenShift 4.x在生产环境中使用CRI-O运行时。

您可以从以下页面查看有关containerd和cri-o的其他示例的采用者。

https://github.com/containerd/containerd/blob/master/ADOPTERS.md
https://github.com/cri-o/cri-o/blob/master/ADOPTERS.md

将上述链接中的内容用汉语进行翻译:
https://github.com/containerd/containerd/blob/master/ADOPTERS.md
https://github.com/cri-o/cri-o/blob/master/ADOPTERS.md

人们经常参考OCI,但它是什么?

OCI是标准化容器工具与技术之间接口的许多内容。OCI保持着OCI镜像规范(用于打包容器镜像的标准规范)和OCI运行时规范(用于执行容器的标准规范)。

使用哪种CRI的实施会比较好呢?

如果你正在使用Docker,将其迁移到容器中相对较简单。
但是,我建议您考虑CNCF的所有选项,以找到适合您环境的最佳选择。
这是一个复杂的问题。

在更改 CRI 实施时需要注意的要点是什么?

虽然Docker和大多数容器运行时(CRI)的基本容器化代码相同,但其周边存在一些差异。以下是在迁移时需要考虑的一些常见因素。

    • 設定のロギング

 

    • ランタイムリソースの制限

 

    • ノードプロビジョニングスクリプト

 

    • docker CLI またはKubectl プラグイン

 

    • Dockerへの直接アクセスが必要なKubernetesツール(例:kube-imagepuller

 

    • レジストリミラー、安全でないレジストリのようなレジストリの設定

 

    • dockerを利用するKubernetesの外で実行される他のサポートスクリプトやデーモン (監視やセキュリティエージェントなど)

 

    • GPUや特殊なハードウェアと、それらがランタイムやKubernetesとどのように統合されているか

 

    dockerd の設定をカスタマイズしている場合、可能な限り新しいコンテナランタイムに適応させる。(Kubernetes のリソース要求/制限やファイルベースのログ収集 DaemonSets を使用している場合は問題なく機能する。)

然而,为了进行系统维护的操作,以及在构建图像时嵌套在容器中的操作将无法运行。
关于前者,您可以使用crictl工具来执行操作。
关于后者,请使用不需要Docker的新的容器构建选项,比如img、buildah、kaniko等。

请参考

请不要慌张-关于 Kubernetes 和 Docker(https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)的文章地址。
关于 DockerShim 的常见问题解答(https://kubernetes.io/blog/2020/12/02/dockershim-faq/)的文章地址。
关于删除 DockerShim 的 Kubernetes 增强功能提案(https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1985-remove-dockershim)的 GitHub 地址。

bannerAds