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

节点资源接口

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://xiahunao.cn/news/2776354.html

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

相关文章

猫头虎分享已解决Bug || AJAX请求错误(AJAX Request Error):AJAX Error: 404 Not Found

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

SpringIOC之support模块ReloadableResourceBundleMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

分布式系统架构介绍

1、为什么需要分布式架构? 增大系统容量:单台系统的性能瓶颈,多台机器才能应对大规模的应用场景,所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用:为了满足业务的SLA要求,需要通过分布式架构…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 (都是傻瓜式安装),然后注册小程序账号: 拿到appid: ②简单通过demo使用微信开发者工具和…

Linux开发工具的使用 (gcc/g++ | gdb)

目录 一、gcc/g 1.关于gcc/g 2.gcc如何使用 gcc选项: 预处理: 编译: 汇编: 连接: 函数库是什么: 函数库分为动态库和静态库两种 二、调试器gdb 1.关于gdb 2. gdb的使用 gdb选项: Linux是一个广泛用于开发的操作系统&…

关于数字图像处理考试

我们学校这门科目是半学期就完结哦,同学们学习的时候要注意时间哦。 选择题不用管,到时候会有各种版本的复习资料的。 以下这些东西可能会是大题的重点: 我根据平时代码总结的,供参考 基本操作: 1.读图:…

新书速览|PyTorch 2.0深度学习从零开始学

实战中文情感分类、拼音汉字转化、中文文本分类、拼音汉字翻译、强化学习、语音唤醒、人脸识别 01 本书简介 本书以通俗易懂的方式介绍PyTorch深度学习基础理论,并以项目实战的形式详细介绍PyTorch框架的使用。为读者揭示PyTorch 2.0进行深度学习项目实战的核心技…

Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区智慧养老监护管理平台设…

GPIO输入

GPIO输入 实现的功能:按键控制LED、光敏传感器控制蜂鸣器 按键:常见的输入设备,按下导通,松开断开 按键抖动:由于按键内部使用的是机械弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动。 …

Linux匿名管道

目录 1.原理 1.直接原理 2.本质原理 2.管道接口 3.管道中的四种情况 1.读写端正常,管道如果为空,读端就要堵塞 2.读写端正常,管道如果被写满,写端就要堵塞 3.读端正常,写端关闭,读端就会读到0&#…

图书系统的Web实现(含源码)

源码地址https://gitee.com/an-indestructible-blade/project 注意事项: BorrowBooksWeb\src\main\resources路径下的application.yml文件里面的url,username,password这三个属性和自己的数据库保持一致。 浏览器访问url:http://127.0.0.1:…

three.js 匀速动画(向量表示速度)

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div>1. 匀速动画(向量表示速度)</div…

网络学习:数据链路层VLAN原理和配置

一、简介&#xff1a; VLAN又称为虚拟局域网&#xff0c;它是用来将使用路由器的网络分割成多个虚拟局域网&#xff0c;起到隔离广播域的作用&#xff0c;一个VLAN通常对应一个IP网段&#xff0c;不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。 二、…

Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerManager.cs using System.Collections; using System.Collections.G…

【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏3(附项目源码)

最终效果 文章目录 最终效果系列目录前言随着地面法线旋转在地形上随机生成动物不同部位颜色不同最终效果源码完结系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第24篇中,我们将探索如何用unity制作一…

B2080 计算多项式的值(洛谷)

题目描述 假定多项式的形式为 … x1&#xff0c;请计算给定单精度浮点数 x 和正整数 n 值的情况下这个多项式的值。多项式的值精确到小数点后两位&#xff0c;保证最终结果在 double 范围内。 输入格式 输入仅一行&#xff0c;包括 x 和 n&#xff0c;用单个空格隔开。 输…

前端滚动组件分享

分享一个前端可视化常用的卡片列表滚动组件&#xff0c;常用于可视化项目左右两侧的卡片列表的滚动。效果如下图所示&#xff1a; 组件描述 当鼠标移入滚动区域时&#xff0c;滚动行为停止当鼠标再次离开时&#xff0c;滚动继续 源码展示 <template><div ref"…

【RPA】智能自动化的未来:AI + RPA

伴随着人工智能&#xff08;AI&#xff09;技术的迅猛进步&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正在经历一场翻天覆地的变革。AI为RPA注入了新的活力&#xff0c;尤其在处理复杂任务和制定决策方面。通过融合自然语言处理&#xff08;NLP&#xff09;、机器…

uni-app x,一个纯原生的Android App开发工具

uni-app x&#xff0c;下一代uni-app&#xff0c;一个神奇的产品。 用vue语法、uni的组件、api&#xff0c;以及uts语言&#xff0c;编译出了kotlin的app。不再使用js引擎和webview。纯纯的kotlin原生app。 uni-app x&#xff0c;让“跨平台开发性能不如原生”的这条曾广为流…

CSP-202109-1-数组推导

CSP-202109-1-数组推导 解题思路 如果 currentValue 与 previousValue 相同&#xff0c;说明这个值不是一个独特的新值&#xff0c;因此只将它加到 sumTotal 上。如果 currentValue 与 previousValue 不相同&#xff0c;说明这是一个新的独特值&#xff0c;因此既将它加到 su…