原文:https://github.com/kata-containers/documentation/blob/master/architecture.md

(欢迎纠错)

Kata-runtime

1. kata-runtime 兼容OCI spec,因此无缝衔接 Docker Engine pluggable runtime 架构。

2. kata-runtime 也通过 CRI-O 和 Containerd CRI Plugin实现 支持 Kubernetes CRI (Container Runtime Interface)。

3. kata-runtime 为每个 container (由 Docker Engine 创建) 或 pod (由 kubelet 创建) 创建 QEMU/KVM 虚拟机。

4. container 进程由 agent 创建, agent 进程运行在 VM 内部作为 deamon。

5. kata-agent 使用一个 virtio 串口接口在 guest 中运行一个 gRPC 服务,该接口在主机上暴露为一个串口设备。

6. kata-runtime 使用 gRPC协议与agent通信。 ----该协议允许 runtime 发送 container 管理命令到 agent;也用于在 guest 与 Docker Engine 之间传递 I/O 流。

7. 对于任何给定的 container, init 进程和所有在容器内部潜在执行的命令,以及他们相关的 I/O 流,都需要由 QEMU 通过 virtio 串口接口导出。每个 VM 启动一个 kata-proxy 来处理这些命令和流的多路复用。

8. 在主机上,每个 container 进程的移除由 container 栈上层的一个 reaper 完成。在 Docker 情况下,是 containerd-shim;在 CRI-O下是 common。当kata-container 进程运行在它们自己的VM内部时, reaper不能监控、控制、回收它们。 kata-runtime 通过在 reaper 和 kata-proxy 之间创建一个附加的 shim进程(kata-shim) 来解决这个问题。 kata-shim 实体既将信号和 stdin 流转发到 guest 上的 container 进程,也通过 reaper 将 container 的 stdout 与 stderr 流传回到 CRI shim 或 docker。

Hypervisor

1. kata

Agent

1. kata-agent 是一个运行在 guest 中作为超级管理员用来管理容器和容器中进程的进程。

2. kata-agent 的执行单元是 sandox。 kata-agent sandbox 是一组命名空间 (NS, UTS, IPC, PID) 定义的容器sandbox。kata-runtime 可以在一个 VM 中运行多个容器用于支持那些要求一个 pod 运行多个容器的容器引擎。在 docker 情况下, 一个 pod 一个容器。

3. kata-agent 与 kata 组件之间通过 gRPC 通信。 它也运行一个 yamux 服务器在同一个 gRPC URL上。

4. kata-agent 利用 libcontainer 管理容器的生命周期。与 runc 大量复用代码。

Runtime

kata-runtime 是一个 OCI兼容的容器 runtime,负责处理由 OCI runtime spec 规定的所有命令,并启动 kata-shim 实体。

kata-runtime 严重复用了 vircontainers 项目,该项目提供了一个通用的、runtime-spec 不可知的、硬件虚拟化的容器库。

Configuration

Significant OCI commands

我们在这里描述下 kata-runtime 是如何处理最重要的 OCI命令的。

create

1. 在我们要启动VM 与 shims进程的地方创建网络命名空间。

2. 调用 pre-start hooks。其中之一应该负责创建主机网络命名空间和预备新建的网络命名空间之间的 veth 网络对。

3. 在新的网络命名空间里扫描网络,在 veth接口与 tap接口之间创建一个 MACVTAP 连接到 VM。(?)(create a MACVTAP connection between the veth interface and a tap interface into the VM)

4. Start the VM inside the network namespace by providing the tap interface previously created.

start

exec

kill

delete

state

Proxy

1. 同VM 通信由 virtio-serial 或 vsock(host kernel > 4.8) 实现。

2. VM 可能运行了多个容器进程。当使用 virtio-serial 时,每个进程相关的 I/O 流需要多路复用。使用 vsock 则无需此组件。

3. kata-proxy 是一个提供 kata-agent 到 kata-shim 和 VM相关的 kata-runtime 的访问的进程 。它的主要角色是在每个 kata-shim 实体与 kata agent之间路由 I/O 流与信号。 kata-proxy 通过一个unix domain socket 连上 kata-agent,这个socket 由 kata-runtime 在启动 kata-agent 时提供。kata-proxy 使用 yamux 来 multiplex gRPC请求到与kata-agent的连接。

----未完待续----

Kata 架构的更多相关文章

  1. [CB]Intel 2018架构日详解:新CPU&新GPU齐公布 牙膏时代有望明年结束

    Intel 2018架构日详解:新CPU&新GPU齐公布 牙膏时代有望明年结束 北京时间12月12日晚,Intel在圣克拉拉举办了架构日活动.在五个小时的演讲中,Intel揭开了2021年CP ...

  2. Kata Container 介绍

    docker容器,性能高,不安全:VM虚拟机,安全性好,性能损耗大:Kata Container轻量级虚拟机的容器,即安全,性能也高. 开源容器项目Kata Containers,旨在将虚拟机(VM) ...

  3. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  4. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  5. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

  6. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  7. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  8. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  9. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

随机推荐

  1. 技巧.【转】在虚拟机Vmware中使用HID设备(如USB免驱键盘)

    ZC:我的环境:Win7x64.VMware10 ZC:我的处理: ZC: (1).usb.generic.allowHID = "TRUE" (本来就有,将它的位置提前) ZC: ...

  2. mysql 如果数据不存在,则插入新数据,否则更新 的实现方法

    CREATE TABLE `table_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `my_key` int(11) NOT NULL DEFAULT ...

  3. 安装Charles报错

    去年用的是charles4.1.2版本,今年这个版本的安装包始终安装报错,不管公司电脑还是自己电脑........ 我的解决方案很Lower的.......... 登录Charles官网:https: ...

  4. time模块详解

    本文转自这里: 在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有 ...

  5. ubuntu下安装交叉编译工具链

    /usr/localmkdir arm 将文件file1复制成文件file2 cp file1 file2 /cp /mnt/hgfs/UbuntuGX/arm-2008q3-linux.tar.gz ...

  6. 浅析C#中抽象类和接口的区别

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...

  7. EasyPlayer实现Android MediaMuxer录像MP4(支持G711/AAC/G726音频)

    本文转自EasyDarwin开源团队John的博客:http://blog.csdn.net/jyt0551/article/details/72787095 Android平台的MediaMuxer ...

  8. Angular在render完成之后,执行Js脚本

    AngularJs中,如何在render完成之后,执行Js脚本 app.directive('onFinishRenderFilters', function ($timeout) { return ...

  9. 剑指Offer面试题:8.二进制中1的个数

    一 题目:二进制中1的个数 题目:请实现一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二 可能引起死循环的解法 // 计算整数的二 ...

  10. MySql必知必会实战练习(五)存储过程

    1. 为什么使用存储过程? (1) 通过把处理封装在容易使用的单元中,简化复杂操作 (2) 为了保证数据的完整性,不要求反复建立一系列的处理操作,所有开发人员和应用程序都使用同一(试验和测试)存储过程 ...