Skip to content

Latest commit

 

History

History
77 lines (45 loc) · 3.96 KB

kata-container.md

File metadata and controls

77 lines (45 loc) · 3.96 KB
title weight catalog date subtitle header-img tags catagories
Kata容器简介
1
true
2021-07-20 14:02:24 -0700
Kubernetes
Runtime
Kubernetes

Kata-container简介

kata-container通过轻量型虚拟机技术构建一个安全的容器运行时,表现像容器一样,但通硬件虚拟化技术提供强隔离,作为第二层的安全防护。

特点:

  • 安全:独立的内核,提供网络、I/O、内存的隔离。
  • 兼容性:支持OCI容器标准,k8s的CRI接口。
  • 性能:兼容虚拟机的安全和容器的轻量特点。
  • 简单:使用标准的接口。

1. kata-container架构

kata-container与传统container的比较

Kata Containers runtime (kata-runtime)通过QEMU*/KVM技术创建了一种轻量型的虚拟机,兼容 OCI runtime specification 标准,支持Kubernetes* Container Runtime Interface (CRI)接口,可替换CRI shim runtime (runc) 通过k8s来创建pod或容器。

3. shim

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+1shims[由一个containerd-shimkata-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-serialvsock接口,当使用VIRTIO的情况下,每个虚拟机会创建一个Kata Containers proxy (kata-proxy) 来处理命令和IO流。

kata-agent使用libcontainer 来管理容器的生命周期,复用了runc的部分代码。

5. kata-proxy

kata-proxy提供了 kata-shimkata-runtime 与VM中的kata-agent通信的方式,其中通信方式是使用virtio-serialvsock,默认是使用virtio-serial

6. Hypervisor

kata-container通过QEMU/KVM来创建虚拟机给容器运行,可以支持多种hypervisors。

7. QEMU/KVM

待补充

参考文档: