OCI和CNI个人笔记

OCI

简单来说OCI(Open Container Initiative (OCI) Specifications)就是两个“规范”

Image specifications

参考文档定义了如下几个部分,总体来说就是我们平时使用的docker image的定义和方式。也保证了image可以跨平台使用,因为所有的image都遵循image specifications。
在这里插入图片描述

Runtime specifications

参考文档主要定义了容器运行时需要的内容如下:
在这里插入图片描述

Image和Runtime specifications的协作

引用两张图,来说明协作的事情。
对于遵循image spec的image,runtime spec将可以按照定义的方式,启动停止这些image将其转化为运行时的容器。在运行时/转化的过程中,要考虑几个方面,磁盘,权限,网络,进程。
在这里插入图片描述在这里插入图片描述

CNI

容器网络规范文档

  • 容器是一个网络隔离域,尽管规范中没有定义实际的隔离技术。例如,这可以是网络名称空间或虚拟机。
  • 网络指的是一组可唯一寻址的端点,它们可以相互通信。这可能是一个单独的容器(如上所述)、一台机器或一些其他网络设备(例如路由器)。容器可以从概念上添加到一个或多个网络或从中移除。
  • runtime是负责执行CNI插件的程序。
  • 插件是一个应用指定网络配置的程序。

总结CNI规范了:

  • 管理员定义网络配置的格式。
  • 容器运行时向网络插件发出请求的协议。
  • 根据提供的配置执行插件的过程。
  • 插件将功能委托给其他插件的过程。
  • 用于插件将结果返回到运行时的数据类型。

协作

这里参考CNI相关的生命周期

  • 在调用任何插件之前,容器运行时必须为容器创建一个新的网络名称空间。
  • 容器运行时不能为同一容器调用并行操作,但允许为不同容器调用并行操作。这包括多个附件。
  • 插件必须处理跨不同容器并发执行的问题。如有必要,他们必须对共享资源(如IPAM数据库)实施锁定。
  • 容器运行时必须确保add后面最后跟着一个相应的delete。唯一的例外是发生灾难性故障,例如节点丢失。即使添加失败,仍必须执行删除。
  • 删除之后可能会有其他删除。
  • 网络配置不应在添加和删除之间更改。
  • 网络配置不应在附件之间更改。
  • 容器运行时负责清理容器的网络命名空间。
    在这里插入图片描述

参考资料

https://github.com/opencontainers/image-spec
https://github.com/opencontainers/runtime-spec/blob/main/config.md#startContainer-hooks
https://www.alibabacloud.com/blog/open-container-initiative-oci-specifications_594397#:~:text=The%20Runtime%20Specification%20specifies%20the,sandboxing%20features%20to%20use%2C%20etc
https://zhuanlan.zhihu.com/p/383552578
http://www.dasblinkenlichten.com/understanding-cni-container-networking-interface/
https://github.com/containernetworking/cni/blob/main/SPEC.md

猜你喜欢

转载自blog.csdn.net/oe1019/article/details/123755547
cni