<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tim Allclair | 伪架构师</title>
    <link>/authors/tim-allclair/</link>
      <atom:link href="/authors/tim-allclair/index.xml" rel="self" type="application/rss+xml" />
    <description>Tim Allclair</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Thu, 11 Oct 2018 10:49:46 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>Tim Allclair</title>
      <link>/authors/tim-allclair/</link>
    </image>
    
    <item>
      <title>Kubernetes 1.12 中的 RuntimeClass</title>
      <link>/post/runtimeclass-in-kubernetes/</link>
      <pubDate>Thu, 11 Oct 2018 10:49:46 +0800</pubDate>
      <guid>/post/runtimeclass-in-kubernetes/</guid>
      <description>

&lt;p&gt;原文：&lt;a href=&#34;https://kubernetes.io/blog/2018/10/10/kubernetes-v1.12-introducing-runtimeclass/&#34; target=&#34;_blank&#34;&gt;Kubernetes v1.12: Introducing RuntimeClass&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;起初，Kubernetes 只支持运行于 Docker 容器中的 Linux 本地应用。Kubernetes 1.3 中，&lt;a href=&#34;https://kubernetes.io/blog/2016/07/rktnetes-brings-rkt-container-engine-to-kubernetes/&#34; target=&#34;_blank&#34;&gt;rtk&lt;/a&gt; 为首的其他运行时支持开始逐步浮现，促成了&lt;a href=&#34;https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/&#34; target=&#34;_blank&#34;&gt;容器运行时（CRI）&lt;/a&gt;的诞生，更多的项目也因此加入了这一行列 ：&lt;a href=&#34;https://katacontainers.io/&#34; target=&#34;_blank&#34;&gt;Kata Container&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/google/gvisor&#34; target=&#34;_blank&#34;&gt;gVisor&lt;/a&gt; 实现了更好的工作负载隔离；Kubernetes 的 Windows 支持也一直在&lt;a href=&#34;https://kubernetes.io/blog/2018/01/kubernetes-v19-beta-windows-support/&#34; target=&#34;_blank&#34;&gt;稳步发展&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;不同的容器运行时面向不同的使用场景，也就产生了在同一集群中使用混合运行时的需要。但是这所有不同的运行容器的方式都带来了一些亟待处理的问题：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;用户如何列出、并为工作负载选定合适的运行时？&lt;/li&gt;
&lt;li&gt;如何保证让 Pod 被调度到支持指定运行时的节点上？&lt;/li&gt;
&lt;li&gt;各种运行时都支持什么样的特性？如何让用户了解到这其中的兼容问题？&lt;/li&gt;
&lt;li&gt;多种运行时的不同资源开销如何应对？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;RuntimeClass&lt;/code&gt; 为此而来。&lt;/p&gt;

&lt;h2 id=&#34;kubernetes-1-12-中的-runtimeclass&#34;&gt;Kubernetes 1.12 中的 RuntimeClass&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;RuntimeClass&lt;/code&gt; 在 Kubernetes 1.12 中实现，目前为 Alpha 阶段。初始阶段的焦点是提供一个对运行时进行选择的 API，并且为解决其它多运行时方面的问题进行了一些尝试。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RuntimeClass&lt;/code&gt; 资源对 Kubernetes 集群上的容器运行时进行了描述。集群安装程序用 &lt;code&gt;RuntimeClass&lt;/code&gt; 对运行时进行安装、设置和定义。目前 &lt;code&gt;RuntimeClassSpec&lt;/code&gt; 包含一个字段 &lt;code&gt;RuntimeHandler&lt;/code&gt;。运行于节点上的 CRI 会对 &lt;code&gt;RuntimeHandler&lt;/code&gt; 进行解释，将其映射为实际的运行时配置。&lt;code&gt;PodSpec&lt;/code&gt; 也随之进行了扩展，加入了一个 &lt;code&gt;RuntimeClassName&lt;/code&gt; 字段，这个字段的值代表运行该 Pod 所需的 &lt;code&gt;RuntimeClass&lt;/code&gt; 的名称。&lt;/p&gt;

&lt;p&gt;为什么 &lt;code&gt;RuntimeClass&lt;/code&gt; 是个 Pod 级的概念？Kubernetes 资源模型能够在 Pod 中的不同容器之间共享某些资源。如果组成 Pod 的不同容器具有不同的资源模型，会对资源共享造成很大的挑战。例如在不同虚拟机之间共享 &lt;code&gt;loopback&lt;/code&gt; 适配器是极其困难的，但是在同一 Pod 中的两个容器之间进行通信时，这是个非常普遍的需要。&lt;/p&gt;

&lt;h2 id=&#34;下一步&#34;&gt;下一步？&lt;/h2&gt;

&lt;p&gt;要向控制面呈现运行时属性，&lt;code&gt;RuntimeClass&lt;/code&gt; 资源是个很重要的基础。例如要在多种不同运行时 Node 组成的集群中实现调度支持，我们可能需要在 &lt;code&gt;RuntimeClass&lt;/code&gt; 定义中实现 &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity&#34; target=&#34;_blank&#34;&gt;NodeAffinity&lt;/a&gt;。&lt;a href=&#34;https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview&#34; target=&#34;_blank&#34;&gt;Pod Overhead proposal&lt;/a&gt; 在这方面做出了一些早期尝试，和 &lt;code&gt;RuntimeClass&lt;/code&gt; 非常匹配，未来会逐步进行跟进。&lt;/p&gt;

&lt;p&gt;目前还提出了很多其它的 &lt;code&gt;RuntimeClass&lt;/code&gt; 扩展，会逐步进行进一步的研究和开发。正在考虑的扩展包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;呈现容器运行时所支持的可选特性，并为不兼容功能引发的错误提供更好的展示。&lt;/li&gt;
&lt;li&gt;将运行时的功能发现过程进行自动化，从而为自动的调度决策提供支持。&lt;/li&gt;
&lt;li&gt;提供运行时的自动注册功能，这样用户就可以在不停机的情况下为现有集群中安装新的运行时。&lt;/li&gt;
&lt;li&gt;为 Pod 的需求提供合适的 &lt;code&gt;RuntimeClass&lt;/code&gt;。例如指定运行时属性，让系统自行对 &lt;code&gt;RuntimeClass&lt;/code&gt; 进行匹配，从而避免显式指定 &lt;code&gt;RuntimeClass&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;至少到 2019 年。&lt;code&gt;RuntimeClass&lt;/code&gt; 的开发工作都会保持活跃，我们很高兴，从 Kubernetes 1.12 开始，这一功能以 Alpha 的形态成功面世。&lt;/p&gt;

&lt;h2 id=&#34;还有更多&#34;&gt;还有更多&lt;/h2&gt;

&lt;p&gt;作为一个 Alpha 功能，还需要一些额外的设置步骤才能够使用 &lt;code&gt;RuntimeClass&lt;/code&gt;。详情请参考 &lt;a href=&#34;https://kubernetes.io/docs/concepts/containers/runtime-class/#runtime-class&#34; target=&#34;_blank&#34;&gt;RuntimeClass 文档&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md&#34; target=&#34;_blank&#34;&gt;RuntimeClass Kubernetes ENhancement Proposal&lt;/a&gt; 之中包含了更多的设计细节。&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://docs.google.com/document/d/1fe7lQUjYKR0cijRmSbH_y0_l3CYPkwtQa5ViywuNo8Q/preview&#34; target=&#34;_blank&#34;&gt;Sandbox Isolation Level Decision&lt;/a&gt; 一文介绍了将此方案落地到 Pod 级的思考过程。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
