关于cncf:不要惊慌Kubernetes和Docker

54次阅读

共计 2428 个字符,预计需要花费 7 分钟才能阅读完成。

来奉献几分钟提交:2020 年 CNCF 中国云原生问卷

问卷链接(https://www.wjx.cn/jq/9714648…)


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

Kubernetes 在 1.20 版本之后将弃用 Docker 作为容器运行时。

你不须要惊恐。这并不像听起来那么戏剧化。

简略来讲:Docker 作为底层运行时正在被弃用,取而代之的是应用为 Kubernetes 创立的 CRI(Container Runtime Interface,容器运行时接口)的运行时。Docker 生成的镜像将持续在你的集群中与所有运行时一起工作,就像它们始终那样。

如果你是 Kubernetes 的最终用户,那么不会有太多的变动。这并不意味着 Docker 的沦亡,也不意味着你不能或不应该再应用 Docker 作为开发工具。Docker 依然是构建容器的有用工具,运行 Docker build 产生的镜像依然能够在 Kubernetes 集群中运行。

如果你正在应用像 GKE 或 EKS 这样的托管 Kubernetes 服务,那么在 Kubernetes 的将来版本中删除 Docker 反对之前,你须要确保你的工作节点应用的是受反对的容器运行时。如果你有节点自定义,则可能须要依据环境和运行时需要更新它们。请与你的服务提供商单干,以确保适当的降级测试和打算。

如果你在创立本人的集群,你还须要进行更改,以防止集群解体。在 v1.20,你将收到 Docker 的弃用正告。当 Docker 运行时反对在 Kubernetes 的将来发行版(目前打算在 2021 年底的 1.23 发行版)中被移除时,它将不再受反对,你将须要切换到其余兼容的容器运行时,如 containerd 或 CRI-O。只有确保你抉择的运行时反对你以后应用的 docker 守护过程配置(例如日志)。

那么,为什么会有这种困惑呢?每个人都在放心什么呢?

咱们在这里探讨的是两种不同的环境,这就造成了混同。在 Kubernetes 集群中,有一个称为容器运行时的货色,它负责提取和运行容器镜像。Docker 是该运行时的风行抉择(其余常见选项包含 containerd 和 CRI-O),然而 Docker 并不是被设计成嵌入到 Kubernetes 中,这就导致了一个问题。

你看,咱们称为“Docker”的货色实际上并不只是一个货色 – 它是一个残缺的技术堆栈,其中一部分是一个叫做“containerd”的货色,它自身是一个高级的容器运行时。Docker 很酷,也很有用,因为它有很多 UX 加强,使得在咱们进行开发工作时很容易与人交互,然而这些 UX 加强对 Kubernetes 来说不是必须的,因为它不是人。

因为有了这个对人敌对的形象层,你的 Kubernetes 集群必须应用另一个称为 Dockershim 的工具来取得它真正须要的货色,它蕴含在其中。这不太好,因为它给了咱们另一个须要保护的货色,而且可能会损坏。这里理论产生的是,Dockershim 最早将在 v1.23 版本就从 Kubelet 中删除了,从而勾销了对 Docker 作为容器运行时的反对。你可能会想,如果 containerd 蕴含在 Docker 堆栈中,为什么 Kubernetes 须要 Dockershim 呢?

Docker 与 CRI(容器运行时接口)不兼容。如果是的话,咱们就不须要垫片了,这就不成问题了。但这并不是世界末日,你也不用惊恐 – 你只须要将容器运行时从 Docker 更改为另一个受反对的容器运行时。

须要留神的一点是:如果你当初在集群中依赖底层 docker socket(/var/run/docker.sock)作为工作流程的一部分,迁徙到不同的运行时将会毁坏你应用它的能力。这种模式通常称为 Docker in Docker。对于这个特定的用例,有很多抉择,包含 kaniko、img 和 buildah。

然而,这种变动对开发人员意味着什么呢?咱们还在写 Dockerfile 吗?咱们还用 Docker 构建货色吗?

这一扭转解决了一个与大多数人应用 Docker 进行交互的不同环境。你在开发中应用的 Docker 装置与 Kubernetes 集群中的 Docker 运行时无关。我晓得这很令人困惑。作为一名开发人员,Docker 依然对你很有用,就像在这项更改发表之前一样。Docker 生成的镜像实际上并不是一个特定于 Docker 的镜像 – 它是一个 OCI(Open Container Initiative)镜像。无论你应用什么工具构建它,任何合乎 OCI 规范的镜像在 Kubernetes 看来都是一样的。containerd 和 CRI- O 都晓得如何提取这些镜像并运行它们。这就是为什么咱们有一个容器应该是什么样的规范。

所以,这种变动正在到来。这会给一些人带来问题,但这不是灾难性的,而且一般来说这是件坏事。取决于你如何与 Kubernetes 交互,这可能对你毫无意义,也可能意味着须要进行一些工作。从久远来看,这会让事件变得更简略。如果这依然让你感到困惑,那也没关系 – 这里产生了很多事件,Kubernetes 有很多变动的局部,没有人是 100% 的专家。咱们激励任何和所有的问题,无论教训程度或复杂性!咱们的指标是确保每个人都尽可能多地理解行将到来的变动。咱们心愿这曾经答复了你的大部分问题,缓解了你的一些焦虑!

点击浏览网站原文。


CNCF (Cloud Native Computing Foundation) 成立于 2015 年 12 月,隶属于 Linux  Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注 CNCF 微信公众号。

正文完
 0