kata容器简介
最后更新于
最后更新于
www.huweihuang.com
kata-container通过轻量型虚拟机技术构建一个安全的容器运行时,表现像容器一样,但通硬件虚拟化技术提供强隔离,作为第二层的安全防护。
特点:
安全:独立的内核,提供网络、I/O、内存的隔离。
兼容性:支持OCI容器标准,k8s的CRI接口。
性能:兼容虚拟机的安全和容器的轻量特点。
简单:使用标准的接口。
kata-container与传统container的比较
Kata Containers runtime (kata-runtime
)通过QEMU*/KVM
技术创建了一种轻量型的虚拟机,兼容 OCI runtime specification 标准,支持Kubernetes* Container Runtime Interface (CRI)接口,可替换CRI shim runtime (runc) 通过k8s来创建pod或容器。
shim
类似Docker的 containerd-shim
或CRI-O的 conmon
,主要用来监控和回收容器的进程,kata-shim
需要处理所有的容器的IO流(stdout
, stdin
and stderr
)和转发相关信号。
containerd-shim-kata-v2实现了Containerd Runtime V2 (Shim API),k8s可以通过containerd-shim-kata-v2
(替代2N+1
个shims
[由一个containerd-shim
和kata-shim
组成])来创建pod。
在虚拟机内kata-agent
作为一个daemon进程运行,并拉起容器的进程。kata-agent使用VIRTIO或VSOCK接口(QEMU在主机上暴露的socket文件)在guest虚拟机中运行gRPC服务器。kata-runtime通过grpc协议与kata-agent通信,向kata-agent发送管理容器的命令。该协议还用于容器和管理引擎(例如Docker Engine)之间传送I / O流(stdout,stderr,stdin)。
容器内所有的执行命令和相关的IO流都需要通过QEMU在宿主机暴露的virtio-serial
或vsock
接口,当使用VIRTIO的情况下,每个虚拟机会创建一个Kata Containers proxy (kata-proxy
) 来处理命令和IO流。
kata-agent
使用libcontainer
来管理容器的生命周期,复用了runc
的部分代码。
kata-proxy
提供了 kata-shim
和 kata-runtime
与VM中的kata-agent
通信的方式,其中通信方式是使用virtio-serial
或vsock
,默认是使用virtio-serial
。
kata-container通过QEMU/KVM来创建虚拟机给容器运行,可以支持多种hypervisors。
待补充
参考文档:
https://katacontainers.io/
https://github.com/kata-containers/documentation/blob/master/design/architecture.md