K8s 弃用 Docker? 看看 K8s 开发者怎么说?

Kubernetes将在v1.20后弃用Docker作为容器运行时,但这并不影响使用Docker构建的镜像在K8S集群中的运行。此改变主要针对CRI接口的实现,对大多数开发者影响有限。用户需要确保节点已支持K8S兼容的运行时,如containerd或CRI-O。Docker作为开发工具仍将继续使用,docker build构建的镜像也可照常运行。开发者无需恐慌,只需关注容器运行时的迁移即可。
摘要由CSDN通过智能技术生成

这几天 K8s 将弃用的 docker 各种刷屏

包括本拐也很疑惑,类似的文章有:

重磅!Kubernetes 将弃用 Docker!

Kubernetes 要弃用docker了,我们该怎么办?

恰巧最近翻看 K8s 的官网比较多,看到了官方对于这一改动的详尽解释,于是搬一下.

也是本拐的处女译! 哈哈

Don't Panic: Kubernetes and Docker

本文译自:

https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/

原作:

 Jorge Castro, Duffie Cooley, Kat Cosgrove, Justin Garrison, Noah Kantrowitz, Bob Killen, Rey Lejano, Dan “POP” Papandrea, Jeffrey Sica, Davanum “Dims” Srinivas

在v1.20后,Kubernetes将弃用 docker 作为容器的运行时.

不用害怕,不要慌张

Kubneretes 将只支持实现了CRI( Container Runtime Interface)接口的容器运行时,而docker 作为低层的容器运行时,将被弃用.当然,用 docker 构建的镜像仍然可以在 K8S 的集群中使用.

如果你是 K8S的终端用户,这个改动对你没有太大的影响. 这并不意味着 docker 将死,也不是说 docker 作为一个开发工具将被弃用.它仍然是一个强大运行容器,而且通过docker build 构建的镜像仍然可以运行在你的 K8S 集群中.

如果你是K8s 集群服务(比如GKE,EKS 或AKS)的使用者,在docker 运行的支持被移除前,你要保证你的节点已经具备了K8s支持的运行时. 如果你对节点进行了定制,升级前要与运营厂商确认已在现有的环境上进行了升级,并已经做了充足的测试和预案.

如果你在运维着自建集群,要做好准备以避免升级导致集群 down 掉.在1.20时,你会收到不建议使用 docker 的警告.在 K8s 的下一个版本(初步计划为2021年尾的1.21)时docker 作为运行时将被移除.你需要将其迁移到其他的的容器技术,比如 containered 或 CRI-O.只要确保能支持你当前 docker守护程序的配置即可(比如日志相关等).

所以为什么会担忧?在担忧什么呢?

我们其实说的是两种不同的情况(Docker 作为开发工具和 Docker 作为运行时),这两种情况混为一谈导致了你的困惑.在K8s 中,作为一种容器技术的 Docker,负责了镜像的拉取和运行.Docker 作为一种容器运行时确实有广泛的应用(对比 containerd 和 CRI-O),但问题在于,Docker 并不是为集成在 K8s 中而产生的.

事实上,我们称之为 Docker 的并不是并某一种特定技术,它是一套完整的技术栈,其中由它实现的一套高度抽象的容器运行时,我们称之为"containerd".除此之外,Docker 有一整套人机交互的工具,这些工具极大的提高了人们的开发效率,使它很酷,也很实用.但是,这些工具对 K8s 并没有用,因为 K8s 是一个系统,而不是一个人.

反而正是这些人机友好的交互工具,导致 K8s 需要额外的一个称之为Dockershim的工具来实现其真正的需求,即调度使用 docker 的"containerd"运行. 这并不完美,它引入了额外的成本,同时增加了系统的不稳定性.我们真正要做的是在 v1.23之前移除Dockershim,导致的表层结果,就是不再采用 docker 作为运行时.那么,即然 Docker 已经有了containerd这种运行时,为什么 K8s 需要额外的Dockershim?

问题在于,Docker 与 CRI(Container Runtime Interface)规范并不兼容,如果没有 shim,那么 Docker就无法在 K8s 上工作.然而你也没必要因此难过,更不是世界末日----你所有要做的只是换一个运行时而已.

注意的一点是,如果你的集群工作流中某一部分依赖于 docker  socket(/var/run/docker.sock), 那么迁移到其他运行时会导致这部分不可用.这种模式称之为 docker in docker . 实现这个特性有很多其他选项,比如 kaniko,img和 buildah.

开发者应该如何?继续 dockerfile 和 docker build 么?

所以,这次更改(移除 K8s中的 docker 运行时支持)并不是大多数人使用 docker 的场景.你的 docker 开发环境与 K8s 里的 Docker 运行时是无关的. 我知道这么说会让人困惑.作为开发者,这次改动对你的 docker 的使用没有影响.要知道,docker build 生成的image不是 docker 专用的 image ,而是一个 OCI image. 即,只要是 OCI 兼容的 image,不管你用什么方式构建,对 K8s 都是一样的,Containered和 CRI-O 都可以拉取和运行. 这也是为什么说容器是一种标准技术.

所以,这个更改只会给很少的人带来问题.它并不是灾难性的,事实上喧是一件好事. 根据使用 K8s 方式的不同,它对你几乎无影响,或只有很少的工作.长期看来,这个改动使事情更加简单(少了 dockershim).如果你还是表示担忧,那么也没毛病,因为事情不是一直不变,K8s 也是一样,没有人敢说自己百分之百的精通它.

我们期待与大家沟通任何问题,无论这些问题的复杂与否.我们的目标是让每个人尽可能多的了解可能的变化(少于3个),希望这篇文章解答了你的困惑,缓解了你的焦虑.

更多问题请参考   Dockershim Deprecation FAQ. 

https://kubernetes.io/blog/2020/12/02/dockershim-faq/

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值