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 地址。