本文试图简要介绍关于Kata容器的那些事。
深入介绍Kata容器之前,你可能需要了解Linux容器的简要历史。
1.Kata容器是什么?
Kata容器是一个开源项目,社区致力于使用轻量级虚拟机来构建安全的容器运行时环境,这些虚拟机的感觉和性能如同容器,但是使用硬件虚拟化技术作为第二层防御,提供更强大的工作负载隔离。
Kata容器源自英特尔Clear Containers和Hyper RunV项目。Kata容器使用现有的CPU功能(比如英特尔VT-X和AMD-V™),以便多个容器在同一个主机上运行时,将它们更有效地隔离开来。每个容器可以在自己的虚拟机中运行,并有自己的Linux内核。由于虚拟机之间的边界,一个容器应该无法访问另一个容器的内存(虚拟机管理程序+EPT/RVI)。
runc是Linux上的运行时规范参考实现;它生成容器时,使用标准的Linux内核功能,比如AppArmour、capabilities(7)、控制组、seccomp、SELinux和命名空间(7),以控制权限和进出容器的数据流动。Kata容器通过将容器包装在虚拟机中对此进行了扩展。
2.我何时应使用Kata容器?
runc是最常见的容器运行时环境,是Docker™、CRI-O和Kubernetes®的默认系统。Kata 容器为你提供了另一种选择,它为混合使用或多租户环境提供了更强大的隔离。 Kubernetes worker节点能够同时使用runc和Kata容器,因此不需要专用硬件。
为了提高容器内的通信效率并减少资源使用开销,Kata容器在一个虚拟机中执行Kubernetes pod的所有容器。
决定何时使用runc、何时使用Kata容器取决于你自身的安全策略和状况。影响何时需要更高级别的隔离的一些因素包括如下:
- 映像的来源———受信任vs不受信任。
- 该映像是内部生成还是从公共注册中心下载?
- 容器中的内容
- 带来竞争优势的内部软件
- 容器处理的数据集(公共vs机密)
在虚拟环境中工作可能会影响性能,因此建议进行针对工作负载的测试,以评估对环境的影响程度(如果有的话)。
3.Kata容器如何工作?
安装Oracle Linux云原生环境的Kubernetes模块时,runc和Kata容器都与CRI-O一同部署,CRI-O为Kubernetes和容器运行时环境之间提供了必要的支持。
Kata容器使用一种经过高度优化、专门调整的Linux内核来引导虚拟机,并结合最小化的用户空间,以支持容器操作,它们共同提供快速初始化机制。
为了创建Kata容器,Kubernetes用户必须先创建一个RuntimeClass对象。之后,Pods或Deployment可以引用RuntimeClass表明要使用的运行时环境。Using Container Runtimes说明文档(https://docs.oracle.com/en/operating-systems/olcne/runtimes/kata-pod-create.html)中附有示例。
Kata容器旨在提供“感觉和性能如同容器的轻量级虚拟机”;你的开发人员无需知道其代码在虚拟机中执行,也无需更改工作流程即可收到成效。
原文Kata Containers: What, When and How,作者:Mark Cram
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】