美文网首页
小白解说容器编排之Kubernetes-CRI

小白解说容器编排之Kubernetes-CRI

作者: 小白说互联网 | 来源:发表于2021-11-02 06:39 被阅读0次

    大家好,我是小白。前面带大家入门了Kubernetes,今天给白白们讲解一下Kubernetes中的概念CRI (Container Runtime Interface)- 容器运行时接口。

    一、CRI的由来

    容器的兴起起自Docker,后来有了Kubernetes,所以在Kubernetes CRI 出现之前(也就是 Kubernetes v1.5 之前),Docker 作为第一个容器运行时,Kubelet 通过内嵌的 dockershim 操作 Docker API 来操作容器,进而达到一个面向终态的效果。在这之后,又出现了一种新的容器运行时 - rkt,它也想要成为 Kubernetes 支持的一个容器运行时,当时它也合到了 Kubelet 的代码之中。这两个容器运行时的加入使得 Kubernetes 的代码越来越复杂、难以维护。之后 hyber.sh 加入社区,也想成为第三个容器运行时。

    此时就有人站出来说,想到了标准化,将容器运行时的操作抽象出一个接口,将 Kubelet 代码与具体的容器运行时的实现代码解耦开,只要实现了这样一套接口,就能接入到 Kubernetes 的体系中,这就是我们后来见到的 Container Runtime Interface (CRI)。

    二、CRI 的实现

    引入了 CRI 接口之后,Kubelet 的架构如上图所示。

    跟容器最相关的一个 Manager 是 Generic Runtime Manager,就是一个通用的运行时管理器。我们可以看到目前 dockershim 还是存在于 Kubelet 的代码中的,它是当前性能最稳定的一个容器运行时的实现。remote 指的就是 CRI 接口。CRI 接口主要包含两个部分:

    一个是 CRI Server,即通用的比如说创建、删除容器这样的接口;

    另外一个是流式数据的接口 Streaming Server,比如 exec、port-forward 这些流式数据的接口。

    这里需要注意的是,我们的 CNI(容器网络接口)也是在 CRI 进行操作的,因为我们在创建 Pod 的时候需要同时创建网络资源然后注入到 Pod 中。

    目前 CRI 的主要实现:

     1. CRI-containerd

     2. CRI-O  

        等等

    CRI-containerd 是目前社区中比较主流的新一代 CRI 的实现,CRI-O 来自于红帽公司其他就不一一介绍了。

    CRI-containerd

    这套 CRI 接口是基于 containerd 实现的。在早期的实现中,CRI 其实是作为一个独立进程的,再跟 containerd 进行交互。这样一来又多了一层进程跟进程之间的开销,因此在后来的版本中 CRI 的是直接以插件的形式实现到 containerd 中的,成为了 containerd 的一部分,从而能够可插拔地使用 CRI 接口。

    整个架构看起来非常直观。这里的 Meta services、Runtime service 与 Storage service 都是 containerd 提供的接口。它们是通用的容器相关的接口,包括镜像管理、容器运行时管理等。CRI 在这之上包装了一个 gRPC 的服务。右侧就是具体的容器的实现,比如说,创建容器时就要创建具体的 runtime 和它的 shim,它们和 Container 一起组成了一个 Pod Sandbox。

    CRI-containerd 的一个好处是,containerd 还额外实现了更丰富的容器接口,所以它可以用 containerd 提供的 ctr 工具来调用这些丰富的容器运行时接口,而不只是 CRI 接口。

    CRI-O

    CRI-O是通过直接在 OCI 上包装容器接口来实现的一个 CRI 服务。它对外提供的只有具体的 CRI 接口,没有我们前面所提到的 containerd 提供的更丰富的接口。它主要包含两个部分,首先是对容器 runtime 的管理,另一个是对镜像的管理。

    CRI 相关的工具:

    • crictl

    一个类似docker的命令行工具,用来直接操作CRI接口调试容器问题。

    • critest

    用于验证CRI接口行为是否是符合预期。

    • 测试接口性能的性能工具

    相关文章

      网友评论

          本文标题:小白解说容器编排之Kubernetes-CRI

          本文链接:https://www.haomeiwen.com/subject/bthxzltx.html