华为云云原生钻石集训营 第一课:容器运行时技术深度剖析
课程目标:
学完本课程后,您将能够:
了解容器隔离技术的基本原理;
了解主流的容器运行时实现;
了解华为云上使用到的容器运行时。
课程大纲:
第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://github.com/opencontainers/runc
- 点赞
- 收藏
- 关注作者
评论(0)