干货|认识kata-containers

原创 2018年01月05日 00:00:00

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文

640?wx_fmt=png&wxfrom=5&wx_lazy=1

认识kata-containers

 1、kata-containers是什么

 2、在容器生态系统中的位置 

3、包含的组件及其功能介绍

 4、现状以及后续的计划

 5、在Docker中的使用 

本文主要让大家认识什么是kata-containers,它在容器生态系统中的位置,如何跟现有容 器系统进行集成。最后介绍如何在Docker中使用kata-containers。

 

1、kata-containers是什么 

kata containers是由OpenStack基金会管理,但独立于OpenStack项目之外的容器项目。它是一个可 以使用容器镜像以超轻量级虚机的形式创建容器的运行时工具。 kata containers整合了Intel的 Clear Containers 和 Hyper.sh 的 runV,能够支持不同平台的硬件 (x86-64,arm等),并符合OCI(Open Container Initiative)规范,同时还可以兼容k8s的 CRI(Container Runtime Interface)接口规范。目前项目包含几个配套组件,即Runtime,Agent, Proxy,Shim,Kernel等。目前Kata Containers的运行时还没有整合,即Clear containers 和 runV 还在独立的组织内。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

如果大家了解Docker技术,就会知道,真正启动Docker容器的命令工具是RunC,它是OCI运行时规范 (runtime-spec)的默认实现。

Kata containers其实跟RunC类似,也是一个符合OCI运行时规范的一种 实现(即Clear Container和runV 都符合OCI规范),不同之处是,它给每个容器(在Docker容器的 角度)或每个Pod(k8s的角度)增加了一个独立的linux内核(不共享宿主机的内核),使容器有更好 的隔离性,安全性。

关于OCI的相关介绍,可以参见开发者社区中的另一篇文章:OCI的前世今生 基于kata containers创建的容器兼具虚机和容器的优点,在隔离性上,跟常规虚机类似,但在部署时 间和运行效率上却与常规容器相近。

2、在容器生态系统中的位置 

根据上面的内容,可能很多人还是不清楚Kata Containers到底是用在哪里的。接下来看一下Kata containers在容器生态系统中的位置。 

首先我觉得有必要介绍一下,什么是容器的运行时,很多情况下,大家都把docker或者rkt作为容器的 运行时,而在OCI中,将runC称作运行时。

因此,大家都很困惑到底什么是容器运行时。

 容器运行时是一个相对的概念,比如,从k8s的角度看,直接创建容器的组件是docker或containerd, 因此,将docker、containerd以及新加入的CRI-O作为容器运行时组件。

而在docker、containerd或 CRI-O的角度看,真正启动容器的组件是runC,因此,docker中将runC作为容器运行时工具,当然在 docker中,runC可以被替换,比如可以替换为本文介绍的kata containers(即clear Container或者 runV)。 

接下来,通过几个结构图来说明下,kata containers在docker以及k8s中的位置。 首先看一下docker目前的组件关系图:

0?wx_fmt=png


我们看到runC处于docker组件图的最底端,runC下面就是容器。目前docker已经不是一个专一的容器 管理组件,而真正的容器管理组件是containerd,而containerd本身也不会直接跟操作系统交互,去 创建、删除容器,而是借助runC来对容器生命周期进行管理。因此这里可以讲runC作为容器运行时。

容器圈中,针对容器运行时指定了OCI规范,因此,实际上Docker的架构已经变成如下结构:

0?wx_fmt=png

如红色虚线框内所示,也就是说,只要符合OCI规范的运行时工具,都可以被docker(或者说是 containerd)使用。 了解上面的内容,我想kata containers在容器的什么位置,应该就显而易见了。它符合OCI运行时规 范,因此,可以作为runC的替代组件。 下面是k8s组件的结构图:

0?wx_fmt=png

注: CC 表示 clear containers , CC 和 runV 有一个虚线框圈起来,表示后续这两个 组件会合并成 kata containers ,目前可以分别使用。 上图中给出了k8s分别将docker、containerd和CRI-O作为容器管理工具(以k8s角度的容器运行时) 的组件关系图。k8s为了能对接多种容器管理工具,抽象了CRI接口,每个容器管理工具只需实现接口

即可,详细内容参见《我们还需要docker吗?》。 每个容器管理工具的最后端直接操作容器的就是上一节介绍的符合OCI的容器运行时(以docker等的角 度看),那kata containers就是符合OCI容器运行时的其中之一。 根据以上分析,我们可以看出,kata containers其实不会替换docker,也不会替换containerd,更不 会替换k8s,而跟他们是协作关系,只是其中的一个组件。


3、包含的组件及其功能介绍

runtime:符合OCI规范的容器运行时命令工具,主要用来创建轻量级虚机,并通过agent控制虚 拟机内容器的生命周期。目前kata containers还没有一个统一的运行时工具,用户可以选择 clear containers和runV中的其中之一。 

agent:运行在虚机中的一个运行时代理组件,主要用来执行runtime传给他的指令,在虚机内 管理容器的生命周期。 

shim:以对接docker为例,这里的shim相当于是containerd-shim的一个适配,用来处理容器 进程的stdio和signals。shim可以将containerd-shim发来的数据流(如stdin)传给proxy,然 后转交给agent,也可以将agent经由proxy发过来的数据流(stdout/stderr)传给containerdshim,同时也可以传输signal。

这里的shim跟上一节k8s结构图中的shim不是一个组件,上节提到的shim表示 containerd-shim proxy:主要用来为runtime和shim分配访问agent的控制通道,以及路由shim实例和agent之 间的I/O数据流。 

kernel:kernel其实比较好理解,就是提供一个轻量化虚机的linux内核,根据不同的需要,提供 几个内核选择,最小的内核仅有4M多。 下图是kata containers官方给出的各组件之间的关系。详细原理还有待进一步研究


0?wx_fmt=png

4、现状以及后续的计划 

kata containers项目刚起步,还没有完整的一套组件供用户使用,只是提出了一套完整的架构。 但是从架构中看,跟clear containers目前采用的架构基本一致,包括架构图以及组件类型。因此,目 前针对kata containers的研究,可以通过clear containers入手。 

目前,kata containers项目中,已经增加了包括agent,shim,proxy等组件的代码库,但是还没有针 对runtime的代码库。

 在后续的计划中,kata containers将分为三步来实现clear containers和runV两个项目的融合: 

首先,在katacontainer中兼容clear containers 和 runV两个运行时 整体采用kata containers的架构 clear containers 和 runV两个运行时可以无缝对接kata containers的其他组件 用户可以在两个运行时之间来回切换 

其次,将clear containers 和 runV合并为一个,形成kata containers自己的runtime 最后,废除clear containers 和 runV的兼容。


5、在Docker中的使用

下面以clear containers 3.0为例,介绍在docker 中的使用。

首先,环境中需要安装docker,本机安装的docker版本是V17.06.0-ce,docker的安装就不在这里介

绍了。另外本机使用ubuntu16.04系统,官方要求ubuntu的系统需要是16.04或更新的版本。

安装clear containers的组件,命令如下:

0?wx_fmt=png

配置docker 的默认容器运行时为clear containers:

0?wx_fmt=png

重启docker服务并启动clear containers的systemd服务

$ sudo systemctl daemon-reload

$ sudo systemctl enable docker.service

$ sudo systemctl restart docker

$ sudo systemctl enable cc-proxy.socket 

$ sudo systemctl start cc-proxy.socket 

接下来就可以创建容器了,使用以下命令来创建busybox容器:

0?wx_fmt=png

查看容器列表:

0?wx_fmt=png

执行下面的命令,查看容器相关的进程树:

0?wx_fmt=png

我们会看到下图所示的内容:

0?wx_fmt=png

进程树中,dockerd为根进程,红色方框标出来的与传统容器有区别的地方,我们可以看到,dockerd 中增加的cc-runtime的运行时工具,并将cc-runtime设置为默认运行时,并有qemu-lite-systemx86_64、cc-proxy、cc-shim等进程。其中qemu-lite-system-x86_64(绿色框内的进程)就是通过 clear container创建的轻量化虚机,其内部部署了busybox容器。 同样可以通过docker exec访问容器:

0?wx_fmt=png

640?wx_fmt=jpeg

版权声明:本文为博主原创文章,未经博主允许不得转载。

Intel携手Hyper,同OpenStack基金会合作推出Kata Containers项目

长久以来,OpenStack基金会一直致力于在其同名云计算基础设施项目之外拓展新的疆土,而这成为其最为核心的关注重点。考虑到这一背景,该基金会日前宣布推出Kata Containers[1]项目自然也...
  • M2l0ZgSsVc7r69eFdTj
  • M2l0ZgSsVc7r69eFdTj
  • 2017年12月06日 00:00
  • 203

OpenStack基金会携手Intel、Hyper发布开源Kata Containers项目

OpenStack基金会本周二发布了新的开源项目Kata Containers,其目标是将虚拟机(VM)的安全优势与容器的高速及可管理性结合起来,为用户带来最出色的容器解决方案,同时提供最强大的虚拟机...
  • chenhaifeng2016
  • chenhaifeng2016
  • 2017年12月06日 20:18
  • 206

看图秒懂 | 昨天才发布的容器新项目Kata到底能干啥?

导读      当前容器运行的最大支撑平台是私有云,也就是在私有云上的虚拟机中运行容器实例。一个虚拟机上可运行多个用户的、不同应用的容器实例,不同实例之间共享同一个虚拟机操作系统内核并采用...
  • lQ1NS259ej3OKYvK4Jf
  • lQ1NS259ej3OKYvK4Jf
  • 2017年12月07日 00:00
  • 664

干货|认识kata-containers

点击上方“中兴开发者社区”,关注我们每天读一篇一线开发者原创好文认识kata-containers 1、kata-containers是什么 2、在容器生态系统中的位置 3、包含的组件及其功能介绍 4...
  • O4dC8OjO7ZL6
  • O4dC8OjO7ZL6
  • 2018年01月05日 00:00
  • 723

Single-item Containers,Frame

学习gtkmm有几周了,英语太烂了,硬着头皮边看边记,还没把握,发上来,大家斧正Single-item Containers单项容器The single-item container widgets ...
  • xxw168
  • xxw168
  • 2011年04月20日 22:59
  • 1310

程序员有用网站集(干货)

IT互联网|程序员|移动开发|web前端-学习网站JS awesome-javascript - 一系列很棒的javascript 库,资源。star:9000+ fullPage - 非常好用的全屏...
  • xustart7720
  • xustart7720
  • 2017年06月22日 18:08
  • 411

Spring Boot干货系列:(二)配置文件解析

非常感谢  http://www.tuicool.com/articles/73eaa22 Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的...
  • HUXU981598436
  • HUXU981598436
  • 2017年03月14日 12:12
  • 1459

从kata中学习编程

全文见:http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Practices/Kata一些为学习程序设计原理而设计的小练习,英文名叫做kata。...
  • redguardtoo
  • redguardtoo
  • 2005年06月24日 09:31
  • 2348

Code Kata编码套路练习网站参考

帮助编程学习者进行套路练习的网站有很多。知道这类编程练习网站之后,我做了一些搜索,收藏了一些国外程序员推荐的站点,在这里推荐给大家。 CodewarscodeforcesHackerRankPr...
  • shanzhizi
  • shanzhizi
  • 2015年12月17日 10:12
  • 1244

【干货集中营App】

前言:一个练手的安卓app ,Api接口来源:http://gank.io/api,非常感谢代码家。应用描述:干货集中营是一个技术干货共享平台。每个工作日,网站都会分享一些技术干货信息,包括Andro...
  • zouzhigang96
  • zouzhigang96
  • 2016年08月25日 10:56
  • 1290
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:干货|认识kata-containers
举报原因:
原因补充:

(最多只允许输入30个字)