<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh"><generator uri="https://jekyllrb.com/" version="4.1.1">Jekyll</generator><link href="http://www.zhaowenyu.com/feed.xml" rel="self" type="application/atom+xml" /><link href="http://www.zhaowenyu.com/" rel="alternate" type="text/html" hreflang="zh" /><updated>2021-03-13T22:20:55+08:00</updated><id>http://www.zhaowenyu.com/feed.xml</id><title type="html">温玉的WIKI博客</title><subtitle>这里是站点的描述信息 这里是第二行
</subtitle><author><name>Your Name</name></author><entry><title type="html">Kubernetes 运行时由 Docker 转为 CRI</title><link href="http://www.zhaowenyu.com/2020/12/02/dont-panic-kubernetes-and-docker.html" rel="alternate" type="text/html" title="Kubernetes 运行时由 Docker 转为 CRI" /><published>2020-12-02T00:00:00+08:00</published><updated>2020-12-02T00:00:00+08:00</updated><id>http://www.zhaowenyu.com/2020/12/02/dont-panic-kubernetes-and-docker</id><content type="html" xml:base="http://www.zhaowenyu.com/2020/12/02/dont-panic-kubernetes-and-docker.html">&lt;p&gt;Kubernetes 在 v1.20 版本之后将废弃 Docker 作为容器运行时。&lt;/p&gt;

&lt;!--more--&gt;

&lt;blockquote&gt;
  &lt;p&gt;Authors: Jorge Castro, Duffie Cooley, Kat Cosgrove, Justin Garrison, Noah Kantrowitz, Bob Killen, Rey Lejano, Dan “POP” Papandrea, Jeffrey Sica, Davanum “Dims” Srinivas&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Docker 作为底层运行时被废弃，转而使用为 Kubernetes 创建的 Container Runtime Interface(CRI) 的运行时&lt;/p&gt;

&lt;p&gt;Kubernetes 在 v1.20 版本之后将废弃 Docker 作为容器运行时。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;事实上你完全不需要感到恐慌。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker 作为底层运行时被废弃，转而使用为 Kubernetes 创建的 Container Runtime Interface(CRI) 的运行时，Docker 生成的镜像将继续在你的集群中与所有运行时一起工作。&lt;/p&gt;

&lt;p&gt;如果你是 Kubernetes 的终端用户，对你来说不会有太大的改变，这并不意味着 Docker 的死亡，也不意味着你不能或者不应该再使用 Docker 作为开发工具。Docker 仍然是一个非常有用的构建容器的工具，docker build 产生的镜像仍然可以在你的 Kubernetes 集群中运行。&lt;/p&gt;

&lt;p&gt;如果你使用的是像 GKE 或 EKS 这样的托管 Kubernetes 服务，在未来的 Kubernetes 版本中删除 Docker 支持之前，你需要确保你的 worker 节点使用的是支持的容器运行时，如果你有节点定制的需求，那么你可能需要根据你的环境和运行时需求来更新它们。请与你的云服务商合作，以确保适当的升级测试和规划。&lt;/p&gt;

&lt;p&gt;如果你要升级自己的集群，那么你还需要进行一些更改来避免集群崩溃。在 v1.20 时，你会收到 Docker 的废弃警告。当 Docker 运行时支持在 Kubernetes 的未来版本（目前计划在2021年底发布1.23版本）中被移除时，它将不再被支持，你需要切换到其他符合标准的容器运行时，如 containerd 或 CRI-O。只需确保你选择的容器运行时支持当前使用的 docker 守护程序配置即可（例如日志）。&lt;/p&gt;

&lt;h2 id=&quot;为什么大家都会感到困惑呢&quot;&gt;为什么大家都会感到困惑呢？&lt;/h2&gt;
&lt;p&gt;其实我们这里谈论的是两种不同的环境，这可能造成了大家的困惑。在你的 Kubernetes 集群内部，有一个叫做容器运行时的东西，负责拉取和运行你的容器镜像。Docker 是该运行时的一个流行选择（其他常见的选项包括 containerd 和 CRI-O），但 Docker 并没有被设计成嵌入 Kubernetes 内部，这就造成了一个问题。&lt;/p&gt;

&lt;p&gt;你会看到，我们称之为 Docker 的东西实际上并不是同一件事情，它是一个完整的技术栈，而其中包含一个叫 containerd 的东西，这个本身就是一个高级容器运行时。Docker 非常酷也非常有用，因为它具有许多 UX 增强功能，当我们在进行开发工作的时候操作非常方便，但是 UX 增强的功能并不是 Kubernetes 所必须的，因为 Kubernetes 并不是人（有种被抛弃的感觉呢~~）。&lt;/p&gt;

&lt;p&gt;由于这个对人类友好的抽象层，你的 Kubernetes 集群必须使用另一个叫做 Dockershim 的垫片工具来间接获取它真正需要的数据。这并不是很好的一种方式，因为我们还必须去多维护一套东西，增加了复杂性。Dockershim 将在 v1.23 版本时被从 Kubelet 中移除，这也因此移除了对 Docker 作为容器运行时的支持。你可能会想，containerd 包含在 Docker 栈中，为什么 Kubernetes 还是需要一个 Dockershim 呢？&lt;/p&gt;

&lt;p&gt;这是因为 Docker 并不符合CRI，即容器运行时接口，如果符合的话，我们就不需要这个 shim 了，也就不会发生今天这个事情了。但这并不是世界末日，你不需要惊慌–你只需要把你的容器运行时从 Docker 换成其他支持的容器运行时即可。&lt;/p&gt;

&lt;p&gt;不过需要注意的是：如果你今天在集群内依赖底层的 Docker 套接字 /var/run/docker.sock 作为工作流的一部分，转移到其他不同的运行时将对此产生影响。这种模式通常被称为 Docker IN Docker。对于这种特定的用例，有很多可供选择的工具，包括像 kaniko、img 和 buildah。&lt;/p&gt;

&lt;h2 id=&quot;对开发者来说意味着什么&quot;&gt;对开发者来说意味着什么？&lt;/h2&gt;

&lt;p&gt;作为一个开发者，Docker 对你来说仍然是有用的，在宣布这个变化之前它的所有方式都是有用的。Docker 产生的镜像并不是真正的 Docker 专用的镜像，它是一个 OCI（Open Container Initiative）镜像。任何符合 OCI 的镜像，无论你用什么工具来构建它，对 Kubernetes 来说都是一样的，containerd 和 CRI-O 都知道如何拉取这些镜像并运行它们。这就是为什么我们有一个关于容器应该是什么样子的标准。&lt;/p&gt;

&lt;p&gt;所以即将到来的这个变化，它会给一些人带来部分问题，但这并不是灾难性的问题，从长远来看，以后会变得更简单。如果这仍然让你感到困惑，也没太大关系 - Kubernetes 中有非常多的组件要做，没有人是100%的专家。我们的目标是确保每个人都能了解 Kubernetes，对即将发生的变化有更多的了解，希望这能解答你的大部分疑问，并安抚了一些焦虑的情绪!&lt;/p&gt;

&lt;h2 id=&quot;参考&quot;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;原文：https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Your Name</name></author><category term="kubernetes" /><summary type="html">Kubernetes 在 v1.20 版本之后将废弃 Docker 作为容器运行时。</summary></entry></feed>