7.5 容器运行时
容器运行时(container runtime),对于 runtime 理解是:“为了运行特定语言而提供的特定实现和设计”。 具体到容器运行时的理解,通俗地讲就是:容器从拉取镜像创建、启动、运行管理、销毁的一个完整生命周期。
以 Docker 为例,作为一个整体容器运行时实现,主要提供的功能如下:
- 制定容器镜像格式
- 构建容器镜像
- 运行容器
- …
1. 容器运行时分类
目前较为流行说法根据不同的功能实现将容器运行时分成了低层运行时(low-level)和高层运行时(high-level)两类。
通常只关注如 Namespace、Cgroups、镜像拆包等基础的容器运行时实现被称为低层运行时(low-level container runtime)。而支持更多高级功能(如镜像管理和 CRI 实现)的运行时通常称为高层运行时(high-level container runtime)。
而特殊的 Docker 容器引擎,可以说是 high-high-level container runtime 。
两类运行时按照各自的分工,共同协作完成容器整个生命周期的管理工作。
7.5.1 底层容器运行时
底层容器运行时主要关注如何与操作系统交互,实现 OCI 运行时规范,利用符合标准的文件等资源运行容器。专注于管理容器的生命周期(创建,运行,销毁等)。
图:容器的生命周期
目前常见的底层容器运行时实现有:
- runc 目前应用最广泛的运行时,由 Docker 中 libcontainer 进化而来 。
- crun RedHat 推出的轻量级 OCI 运行时,C 语言编写,与 runc 比较效率更高、资源更省。
除以上基于内核抽象的运行时外,还有一些沙盒和虚拟化的运行时,这些运行时能隔离宿主和容器化进程,并同时遵循 OCI 规范。
- kata Containers 由 Clear Containers 和 Hyper.sh 的 runv 合并而来,口号是 Secure as VM、Fast as Container。
- gVisor Google 提供的安全隔离的轻量级容器运行时沙箱实现,资源占用较少、不需要运行完整 VM 的容器并提供安全隔离。
7.5.2 高层容器运行时
当引入 Kubernetes 容器编排时,为实现对接各类容器运行时,Kubernetes 在容器编排的角度上抽象了容器运行时的高级规范:也就是 CRI(Container Runtime Interface),与 OCI 运行时不同,实现 CRI 规范的运行时功能包括镜像管理和分发,存储,快照,网络等。
目前主流的高层容器运行时有 Dockershim、containerd 、CRI-O 等。
1. 工业级标准容器运行时 containerd
containerd 是一个从 Docker 项目中分离出来的高层运行时,符合 CRI 规范。默认情况下,底层是 runc。作为一个轻量级的容器运行时,containerd 旨在嵌入到更大的系统中,containerd 在 Docker 嵌入使用,也可以与 Kubernetes、Swarm 等容器编排工具集成使用,
containerd 在 Kubernetes 中的关系
2. Kubernetes 专用容器运行时 CRI-O
CRI-O 是由 Redhat 发起并专为 Kubernetes 设计容器运行时。 CRI-O 目标是让 kubelet 与运行时直接对接,减少任何不必要的中间层开销。由于 CRI-O 是 Kubernetes 社区开发的项目之一,因此它得到了广泛的社区支持和贡献。与其他运行时相比,CRI-O 在 Kubernetes 环境中无缝集成,同时提供更高的灵活性和稳定性。
CRI-O 架构图
CRI-O 的特点包括:
- 支持 OCI 容器格式标准。
- 具有高度自定义和可配置的设计,可以根据需要添加插件。
- 默认情况下支持 Pod 及其中的多个容器。
- 可以使用 CNI 来配置网络。
- 执行速度快,内存占用小,在安全性、稳定性等方面具有优势。
7.5.3 安全容器运行时:Kata Containers
尽管容器有许多技术优势,然而传统以 runc 为代表基于共享内核技术进行的软隔离还是存在一定的风险性。如果某个恶意程序利用系统缺陷从容器中逃逸,就会对宿主机造成严重威胁,尤其是公有云环境,安全威胁很可能会波及到其他用户的数据和业务。
将虚拟机的安全优势与容器的高速及可管理性相结合,为用户提供标准化、安全、高性能的容器解决方案,这就是 Kata Containers 出现的背景。
Kata Containers 安全容器的诞生解决了许多普通容器场景无法解决的问题,例如多租户安全保障、不同 SLO 混部容器混合部署、可信/不可信容器混合部署等等。在这些优势的基础上,Kata Containers 也在虚拟化上也追求极致的轻薄,从而让整体资源消耗和弹性能力接近 runc 容器方案,以此达到 Secure as VM、Fast as Container 的技术目标
Kata Containers 的特点包括:
- 容器和虚拟机二合一:Kata Containers 结合了容器和虚拟机的优点,既具有高性能和高效管理的特点,又拥有独立隔离性和安全性;
- 安全性:Kata Containers 使用轻量级虚拟化技术,为每个容器创建一个轻量级虚拟机,可以实现容器级别的隔离和安全;
- 可扩展性:Kata Containers 支持与多种容器管理工具,如 Docker 和 Kubernetes 集成,可以与现有的容器环境无缝集成;
- 兼容性:Kata Containers 能够支持 OCI(Open Container Initiative)规范,与现有的容器镜像和工具兼容。
Kata Containers 与传统容器技术的对比
1. Kata Containers in Kubernetes
Kata Containers 运行符合 OCI 规范,同时兼容 Kubernetes CRI (虚拟机级别的 Pod 实现)。为了高效地和 Kubernetes CRI 集成,现在的 Kata-Container 为了缩短容器的调用链直接将 containerd-shim 和 kata-shim 以及 kata-proxy 融合到一起。
CRI 和 Kata Containers 的集成下图所示:
添加评论