华为云云原生钻石集训营 第一课:容器运行时技术深度剖析

举报
菜鸟级攻城狮 发表于 2021/07/21 22:44:56 2021/07/21
【摘要】 华为云云原生钻石集训营 第一课:容器运行时技术深度剖析

课程目标:

学完本课程后,您将能够:
了解容器隔离技术的基本原理;
了解主流的容器运行时实现;
了解华为云上使用到的容器运行时。

课程大纲:

第1章 容器引擎和运行时机制原理剖析
第2章 业界主流容器运行时技术架构剖析
第3章 华为云容器运行时技术架构剖析
第4章 容器运行时技术的发展方向


容器引擎和运行时原理1:CRI接口

CRI接口: kubelet调用容器运行时的grpc接口

dockershim: kubernetes对接docker api的CRI接口适配器,kubernetes 1.21版本已经将其标注为废弃接口。

CRl-containerd:通过containerd中的CRI插件实现了CRI接口,让containerd可直接对接containerd启动容器,无需调用docker api。当前使用最广泛的CRI接口接口实现。

CRI-O:专注于在kubernetes运行容器的轻量级CRI接口实现(不关注开发态)。


容器引擎和运行时原理1:CRI接口

运行时:负责容器的生命周期管理,包括容器创建,启动、停止、日志和性能采集等接口。

镜像:负责容器运行的管理,包括显示镜像、拉取镜像、删除镜像等接口。


容器引擎和运行时原理2:OCI  runtime spec

OCI组织: Linux基金会于2015年6月成立OCI (Open ContainerInitiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准。目前主要有两个标准文档:容器运行时标准(runtime spec)和容器镜像标准(image spec)

Runtime spec:容器运行时标准,定义了容器状态和配置文件格式,容器生命周期管理命令格式和参数等。

runc: docker捐献给OCl社区的一个runtime spec的参考实现,docker容器也是基于runc创建的。

Kata-runtime:一种基于虚拟化的安全隔离的OCl runtime spec的实现。

gVisor:一种基于系统调用拦截技术的轻量级安全容器实现。


容器引擎和运行时原理2:OCI runtime spec

config.json:定义容器运行所需要的所有信息,包括rootfs、mounts、进程、cgroups、namespaces、caps等。

命令:容器生命周期管理命令、包括创建、启动、停止、删除等。


容器引擎和运行时原理3:runtime v2

shimv2:新的容器运行时接口,基于ttrpc通信。

目的:让运行时更方便维护容器状态和生命周期,减少安全容器实现中,节点的进程数和资源调用。


业界主流容器运行时1: runc

Namespace:资源和信息的可见性隔离,通过namespace隔离,容器中的应用只能看到分配到该容器的资源、其他主机上的信息在容器中不可见。常用的namespace有PID(进程号)、(网络)、UTS(主机名)和IPC(跨进程通信)等

Cgroups:资源使用量的隔离,通过cgroup、限制了容器使用的资源量,通过不同的子系统,限制不同的资源。包括CPU、内存、io带宽、大页、fd数等等

Capability:权限限制,通过对进程的capability定义,限制容器中的进程调用某些系统调用,以达到容器进程无法逃逸到主机的目的,比如容器中的进程是不具有以下capability的:SYS ADMIN/MKNOD/SYS_RESOURCE/SYS_MODULES ...

业界主流容器运行时1:  runc

业界主流容器运行时2 : kata containers

1.虚拟化隔离:每个pod都运行在一个独立的虚拟机中,提供虚拟化接口对接不同的虚拟化实现,包括qemu.cloud hypervisor、firecracker等等

⒉轻量化:为了达到和容器近似的使用体验,需要对各组件进行裁剪,达到轻量化和启动加速的目的,对于hypervisor,去除通用虚拟化的各种不必要的设备、总线等。对于guest kernel,也裁剪了大量不需要的驱动和文件系统模块。而运行在虚拟机中的1号进程(一般为kata-agent),资源占用可小于1MB。

3.主机资源访问:通过virtio、vfio等方式访问主机资源,如virtio-blk(块设备)、virtio-fs(文件)、virtio-net (网络)、vfio(物理设备)、vhost-user (用户态网络或存储)

业界主流容器运行时3: gVisor

1.虚拟内核:设置进程的4种模式,HRO、HR3、GRO、GR3,通过拦截系统调用,实现了一个虚拟内核,用户进程与host kernel不直接交互

2.拦截系统调用的方式:ptrace、kvm

3.优点:额外内存消耗小,容器启动速度快

4.缺点:系统调用慢,导致IO、网络等性能差,由于是模拟内核,有POSIX兼容性问题

华为云中的容器运行时: Enhanced Kata Containers

1.轻量化: hypervisor采用华为云自研的qemu-microvm,guest kernel采用裁剪EulerOS内核、主机shimv2采用rust语言重写。

2.丰富的硬件支持:GPU、nvlink、Ascend、IB、SDl

3.华为云基础设施融合:evs(块设备)、obs(对象存储)、sfs (文件存储)、vpc(华为云VPC网络)

4.产品形态:CCI(全托管的云容器实例)、CCE turbo (CCE增强版)

容器运行时技术的发展方向: 更轻量、更安全

1.定制虚拟化和内核:提供更轻量的安全隔离                                                                                               1.基于虚拟化的机密计算:TDX、SEV、PEF

2. Sandbox plugin:去除host上的shim。                                                                                                        2.镜像功能卸载:主机上看不到容器镜像

3.Rust化: hypervisor、kernel、agent                                                                                                            3.远程认证:确保运行在机密环境中

总结:

1.从API的角度介绍了kubernetes下容器运行时的架构和原理。

- Kubernetes定义的容器运行时接口:CRI,当前较为主流的实现包括dockershim、cri-containerd、cri-o。

- OCl runtime spec定义了运行时实现中,文件格式和命令行格式,runc、 kata、gVisor等运行时都符合这个标准

- Containerd定义了一套ttrpc接口,方便运行时实现者更好地进行容器状态管理

2.介绍了当前较为热门的几种容器运行时的实现

- Runc:基于linux的namespace、cgroup和capability等技术实现隔离的容器实现- Kata containers:基于虚拟化隔离技术的容器实现

- gVisor:一种基于拦截系统调用的实现隔离的容器实现

3.介绍了华为云的容器产品和对应的运行时选择及增强

-华为云的安全容器基于EulerOS和华为云自研的qemu-microvm对安全容器进行了轻量化改造

-华为云的安全容器支持GPU、nvlink、Ascend、SDI等各种硬件设备

-华为云的安全容器和华为云的VPC网络、OBS、SFS、EVS等服务可无缝对接。

4.介绍了容器运行时未来的发展方向。

-通过rust改写、减少host进程,进一步轻量化hypervisor等方式实现更加轻量级的安全容器

-结合机密计算技术,实现更加安全的容器技术。

参考资料

容器运行技术原理相关参考链接:

 https://kubernetes.io/docs/setup/production-environment/container-runtimes/

 https://kubernetes.io/docs/concepts/containers/runtime-class/

https://github.com/opencontainers/runtime-spec/blob/master/spec.md

https://github.com/containerd/containerd#cri

https://cri-o.io/

https://github.com/opencontainers/runc

https://katacontainers.io/

https://gvisor.dev/

https://www.huaweicloud.com/product/cce.html

https://www.huaweicloud.com/product/cci.html

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200