containerd中文翻译系列(十八)containerd支持NRI

news2025/1/20 19:25:13

节点资源接口

NRI 是节点资源接口(Node Resource Interface),它是一个通用框架,用于将扩展功能插入兼容 OCI 的容器运行时。它提供了插件跟踪容器状态并对其配置进行有限的更改改的基本机制。

NRI 本身与任何容器运行时的内部实现细节无关。它提供了一个适配库,运行时用来集成 NRI 和插件并与之交互。原则上任何 NRI 插件都应能与支持 NRI 的运行时协同工作。

有关 NRI 及其功能的详细说明,请参阅NRI 存储库。

Containerd NRI 集成

containerd-nri-integration.png
containerd 中的 NRI 支持分为逻辑和物理两部分。这些部分是用于集成 NRI 和 CRI 特定位(/pkg/cri/server/nri-api)的通用插件 (/nri/*)。CRI 特定位/pkg/cri/server/nri-api)。用于运行时间无关的 NRI 表示法和 CRI 插件的内部表示之间的数据转换。

Containerd NRI 插件

containerd 通用 NRI 插件实现了与 NRI 集成和与之交互的核心逻辑。不过,它是完全不了解容器或 pod 的内部表示。它定义了一个额外的接口 Domain,当容器或 pod 的内部表示需要转换为运行时不可知的 NRI 表示时,或者当外部 NRI 插件请求更改配置时、外部 NRI 插件所要求的配置更改需要应用到 containerd 中的容器时,就会用到这个接口。Domain可以看作是 "Domain-Namespace "的快捷方式,因为 Domain 实现了通用 NRI 接口处理来自特定 containerd 命名空间的pod和容器所需的功能。需要提醒的是,containerd 命名空间隔离了containerd 客户端之间的状态。例如,kubernetes CRI 客户端使用 “k8s.io”,docker 客户端使用 “moby”,…而 containerd/ctr 默认使用 “containerd”。

CRI 容器的 NRI 支持

containerd CRI 插件会将自己注册为上述 NRIDomain,以便容器配置可由外部NRI 插件来定义。目前,只有为最初的 CRI pkg/cri/server 完成了实现。对最新的CRI pkg/cri/server 的实现在TODO LIST上。

对其他容器 "Domains"的 NRI 支持

这种功能拆分的主要原因是为了允许 NRI 插件用于其他类型的沙箱和其他容器客户端,而不仅仅是用于 "k8s.io "命名空间中的 CRI 容器。

在 containerd 中启用 NRI 支持

在 containerd 中启用和禁用 NRI 支持是通过启用或禁用启用或禁用通用的 containerd NRI 插件。该插件以及NRI 功能默认是禁用的。可以通过编辑配置文件中的"[plugins. “io.containerd.nri.v1.nri”]"部分来启用它。配置文件(默认配置文件为 /etc/containerd/config.toml)中的并将 disable = true 更改为 disable = false。启用后,
NRI 部分应该如下所示:

  [plugins."io.containerd.nri.v1.nri"]
    # 在 containerd 中启用 NRI 支持
    disable = false
    # 允许来自外部启动的 NRI 插件的连接。
    disable_connections = false
    # plugin_config_path 是搜索特定插件配置的目录.
    plugin_config_path = "/etc/nri/conf.d"
    # plugin_path 是在启动时搜索插件的目录。
    plugin_path = "/opt/nri/plugins"
    # plugin_registration_timeout 是连接后插件注册的超时时间。
    plugin_registration_timeout = "5s"
    # plugin_requst_timeout 是插件处理事件/请求的超时时间。
    plugin_request_timeout = "2s"
    # socket_path 是要创建供插件连接的 NRI 套接字的路径。
    socket_path = "/var/run/nri/nri.sock"

启动 NRI 插件有两种方式。插件可以预先注册好在这种情况下,它们会在 NRI适配器实例化时(或者在我们的例子中,启动 containerd 时)自动启动。插件也可以通过外部方式启动,例如由 systemd 启动。

预注册插件的方法是防止一个可执行文件的符号链接到一个众所周知的 NRI 特定目录中,默认情况下是 /opt/nri/plugins目录。预先注册的插件伴随着一个预先连接到NRI的套接字一起启动。外部启动的插件会连接到 NRI 专用的套接字(默认为 /var/run/nri/nri.sock)来注册自己。预注册和外部启动插件的唯一区别在于它们是如何启动并连接到 NRI 的。一旦建立连接所有插件都是一样的。

可以对 NRI 进行配置,禁用来自外部启动的插件的连接。在这种情况下,根本不会创建众所周知的套接字。上图所示的配置片段可确保启用外部连接而与默认无关。这对于测试非常便利因为这样可以随时连接、断开和重新连接插件。

请注意,您不能在一个节点上运行两个启用了 NRI 的运行时,并使用相同的默认套接字配置。您需要禁用 NRI 或更改其中一个运行时中的NRI 套接字路径。

在 Containerd 中测试NRI支持

您可以通过以下方式验证 NRI 集成是否已正确启用并正常运行配置 containerd 和 NRI,并从 NRI 资源库获取 NRI日志记录器插件,编译并启动它。

git clone https://github.com/containerd/nri
cd nri
make
./build/bin/logger -idx 00

您应该会看到日志记录器插件正在接收现有 pod和容器的列表。如果使用 crictl 或 kubectl 创建或移除更多 pod 和容器,你就会看到日志记录器打印的相应 NRI事件的详细日志。

与 NRI v0.1.0 版插件兼容

您可以使用v010-adapter 插件启用与 NRI v0.1.0 插件的向后兼容性。

git clone https://github.com/containerd/nri
cd nri
make
sudo cp build/bin/v010-adapter /usr/local/bin
sudo mkdir -p /opt/nri/plugins
sudo ln -s /usr/local/bin/v010-adapter /opt/nri/plugins/00-v010-adapter

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

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

相关文章

MySQL篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、实践中如何优化 MySQL二、优化数据库的方法三、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

Cilium CNI深度指南

Cilium是基于eBPF的功能强大的CNI插件,为云原生环境提供了强大的网络和安全支持。原文: Cilium CNI: A Comprehensive Deep Dive Guide for Networking and Security Enthusiasts! 🌓简介 欢迎阅读为网络和安全爱好者提供的全面深入的指南! 本…

Django(十)

1. Ajax请求 浏览器向网站发送请求时:URL 和 表单的形式提交。 GETPOST 特点:页面刷新。 除此之外,也可以基于Ajax向后台发送请求(偷偷的发送请求)。 依赖jQuery编写ajax代码 $.ajax({url:"发送的地址"…

《剑指 Offer》专项突破版 - 面试题 37 : 小行星碰撞(C++ 实现)

题目链接:LCR 037. 行星碰撞 - 力扣(LeetCode) 题目: 输入一个表示小行星的数组,数组中每个数字的绝对值表示小行星的大小,数字的正负号表示小行星运动的方向,正号表示向右飞行,负…

探索设计模式的魅力:代理模式揭秘-软件世界的“幕后黑手”

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 引言 一、魔法世界 1.1 定义与核心思想 1.2 静态代理 1.3 动态代理 1.4 虚拟代理 1.5 代理模式结构图 1.6 实例展示如何工作(场景案例) 不使用模式实现 有何问题 使用模式重构示例 二、…

HttpClient | 支持 HTTP 协议的客户端编程工具包

目录 1、简介 2、应用场景 3、导入 4、API 5、示例 5.1、GET请求 5.2、POST请求 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初…

Spring Boot 笔记 004 自动配置和自定义starter

003讲到了导入jar包中的方法,但其实是个半成品,别人写的jar包中的方法我要在自己的代码中去调用,非常的不方便。原则上写给别人用的jar包,人家要能直接用,而不用写注入的方法。 在springboot中会自动扫描imports文件中…

ThinkPad X201 经典小黑 折腾玩

前段时间,在折腾ThinkPad T430时,偶然看到了ThinkPad X200,一个12.1英寸的高端便携小本。 想当年,但那是总裁级别才能用的,应该是接近2万元,我们是一直用DELL的。 没想到的是,在海鲜市场上&am…

[office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法

excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 在日常工作中经常会到用excel,有时需要计算毛重和皮重的时间间隔,具体的计算方式是什么,一起来了解一下吧 在日常工作中经常会到用excel,在整理编辑过磅数据…

贵金属交易包括哪些?香港有哪些贵金属交易平台?

随着金融市场的不断发展,贵金属交易作为一种投资方式,越来越受到投资者的关注。贵金属交易不仅具有投资价值,还能够为投资者提供规避风险和保值的工具。本文将介绍贵金属交易的种类和香港的贵金属交易平台。 一、贵金属交易的种类 贵金属交…

【开源】JAVA+Vue.js实现高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

个人IP塑造与短视频带货,人人都是吸金的网红博主

一、教程描述 网红带货,就是网络红人通过推荐和分享,间接销售产品的一种方式。网红带货并不是直接带货,而是需要打造自己,用时下热门的话讲叫塑造IP,一般通过旅行、工作、日常服装搭配等这些行为,输出自己…

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏与窗口

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …

数据在内存中的存储:深入了解与理解技巧

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty‘s blog 引言 ​ 我们早就学完基本的数据类型,那这些数据类型…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能,PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

【Linux系统学习】2.Linux基础命令

Linux基础命令 Linux的目录结构 Linux命令入门 目录切换相关命令(cd/pwd) 相对路径、绝对路径和特殊路径符 创建目录命令(mkdir) 文件操作命令part1(touch、cat、more) 文件操作命令part2(cp、mv、rm) 查找命令(which、find) grep、wc和管道符…

零基础学编程怎么入手,中文编程工具构件箱之渐变背景构件用法教程,系统化的编程视频教程上线

零基础学编程怎么入手,中文编程工具构件箱之渐变背景构件用法教程,系统化的编程视频教程上线 一、前言 今天给大家分享的中文编程开发语言工具资料如下: 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例…

C++三剑客之std::any(一) : 使用

相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析​​​​​​​ 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…

代码随想录 Leetcode376. 摆动序列

题目&#xff1a; 代码&#xff08;首刷看解析 2024年2月9日&#xff09;&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int direction 0;//1上升&#xff0c;0下降int res 0;//res…

【Linux系统学习】3.Linux用户和权限

Linux用户和权限 1.认知root用户 1.1 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; 而在前期&#…