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

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.xdnf.cn/news/1547284.html

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

相关文章

WAF,全称Web Application Firewall,好用WAF推荐

WAF&#xff0c;全称Web Application Firewall&#xff0c;即Web应用防火墙&#xff0c;是一种网络安全设备&#xff0c;旨在保护Web应用程序免受各种Web攻击&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等。 WAF通…

STM32堆栈溢出Bug

可以看到x和buf交换位置后&#xff0c;x处于0x200006B0地址上是不会被函数B影响到的&#xff0c;实际上B函数对buf赋值的过程是出现了越界行为的&#xff0c;所以导致了x在buf地址之后的话会被意外修改掉值。

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中&#xff0c;突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力&#xff0c;国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…

Nacos笔记

nacos注册中心&#xff1a; nacos注册中心得单击非持久化搭建&#xff1a; 单机&#xff1a;指的是 Nacos 运行在单个实例上&#xff0c;通常用于开发和测试环境。非持久化&#xff1a;表示注册的信息&#xff08;如服务实例、元数据等&#xff09;不会被保存在数据库中。Nac…

Python 从入门到实战29(目录的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了文件的打开、创建、关闭、读取的相关知识。今天…

智慧政务助力实现服务民生新突破

在数字化转型的浪潮中&#xff0c;中国移动紧密结合人工智能&#xff08;AI&#xff09;技术&#xff0c;推动政务服务的智能化升级。近日&#xff0c;中国移动正式发布政务大模型3.0版本&#xff0c;以科技创新提升政务效率&#xff0c;实现服务民生的新突破。 为什么…

从0到1训练私有大模型技能与应用实现

1.背景 近期&#xff0c;GPT大模型的发布给自然语言处理&#xff08;NLP&#xff09;领域带来了令人震撼的体验。随着这一事件的发生&#xff0c;一系列开源大模型也迅速崛起。依据一些评估机构的评估&#xff0c;这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

关于Pencils Protocol 近期市场活动,通读这篇就够!

Pencils Protocol是Scroll上综合性的DeFi协议&#xff0c;自9月18日开始其陆续在Tokensoft、Bounce、Coresky等平台开启DAPP通证的销售&#xff0c;并分别在短期内完成售罄。吸引了来自韩国、CIS、土耳其等70多个国家的5万多名认证用户&#xff0c;反响热烈&#xff0c; Pencil…

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本&#xff1a;小皮面板-好用、安全、稳定的Linux服务器面板&#xff01; 安装后先开启mysql再开启apache&#xff0c;遇到mysql启动不了的情况&#xff0c;最后重装了phpstud…

一窥AI大模型奥秘:技术前沿与产业应用双轮驱动

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度重塑着我们的生活与工作方式。其中&#xff0c;AI大模型作为技术的最前沿&#xff0c;不仅引领着技术体系的革新&#xff0c;更是产业实践与未来趋势的关键所在。 近期&#xff0c;有幸…

YOLOv8+注意力机制+PyQt5玉米病害检测系统完整资源集合

资源包含可视化的玉米病害检测系统&#xff0c;基于最新的YOLOv8注意力机制训练的玉米病害检测模型&#xff0c;和基于PyQt5制作的可视玉米病害系统&#xff0c;包含登陆页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的七类玉米病害&#xff1a;矮花叶病…

Linux防火墙-什么是防火墙

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 什么是防火墙 我们想象一下把每台服务器当成一个小区&#xff0c;我们去访问另外一个小区的朋友&#xff0c;我们需要经过什…

黑马头条day4 自媒体文章自动审核

阿里云内容安全调用 其实这个接口调用不是很难 但是需要花钱 就没买 我开了按量计费 但是还是不行 所以就没测试 于是尝试自己写返回成功值 效果不好 后来发现不如直接在函数里边取消调用文字和图片审核 这样更简单 远程调用与降级处理 这里有个bug调试了好久 第一个就是总…

Cannon-es.js物理引擎中物体动力控制的深度探索

本文目录 前言1、cannon-es给物体施加力1.1 前置代码1.2 效果1.3 给小球施加力1. applyForce效果 2. applyImpulse效果 3. applyLocalImpulse效果 4. applyTorque效果 区别总结 前言 在三维物理引擎的世界里&#xff0c;Cannon-ES以其轻量级和高效能著称&#xff0c;为开发者提…

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像 docker pull prom/node-exporter docker pull grafana/grafana docker pull prom/prometheus docker pull prom/alertmanager 其中 prom/node-exporter&#xff1a;用于收集主机系统信息和指标的 grafana/grafana&#xff1a;是一个用于可视化和分…

NRF21540—低功耗蓝牙,蓝牙mesh、Thread和Zigbee和2.4 GHz私有协议范围扩展射频前端模块

nRF21540是一款射频前端模块(FEM)&#xff0c;可用于改善短距离无线产品的传输范围和连接鲁棒性。作为一款辅助性设备&#xff0c;nRF21540是一种“即插即用型”的无线传输范围扩展器&#xff0c;可与nRF52和nRF53系列的高级多协议无线SoC搭配使用&#xff0c;所需的外部器件数…

11. Map和Set

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

解析 Pencils Protocol 价值逻辑,$DAPP为何是本轮的Alpha资产?

本轮市场周期中&#xff0c;DeFi市场已经长期处于边缘位置&#xff0c;老牌蓝筹DeFi通证仍旧能维持高市值但币价增长&#xff0c;而很多新生代DeFi项目创新不足难以推动叙事的发展&#xff0c;面向市场后难有亮眼表现&#xff0c;DeFi市场再难寻Alpha投资机会。 而随着Pencils …

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…

在Windows系统上安装的 Boost C++ 库

步骤一 https://www.boost.org/users/history/version_1_86_0.html 下载Boost库文件: 步骤二 安装: https://www.boost.org/doc/libs/1_52_0/doc/html/bbv2/installation.html 点击运行.\bootstrap.bat脚本在当前目录的powershell中执行:./b2 install --prefixPREFIX 然后…