当前位置: 首页 > news >正文

【kubernetes】CRI OCI

1 OCI

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

  • Image Specification(image-spec)
  • Runtime Specification(runtime-spec)
  • runC

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(基于虚拟化方案提供安全容器)。

参考文档:

  • 白话 Kubernetes Runtime
http://www.lryc.cn/news/182058.html

相关文章:

  • 竞赛 机器视觉opencv答题卡识别系统
  • Youtube视频下载工具分享-油管视频,音乐,字幕下载方法汇总
  • 【算法练习Day11】滑动窗口最大值前 K 个高频元素
  • 华为云HECS云服务器docker环境下安装nginx
  • GET 和 POST的区别
  • 机器学习(监督学习)笔记
  • 科普rabbitmq,rocketmq,kafka三者的架构比较
  • 加密货币交易技巧——地利(二)
  • 服务网关Gateway_微服务中的应用
  • 2G大小的GPU对深度学习的加速效果如何?
  • intel 一些偏门汇编指令总结
  • python 多个proto文件import引用时出现ModuleNotFoundError错误
  • C语言图书管理系统
  • 归并排序及其非递归实现
  • 【kubernetes】kubernetes中的Controller
  • RabbitMQ-死信队列
  • ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合
  • 什么是数学建模(mooc笔记)
  • 基于SpringBoot的流浪动物管理系
  • fcpx插件:82种复古电影胶卷框架和效果mFilm Matte
  • 【LeetCode热题100】--98.验证二叉搜索树
  • wxpython:wx.grid 表格显示 Excel xlsx文件
  • 事件循环机制
  • 苹果曾考虑基于定位控制AirPods Pro自适应音频
  • 【代码阅读笔记】yolov5 rknn模型部署
  • 【多线程】进程与线程 并发编程 面试题总结
  • C++算法 —— 动态规划(10)二维费用背包
  • MySQL数据库正在耗用大量CPU的问题排查
  • php替换字符串里的a变为b
  • 黑豹程序员-架构师学习路线图-百科:CSS-网页三剑客