【kubernetes】CRI & OCI

1 OCI

OCI(Open Container Initiative):由Linux基金会主导,主要包含容器镜像规范和容器运行时规范:

image-spec定义了镜像的格式,镜像的格式有以下几个部分组成:

  • index(可选):由于镜像对于不同平台的实现可能不同,因此,对于不同的平台会提供不同的镜像,在该文件中与manifest最大的不同就是platform,它表明了该镜像对应的平台(包含硬件架构和操作系统)
  • manifest:描述了镜像自身以及镜像的各层的sha256,用sha256就可以定位到其他层
  • layers:每一层的数据的压缩包
  • config:镜像的配置参数

当使用containerd作为容器运行时,上面的所有文件都在/var/lib/containerd/io.containerd.content.v1.content/blobs/sha256中。

runtime-spec定义了容器的配置、运行环境和生命周期:

  • config:生成容器的参数配置
  • runtime:容器的状态、生命周期以及可以执行的操作

当使用containerd作为容器运行时,在ctr c info <container_id>的输出的Spec中可以查看到config文件的内容,另外,使用ctr oci spec可以查看到runtime-spec的默认config文件。

runC是一个从docker的libcontainer库封装而来的工具,可以根据OCI规范来创建和管理容器,它直接对接操作系统,因此,也使用runC直接创建容器(RunC简介),使用runC创建容器时需要2个部分:runtime-spec中的config文件以及rootfs。

2 CRI

CRI(Container Runtime Interface):由CNCF主导,主要是为了使kubernetes能够对接不同的容器运行时而制定的接口规范

  • containerd:Docker从Docker Daemon拆分出containerd,containerd负责容器的各种操作
  • CRI-O:由redhat开源并由社区驱动的专为kubernetes设计的轻量级容器运行时
  • Kata-containers:由OpenStack基金会管理的容器项目,整合了Intel和Clear Containers和Hyper.sh的runV,主要目标是提供虚拟机级别的安全容器,也就是拥有容器的启动速度以及虚拟机的安全

docker作为命令行工具,当用户使用docker create创建容器时,docker会将命令发给dockerd守护进程,docker会将请求发给docker-containerd,docker-containerd会启动docker-containerd-shim进程,该进程会使用runC创建进程,runC是一个二进制程序,创建结束后就会退出,而docker-containerd-shim会作为容器的父进程而运行。

CRI作为k8s提供给外部容器运行时的接口,可以对接许多容器运行时,在早期,k8s通过内置的dockershim实现对docker的兼容,但是在未来,k8s会移除掉dockershim,而是直接对接外部的容器运行时。当前的主流容器运行时主要是:containerd(从dockerd分离而来)和CRI-O。为了管理容器,接收容器中进程的信号,管理容器中的进程,通常会在容器运行时中提供shim,该shim负责容器中进程的管理。具体实现容器和镜像的功能的规范是OCI,当前的主流方案是runC(由dockerd分离而来)和kata(基于虚拟化方案提供安全容器)。

参考文档:

相关推荐
乌托邦的逃亡者12 分钟前
Docker的/var/lib/docker/目录占用100%的处理方法
运维·docker·容器
OKUNP4 小时前
Docker高级管理--容器通信技术与数据持久化
docker·容器·php
洁辉6 小时前
Spring Cloud 全栈指南:构建云原生微服务的终极武器
spring cloud·微服务·云原生
阿里云云原生8 小时前
加工进化论:SPL 一键加速日志转指标
云原生
阿里云云原生9 小时前
破解异构日志清洗五大难题,全面提升运维数据可观测性
云原生
果子⌂13 小时前
Docker-构建镜像并实现LNMP架构
mysql·nginx·docker·容器·架构·php
无敌糖果13 小时前
K8S数据流核心底层逻辑剖析
docker·容器·kubernetes·k8s架构·底层逻辑·k8s数据流
阿里云云原生14 小时前
从 Python 演进探寻 AI 与云对编程语言的推动
云原生
亲爱的非洲野猪15 小时前
关于k8s Kubernetes的10个面试题
云原生·容器·kubernetes
西京刀客16 小时前
k8s之configmap
云原生·容器·kubernetes