上QQ阅读APP看书,第一时间看更新
第3章 容器运行时
Kubernetes是一个容器编排器。然而,Kubernetes本身并不知道如何创建、启动和停止容器。相反,它将这些操作委托给一个叫作容器运行时的可插拔组件。容器运行时是一个软件,在集群节点上创建和管理容器。在Linux中,容器运行时使用一组内核基元,如控制组(cgroup)和命名空间(namespace),从容器镜像中生成一个进程。从本质上讲,Kubernetes(更具体地说是kubelet)与容器运行时一起运行容器。
正如我们在第1章中所讨论的,在Kubernetes之上构建平台的组织面临着多种选择。使用哪种容器运行时就是其中的一种选择。有选择是很好的,因为它可以让你根据自己的需要定制平台,实现创新和先进的用例。然而,鉴于容器运行时的基本性质,为什么Kubernetes不提供一个实现?为什么它选择提供一个可插拔的接口,把整体责任赋予另一个组件?
为了回答这些问题,我们将简要回顾容器的历史与发展过程。我们将首先讨论容器的出现,以及它们如何改变了软件开发的格局。毕竟,如果没有容器,Kubernetes很可能不会存在。然后,我们将讨论开放容器倡议(OCI),它是在容器运行时、镜像和其他工具的标准化需求下产生的。我们将回顾OCI规范以及它们与Kubernetes的关系。接下来,我们将讨论Kubernetes特定的容器运行时接口(CRI)。CRI是kubelet和容器运行时之间的桥梁。它规定了容器运行时必须实现的接口,以便与Kubernetes兼容。最后,我们将讨论如何为你的平台选择一个容器运行时,并回顾Kubernetes生态系统中的其他可用选项。