OCI 简介:Kubernetes 环境下从代码到容器的全流程

news2024/11/17 11:36:30

OCI 简介

在容器化技术的演进中,OCI(Open Container Initiative)提供了一套标准化的规范,帮助统一容器的构建、分发和运行。OCI 规范包含三个部分:

  • OCI Image-spec:定义了容器镜像的结构,确保镜像可以被各种工具识别和管理。
  • OCI Distribution-spec:定义了容器镜像的分发方式,保证镜像可以通过标准化的 HTTP API 与镜像仓库交互。
  • OCI Runtime-spec:定义了容器的运行标准,确保容器运行时可以统一执行和管理容器生命周期。

下文将结合从代码到容器的完整 CICD 流程,详细讲解每个 OCI 规范的具体作用。

从代码到容器

1. Code -> OCI Image

代码被集成之后,便可以使用 dockerpodman/buildah 或者 kaniko 等工具来构建容器镜像。

此时,OCI Image-spec 便发挥了重要的作用,该规范定义了镜像的组成部分,使得不同工具能够跨平台识别和使用同一个镜像。

由于 docker 对行业的影响力,部分从业者会认为 image 就是 docker image,这其实并不对,准确来说,docker 只是工具之一,不管是使用什么工具构建出来的镜像应该统称为 OCI image。

OCI Image-spec 规范定义了镜像的结构,一个 image 至少包括:

  • Manifest:元数据文件,描述镜像的组成部分。
  • Layers:层,镜像由多层堆叠组成,每一层表示文件系统的增量变化。
  • Configuration:配置文件,描述环境变量、启动命令、工作目录等信息。

让我们看看 busybox 这个镜像的结构:

从上图中可以看到,manifest 元数据文件、config 配置文件、layers 层文件一应俱全。

一个 image 其实也只是一堆文件和文件夹的集合。

2. OCI Image -> Registry

在镜像构建完成后,需要推送到镜像仓库。OCI Distribution-spec 规范则定义了镜像如何通过标准的 HTTP API 在仓库中存储、拉取和分发。

OCI Distribution-spec 规范确保了不同的仓库和客户端可以使用统一的 API 进行镜像的分发。这样仓库既可以使用公共仓库(如 Docker Hub),也可以使用私有仓库(如 Harbor)。而客户端只要使用规范中的 HTTP 请求则都可以上传或下载镜像。

3. Kube-API-Server -> Kubelet -> Containerd/CRI-O

镜像上传完成之后,便可以创建或更新应用了。所有请求统一先由 kube-api-server 处理,然后 scheduler 将 Pod 调度到节点上,随后节点上的 kubelet 负责后续处理。

kubelet 通过 CRI gRPC 与具体的组件 ContainerdCRI-O 进行交互,由后者完成镜像的下载和容器的创建。

4. Containerd/CRI-O -> Runc/Kata-containers

ContainerdCRI-O 本身并不直接负责容器的创建和运行,它们会通过 OCI Runtime-spec 与底层容器执行工具 runckata-containers 交互,由 runckata-containers 完成容器的执行。

RuncKata-containers

  • runc 是最常见的容器执行工具,直接与 Linux 内核交互,通过 cgroups 和 namespaces 实现容器的隔离和资源管理。
  • kata-containers 则是在虚拟机中运行容器,提供更强的隔离性,适用于需要高安全性的场景。它仍然遵循 OCI runtime-spec,但运行环境更加虚拟化。

OCI runtime-spec 规范规定了:

  • 容器的配置:通过 config.json 配置文件描述了容器的进程、挂载、hooks 钩子、资源限制等等信息。
  • 执行环境:如何保证环境的一致性,包括将镜像解压到运行时 filesystem bundle 文件系统包中。
  • 生命周期:明确了容器从创建到消失期间的详细过程。

如何查看 OCI runtime-spec 规定的 config.json 文件?

  • 先找到 Pod 所在的 Node 节点,然后 SSH 登录到该节点
  • 再使用 CRI 工具,如 crictl ps 找到容器 ID。
  • 如果是 containerd 则文件位置是 /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container-id>/config.json;在 cri-o 中则可能是 /run/containers/storage/<container-id>/userdata/config.json

我创建了一个 busybox ,它的 OCI runtime-spec config.json 如下图所示:

而这个 OCI runtime-spec 规定的 config.json 其实就是 ContainerdCRI-O 根据 Pod 的定义(命令及参数、环境变量、资源限制等等)和上下文等信息生成的。

总结

从代码到容器实际运行,整个过程中多个组件和标准紧密协作,本文重点关注了 OCI 的三个核心规范(image-specdistribution-specruntime-spec),这些规范确保了容器在不同环境中的兼容性和可移植性,正如 OCI 这个名字的含义一样 —— 开放容器倡议。

(关注我,无广告,专注于技术,不煽动情绪)


参考资料:

  • https://opencontainers.org/about/overview/
  • https://github.com/opencontainers/image-spec/blob/main/spec.md
  • https://github.com/opencontainers/runtime-spec/blob/main/spec.md
  • https://github.com/opencontainers/distribution-spec/blob/main/spec.md
  • https://github.com/opencontainers/runc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自闭症儿童寄宿学校揭秘:全方位呵护孩子成长

自闭症儿童寄宿学校揭秘&#xff1a;星贝育园——全方位呵护孩子成长的温馨港湾 在繁华的广州城&#xff0c;有一所专为自闭症儿童打造的温馨家园——星贝育园自闭症儿童寄宿制学校。这里&#xff0c;不仅是一个提供专业康复训练的地方&#xff0c;更是一个充满爱与关怀的成长…

DVWA 靶场环境搭建

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/15 09:30 什么是DVWA: 是OWSASP官方编写的PHP网站&#xff0c;包含了各种网站常见漏洞&#xff08;漏洞靶场&#xff09;&#xff0c;可以学习攻击及修复方式。 PHP环境包含了&#xff0c;Windows/Apache/Mysql/Php g…

【小程序】微信小程序课程 -2 快速上手

目录 1、快速上手基本概念 1.1 小程序常用组件 1.2 tabbar配置 1.3 尺寸单位 1.4 样式 1.4.1 全局样式 app.wxss 1.4.2 局部样式 xx.wxss 2、首页案例 2.1 button组件使用 2.2 swiper swiper-item 2.3 tips效果 2.4 引入矢量图 2.5 flex&#xff08;布局&#…

11. Map和Set

一、二叉搜索树 1. 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根…

一篇文章讲清楚synchronized关键字的作用及原理

概述 在应用Sychronized关键字时需要把握如下注意点&#xff1a; 一把锁只能同时被一个线程获取&#xff0c;没有获得锁的线程只能等待&#xff1b; 每个实例都对应有自己的一把锁(this),不同实例之间互不影响&#xff1b;例外&#xff1a;锁对象是*.class以及synchronized修…

Docker全家桶:Docker Compose项目部署

在学习完了前面的基础知识之后&#xff0c;我们现在可以开始部署完整的项目了。项目分成两个部分&#xff0c;前端和后端&#xff0c;并且采用前后端分离的形式。对应到docker&#xff0c;就是前端和后端分别对应一个容器。把这两个容器加入到同一个网段中&#xff0c;就能够进…

iOS OC 底层原理之 category、load、initialize

文章目录 category底层结构runtime 执行 category 底层原理添加成员变量 load调用形式系统调用形式的内部原理源码实现逻辑 initialize调用形式源码核心函数&#xff08;由上到下依次调用&#xff09;如果分类实现了 initialize category 底层结构 本质是结构体。struct _cat…

找不到MSVCR100.dll怎么办,解决MSVCR100.dll丢失的六种方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…

齿轮家族中的重要一分子——钟表齿轮

机械钟表的起源## 标题 由于日晷需要阳光来计时&#xff0c;人们发明了用水和沙子计时的钟表&#xff0c;以及燃烧煤油、观察煤油体积减少来计时的钟表&#xff0c;但这些钟表的可靠性较低。因此&#xff0c;人们发明了不需要水和沙子等流体的机械钟表。 1300年左右&#xff…

【Java】异常处理 —— Throwable 及其应用

通过一张图来展示Throwable类的继承体系&#xff0c;如图2所示。 图2 Throwable异常体系结构图 ● Error类称为错误类&#xff0c;它表示Java运行时产生的系统内部错误或资源耗尽的错误&#xff0c;是比较严重的&#xff0c;仅靠修改程序本身是不能恢复执行的&#xff0c;例如…

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中&#xff0c;设备管理涵盖多个关键方面&#xff0c;对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术&#xff0c;获取设备…

衡石分析平台系统管理手册-功能配置之应用集市管理

页面设置​ 标签页设置​ 应用集市管理员基于实际业务需求&#xff0c;可以在系统管理->页面设置中对应用集市的标签页进行设置&#xff0c;包括定义标签页名称、调整展示顺序和隐藏标签。普通用户不支持标签页设置。 重命名&#xff1a;支持对我的空间和公共空间进行重命…

java SE -- 线程 asset

一.进程 进程&#xff0c;是正在运行的程序实例&#xff0c;是操作系统进行资源分配的最小单位。每个进程都有它自己的地址空间和系统资源&#xff08;比如CPU时间&#xff0c;内存空间&#xff0c;磁盘IO等&#xff09;。多个进程可以同时执行&#xff0c;每个进程在运行时都…

【OSS安全最佳实践】对OSS表格文件中的敏感数据进行脱敏

使用数据安全中心 DSC&#xff08;Data Security Center&#xff09;的静态脱敏&#xff0c;对当前账号下源OSS Bucket中的结构化TXT、CSV、XLSX和XLS格式文件中的敏感数据进行脱敏&#xff0c;然后将脱敏后的文件保存到当前账号下的目标OSS Bucket&#xff0c;实现数据的安全共…

vue实现文件解压缩

1. 使用CompressionStream API实现压缩 这里开启了多线程解压缩 <template><div class"page"><input type"file" placeholder"选择文件" id"file" /><button click"compress(compress)">压缩<…

基础算法(4)——前缀和

1. 前缀和 题目描述&#xff1a; 解法一&#xff1a;暴力解法 直接模拟实现题目流程即可 时间复杂度为&#xff0c;根据题目给出的条件&#xff0c;肯定会超时 解法二&#xff1a;前缀和&#xff08;适用题型&#xff1a;快速 求出数组中某一个 连续区间 的 和&#xff09;…

什么录屏软件最好?这四款软件留着有用!

在这个数字化时代&#xff0c;无论是教学分享、游戏直播还是产品演示&#xff0c;高质量的录屏软件都成为了我们不可或缺的工具。面对市面上琳琅满目的选择&#xff0c;到底哪款录屏软件才能真正满足你的需求&#xff0c;成为你创作路上的得力助手呢&#xff1f;别急&#xff0…

如何调用Ascend C算子

Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。基于Ascend C编写的算子程序&#xff0c;通过编译器编译和运行时调度&#xff0c;运行在昇腾AI处理器上。使用Ascend C&#xff0c;开发者可以基于昇腾AI硬…

【ADC】ΔΣ ADC 中数字滤波器的延迟以及 SAR ADC 与 ΔΣ ADC 的差异对比总结

本文学习于TI 高精度实验室课程&#xff0c;深入探讨 delta-sigma 转换器中使用的数字滤波器。具体来说&#xff0c;本文将重点介绍数字滤波器如何引入延迟&#xff0c;因为这是 SAR 和 delta-sigma ADC 之间的显著差异。 文章目录 一、低延迟数字滤波器二、高延迟数字滤波器三…

MSVCR100.dll丢失怎么办,教你6种解决MSVCR100.dll丢失的方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…