设计要求
Kata Containers 运行时必须完全满足下面这些要求。
1. OCI 兼容性⚓
Kata Containers runtime 必须实现兼容性 OCI runtime 标准及所有的 OCI runtime 操作。
2. runc
CLI 兼容性⚓
理论上,只要兼容 OCI 就足够了。实际上,Kata Containers 运行时应该遵守最新的稳定 runc
CLI。
特别是,它必须实现以下 runc 命令:
create
delete
exec
kill
list
pause
ps
start
state
version
Kata Containers 运行时必须实现以下命令行选项:
--console-socket
--pid-file
3. CRI and Kubernetes 支持⚓
Kata Containers 必须为 CRI shims 提供两个接口来管理基于硬件虚拟化的 Kubernetes pods 和 containers:
- 一个与 OCI 和 runc 兼容的命令行接口,如上一节所述。例如,CRI-O 和 cri-containerd 等实现使用了此接口。
- 一个用于 CRI 的硬件虚拟化运行时库 API ,并提供更多的 CRI 本地实现。
4. 多种硬件架构支持⚓
Kata Containers 运行时不能是特定于体系结构的。它应该能够支持多种硬件体系结构,并提供模块化和灵活的设计来增加对其他硬件体系结构的支持。
5. 多种 hypervisor 支持⚓
Kata Containers 运行时不能与任何特定的硬件虚拟化技术、 hypervisors 或虚拟机监视器实现绑定。
它应该支持多个 hypervisors ,并提供一个可插拔和灵活的设计,以增加对其他 hypervisors 的支持。
5.1 嵌套⚓
The Kata Containers runtime 必须支持嵌套虚拟化环境。
6. 联网⚓
- Kata Containers runtime 必须支持 CNI 插件
- Kata Containers runtime 必须支持传统网络和 IPv6网络。
7. I/O⚓
7.1 设备直接分配⚓
为了让容器直接消耗主机硬件资源,Kata Containers runtime 必须通过利用 I/O 虚拟化技术(IOMMU,中断重映射)为容器提供安全的通道,以供GPU,SRIOV,RDMA,QAT等通用设备使用。
7.2 加速⚓
Kata Containers runtime 必须支持网络的加速和网络的基于用户空间的 I/O 操作(例如DPDK)以及通过 vhost-user
套接字的存储。
7.3 可扩展性⚓
Kata Containers runtime 必须通过 SRIOV 技术支持可扩展的 I/O。
8. 降低虚拟化开销⚓
与裸金属应用程序相比,容器的一个引人注目的方面是它们的开销很小。容器运行时应将开销降至最低,以便提供预期的用户体验。Kata Containers runtime 实现应该针对以下方面进行优化:
-
最小的工作负载启动和关闭时间
-
最小的工作负载内存占用
-
最大网络吞吐量
- 最小的网络延迟