Kata组件
containerd-shim-kata-v2(runtime)
在旧的Kata 1.x架构中,kata运行时是一个名为kata-runtime的可执行文件。容器管理器在创建每个容器时多次调用此可执行文件。每次调用运行时都会提供不同的OCI命令。这种架构很简单,但由于处理调用与调用之间的状态问题,不太适合创建基于VM的容器。此外,该架构还存在性能上的问题,这与不断产生运行时新实例有关,以及kata shim和kata proxy进程不提供VSOCK。
在新的kata 2.x架构中,kata运行时变成了containerd-shim-kata-v2可执行文件,它兼容containerd runtime shimv2架构。shimv2架构能够解决一些1.x中存在的问题:不用再多次调用运行时可执行文件,而是创建一个套接字并将其传递给shimv2运行时。套接字是一个双向通信通道,它使用基于gRPC的协议,允许容器管理器将API调用发送到shimv2运行时。shimv2架构对于任意数量的container都只运行一个实例,这样提升了性能并且解决了多次调用之间的状态问题。
containerd-shim-kata-v2负责启动管理程序及其VM,并使用基于ttRPC的协议通过VSOCK套接字与代理进行通信,该VSOCK套接字提供VM和主机之间的通信链接。(2.0版本开始使用更轻量的ttrpc替代掉grpc)
hypervisor
目前kata支持以下几种hypervisor:
- ACRN:c语言开发的轻量化hypervisor,主要面向物联网设备。
- Cloud-Hypervisor:基于rust-vmm使用rust语言开发的轻量化hypervisor,适合高性能要求的云场景工作负载。
- Firecracker:基于rust-vmm使用rust语言开发的更加轻量化hypervisor,不支持文件系统共享、热插拔、VFIO,适合serverless/FaaS场景。
- Qemu:c/c++语言开发的hypervisor,轻量程度不及前三种,但是具有丰富的特性,泛用性较强。
kata agent
kata-agent由Rust语言编写,是一个运行在虚拟机内部的代理进程,负责管理容器和在这些容器中运行的工作负载,每个创建的VM只运行一个代理进程。kata 2.0开始,agent通过更加轻量的ttRPC协议,而不是gRPC协议,与其他kata组件通信。