kata-container
Kata Container是一个开放源代码的容器,运行时可以构建无缝插入容器生态系统的轻量级虚拟机,致力于通过轻量级虚拟机机来构建安全的容器,这些虚拟机的运行方式和性能类似于容器,但是使用硬件虚拟化救赎作为第二程防御层,可以提供更强的工作负载隔离
Kata Container 社区由 OpenStack Foundation(OSF) 领导,该基金会支持全球开放基础架构的开发和采用
特性
- 安全:在专用的内核中运行,提供网络,I/O和内存的隔离,并可以通过虚拟化扩展利用硬件强制隔离
- 兼容性:支持行业标准,包括 OCI容器格式,Kubernetes CRI 接口已经旧版虚拟化技术
- 性能:提供与标准 Liunx 容器一直的性能;提高隔离度,而无需增加标准虚拟化的性能
- 简单:消除了在完整的虚拟机内部嵌套容器的要求;标准接口使插入和入门变得容易
kata-container 和 runc是平级的。docker 管理容器生命周期的框架,而真正启动容器是 runc,可以换成 kata。kata-container可以当做 docker 的一个插件 。
hypervisor
Hypervisor启动用于容器运行的虚拟机,虚拟机包含一个极简的guest kernel和guest image, 然后在虚拟机内部真正起我们想要的容器 。
- Guest kernel :用于启动VM。 Kata-container高度优化了内核启动时间和极小的内存占用,只用于一个容器的运行。
- Guest image : 包含了initrd和rootfs
内部组件
-
Agent
kata-agent 是一个运行在虚拟机中的进程,管理虚拟机中的容器进程。
kata-agent 的最小运行单元是沙箱,一个 kata-agent 沙箱是一个由一些列namespace(NS, UTS, IPC, PID)隔离出来的。 kata-runtime 能够在一个虚拟机内运行多个容器进程以支持POD内多个container模式。
kata-agent 使用gRPC协议与Kata其他组件通信,在gRPC同一个URL上还运行了一个 yamux 服务。
kata-agent 使用 libcontainer 管理容器生命周期,复用了 runc 的大部分代码。
-
Runtime
kata-runtime 是一个符合OCI(接口规范)规范的容器运行时,负责处理OCI运行时规范中的所有命令,并启动 kata-shim 进程。
-
Proxy
默认使用virtio-serial(一种通信机制吧)和VM通信,内核版本高于4.8可以使用vsock,一种虚拟的套接字。VM可以运行多个容器进程。在使用virtio-serial的情况下,与每个进程相关联的I/O流需要在主机上多路复用和解复用。
Kata-proxy给多个kata-shim和kata-runtime客户端提供对kata-agent的访问,它的主要作用是在每个kata-shim和kata-agent之间路由I/O流和信号。Kata-proxy连接到kata-agent的unix域套接字上,这个套接字是kata-proxy启动时kata-runtime提供的。
-
Shim
kata-shim扮演了监控容器进程的角色。Kata-shim需要处理容器的所有I/O流,包括stdout、stdin和stderr,以及转发所有的要发送出去的信号。
参考链接
https://www.csdn.net/tags/MtjaIg5sNTMwODAtYmxvZwO0O0OO0O0O.html
https://www.pianshen.com/article/1321486823/