如何在 Anolis 8上部署 Nydus 镜像加速方案?

在上一篇文章中详细介绍Anolis OS 是首个原生支持镜像加速 Linux 内核,Nydus 镜像加速服务重新优化了现有的 OCIv1 容器镜像格式,重新定义镜像的文件系统,数据与元数据分离,实现按需加载,本文作为使用 Nydus 的教程将详细介绍在 Anolis OS 上部署 Nydus 的过程,以帮助用户熟悉 Nydus 的基本使用方法。

一、部署环境

本教程中使用的是阿里云上购买的 EC2 虚拟机,您也可以在本地或其他云环境中部署 Nydus。

操作系统:Anolis OS 8.4 (ANCK 64位) 内核版本:Linux 4.19 CPU:2 vCPU@3.5GHz 内存:8GB 软件依赖:Nydus 当前仅支持 Containerd,因此在需要使用 containerd 作为容器引擎

龙蜥安装使用 containerd 的方法。

dnf --enablerepo Plus install -y containerd

二、安装 Nydus

龙蜥社区已经集成 Nydus 最新 Stable 稳定版本,推荐使用龙蜥集成的软件包安装 Nydus。如果需要安装指定版本的 Nydus,可以下载上游开源版本的代码包安装(以下两种安装方式任选一种即可)。

2.1 使用龙蜥集成的软件包

dnf --enablerepo Plus install -y nydus-rs nydus-snapshotter

2.2 使用上游开源版本

  • 下载 Nydus 的可执行文件。

从发布页面(见文末链接1)获取最新的压缩包,并解压。

wget https://github.com/dragonflyoss/image-service/releases/download/v2.1.0-alpha.4/nydus-static-v2.1.0-alpha.4-linux-amd64.tgz
tar -xzvf nydus-static-v2.1.0-alpha.4-linux-amd64.tgz
  • 下载 Nydus Snapshotter 的可执行文件。

从发布页面(见文末链接2)获取最新的压缩包,并解压。

wget https://github.com/containerd/nydus-snapshotter/releases/download/v0.2.4/nydus-snapshotter-v0.2.4-x86_64.tgz
tar -xzvf nydus-snapshotter-v0.2.4-x86_64.tgz
mv nydus-snapshotter/containerd-nydus-grpc nydus-static/containerd-nydus-grpc
  • 选择 Nydus 运行模式。

Nydus 加速框架支持了三种运行模式,以支持不同场景下的镜像按需加载:

  • 通过 FUSE 提供给 RunC 这类容器运行时的按需加载能力,也是 Nydus 目前最常用的模式;
  • 通过 VirtioFS 承载 FUSE 协议,支持基于 VM 的容器运行时,例如 Kata 等,为 VM Guest 里的容器提供 RootFS 按需加载能力;
  • 通过内核态的 EROFS 只读文件系统提供 RootFS,目前 Nydus 的 EROFS 格式支持已经进入了 Linux 5.16 主线,其内核态缓存方案 erofs over fscache 也已经合入 Linux 5.19-rc1 主线,内核态方案可以减少上下文切换及内存拷贝开销,在性能有极致要求的情况下可以用这种模式。

由于第一种模式的环境依赖最少,比较适合演示。因此在这里我们选择 fuse 模式,将 nydusd 二进制文件中的 nydusd-fusedev 重命名为 nydusd。

cd nydus-static
mv nydusd-fusedev nydusd
  • 安装可执行文件。
sudo cp nydusd nydus-image /usr/bin
sudo cp nydusify containerd-nydus-grpc /usr/bin
sudo cp ctr-remote nydus-overlayfs /usr/
cd ..

三、启动 Nydus Snapshotter

3.1 写入配置文件

Nydus 提供了一个容器化的远程快照管理器 containerd-nydus-grpc 来准备容器 rootfs 与 nydus 格式的镜像。要启动它,首先将 nydusd 配置保存到 /etc/nydusd-config.json:

sudo tee /etc/nydusd-config.json > /dev/null << EOF
{"device": {"backend": {"type": "registry","config": {"scheme": "https","skip_verify": false,"timeout": 5,"connect_timeout": 5,"retry_limit": 2}},"cache": {"type": "blobcache","config": {"work_dir": "cache"}}},"mode": "direct","digest_validate": false,"iostats_files": false,"enable_xattr": true,"fs_prefetch": {"enable": true,"threads_count": 4}
}
EOF

3.2 启动远程快照管理器

新开一个终端运行 containerd-nydus-grpc。

sudo /usr/bin/containerd-nydus-grpc \--config-path /etc/nydusd-config.json \--shared-daemon \--log-level info \--root /var/lib/containerd/io.containerd.snapshotter.v1.nydus \--cache-dir /var/lib/nydus/cache \--address /run/containerd/containerd-nydus-grpc.sock \--nydusd-path /usr/bin/nydusd \--nydusimg-path /usr/bin/nydus-image \--log-to-stdout

cache-dir参数表示本地 blob 缓存根目录,如果未设置,会默认为root+ "/cache"。它会覆盖 nydusd-config.json 中的 device.cache.config.work_dir。

四、配置 Containerd

4.1 将以下内容添加到 containerd 配置中(默认为/etc/containerd/config.toml):

[proxy_plugins][proxy_plugins.nydus]type = "snapshot"address = "/run/containerd/containerd-nydus-grpc.sock"
[plugins."io.containerd.grpc.v1.cri".containerd]snapshotter = "nydus"disable_snapshot_annotations = false

4.2 重新启动 Contained。

配置更新后需要重启 Contained 服务。

systemctl restart containerd

五、启动 Nydus 镜像格式的容器

这里展示如何使用 crictl 启动一个 Nydus 镜像格式的容器。

5.1 编写 sandbox yaml 文件 nydus-sandbox.yaml,往 POD 中传递 Nydus annotation。

metadata:attempt: 1name: nydus-sandboxnamespace: default
log_directory: /tmp
linux:security_context:namespace_options:network: 2
annotations:"io.containerd.osfeature": "nydus.remoteimage.v1"

5.2 编写容器 yaml 文件 nydus-container.yaml,指定使用的容器镜像。

metadata:name: nydus-container
image:image: cloud-native-sig-registry.cn-hangzhou.cr.aliyuncs.com/openanolis/anolisos:8.6-x86_64-nydus
command:- /bin/sleep
args:- 600
log_path: container.1.log

这里我们使用了龙蜥云原生镜像仓库中已经集成的 Anolis 8.6 的镜像作为测试镜像。 5.3 拉取镜像并启动容器。

date
crictl pull cloud-native-sig-registry.cn-hangzhou.cr.aliyuncs.com/openanolis/anolisos:8.6-x86_64-nydus
pod=`crictl runp nydus-sandbox.yaml`
container=`crictl create $pod nydus-container.yaml nydus-sandbox.yaml`
crictl start $container
crictl ps
date

这里可以看到,采用 Nydus 镜像仅使用 2 秒便完成了容器镜像的拉取和容器启动的过程。在同等的条件下,我们创建一个 OCIv1 的镜像对比一下,使用的依然是 anolis 8.6 的镜像,镜像的内容与上述使用的 nydus 完全一致。yaml 文件编写如下:

metadata:attempt: 1name: normal-sandboxnamespace: default
log_directory: /tmp
linux:security_context:namespace_options:network: 2

metadata:name: normal-container
image:image: cloud-native-sig-registry.cn-hangzhou.cr.aliyuncs.com/openanolis/anolisos:8.6
command:- /bin/sleep
args:- 600
log_path: container.1.log

采用如下的命令:

date
crictl pull cloud-native-sig-registry.cn-hangzhou.cr.aliyuncs.com/openanolis/anolisos:8.6
pod=`crictl runp normal-sandbox.yaml`
container=`crictl create $pod normal-container.yaml normal-sandbox.yaml`
crictl start $container
crictl ps
date

可以看到,同等环境下,使用 OCIv1 镜像格式启动 Anolis 8.6 的版本需要10 秒,是 Nydus 的 5 倍。

六、转换并启动 Nydus 镜像

这里展示转换 Nydus 镜像并推送到您的镜像仓库中去,为了能够登录镜像仓库,我们采用 nerdctl 工具进行配置

6.1 安装 Nerdctl 和 CNI plugin。

Nerdctl 是一种与 docker 兼容的命令行,但是由于它能够支持启动 Nydus 镜像,因此我们在这里选择使用 Nerdctl。由于容器在运行中可能需要依赖一些插件,所以我们同时安装 CNI plugin。

dnf update -y anolis-repos && yum install -y anolis-experimental-release && yum install -y nerdctl
dnf install -y containernetworking-plugins

使用 nerdctl login 进行登录,用于仓库认证,当然,您可以采用 docker login 方式登录。

nerdctl login --username ${your username} --password xxx

6.2 将镜像转换为 Nydus 格式,并推送至远程镜像仓库。

nydusify convert --nydus-image /usr/bin/nydus-image --source ${your image} --target ${your registry address}/${image name}:${tag}

按照操作完成以上步骤,恭喜,您已经成功在 Anolis OS 上完成了 Nydus 镜像加速方案的部署!如果后续还有疑问,请扫描下方二维码或搜索钉钉群号(44701621)入群交流。

参考链接:

1. Nydus软件包发布页面:

https://github.com/dragonflyoss/image-service/releases/latest

2.containerd 下 nydus snapshotter 发布页面:

https://github.com/containerd/nydus-snapshotter/releases/tag/v0.2.4

3. Nydus 的更多技术细节:

https://developer.aliyun.com/article/971522

4.Nydus 更详细的部署说明:

https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率

近日&#xff0c;关于机器学习访存密集计算编译优化框架的论文《AStitch: Enabling A New Multi-Dimensional Optimization Space for Memory-Intensive ML Training and Inference on Modern SIMT Architectures》被系统领域顶会ASPLOS 2022接收。 AStitch通过编译优化的手段来…

微前端架构的几种技术选型

背景 随着SPA大规模的应用&#xff0c;紧接着就带来一个新问题&#xff1a;一个规模化应用需要拆分。 一方面功能快速增加导致打包时间成比例上升&#xff0c;而紧急发布时要求是越短越好&#xff0c;这是矛盾的。另一方面当一个代码库集成了所有功能时&#xff0c;日常协作绝…

真正的 HTAP 对用户和开发者意味着什么?

数据库的全称是 DBMS&#xff08;Database Management System&#xff09;&#xff0c;早期是不区分 OLTP 与 OLAP 的&#xff0c;E.F.Codd 在 1970 年就提出了关系模型&#xff0c;Jim Gray 在 1976 年提出了事务模型。随着数据库的应用场景越来越丰富&#xff0c;单一数据库的…

const常见用法

const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val 10; //Val 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传…

微服务治理热门技术揭秘:无损上线

为什么有了无损下线&#xff0c;还需要无损上线&#xff1f;无损上线可以解决哪些问题&#xff1f; 本篇文章将一一回答这些问题。 无损上线功能不得不说是一个客户打磨出来的功能我们将从一次发布问题的排查与解决的过程说起。 背景 阿里云内部某应用中心服务在发布过程中出…

深度强化学习技术概述

深度强化学习介绍 强化学习主要用来学习一种最大化智能体与环境交互获得的长期奖惩值的策略&#xff0c;其常用来处理状态空间和动作空间小的任务&#xff0c;在如今大数据和深度学习快速发展的时代下&#xff0c;针对传统强化学习无法解决高维数据输入的问题&#xff0c;2013…

大屏小程序探索实践 | Cube 技术解读

所谓大屏小程序&#xff0c;是以 Cube 小程序技术栈 为载体&#xff0c;运行在智能电视或智能机顶盒等设备上的一种小程序形态。这些设备的主要特点是&#xff1a; 以 Android 系统为主&#xff0c;系统版本普遍较低&#xff0c;有些设备依然停留在 Android 4.2&#xff0c;An…

阿里云解决方案架构师张平:云原生数字化安全生产的体系建设

关于今天的分享主题——“安全生产”&#xff0c;内容主要分为三大部分&#xff1a; 第一部分是安全生产的背景&#xff0c;以及我们对于安全生产这个领域的理解&#xff1b;第二部分主要介绍阿里巴巴集团的安全生产工作到底是怎么开展的&#xff0c;借此给各位有作为参考和借…

从斜边之长为L的一切直角三角形中,求有最大周长的直角三角形.(多元函数的极值及其求法)

三条直线围成的直角三角形三个顶点A(16,0),B(0,8),C(0,0),设点(x,y)到AB,BC,AC的距离分别是d1,d2,d3,有: |AB|*d1|BC|*d2|AC|*d32S(ABC) 而(|AB|*d1|BC|*d2AC*d3)^24S^(ABC)/(|AB|^2|BC|^2|AC|^2)128/5 等号成立当且仅当|AB|/d1|BC|/d2|AC|/d3 就是40/|x2y-16|8/|x|16/|y| …

全链路灰度新功能:MSE上线配置标签推送

为什么需要配置标签推送 从全链路灰度谈起 在微服务场景中&#xff0c;应用的灰度发布迎来了新的挑战。不同于单体架构中将应用整体打包即可发布测试版本&#xff0c;微服务应用往往由多个服务组合而成。这些服务通常由不同的团队负责&#xff0c;独立进行开发。一个新功能通…

动态尺寸模型优化实践之 Shape Constraint IR Part I

在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作&#xff0c;鉴于篇幅较长&#xff0c;为了提升阅读体验&#xff0c;我们将分享拆分为两个部分&#xff1a; Part I 中我们将介绍问…

云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析

在刚刚过去的 RocketMQ Summit 2022 全球开发者峰会上&#xff0c;我们对外正式开源了我们的新产品 RocketMQ-Eventbridge 事件驱动引擎。 RocketMQ 给人最大的印象一直是一个消息引擎。那什么是事件驱动引擎&#xff1f;为什么我们这次要推出事件驱动引擎这个产品&#xff1f…

动态尺寸模型优化实践之 Shape Constraint IR Part II

在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作&#xff0c;鉴于篇幅较长&#xff0c;为了提升阅读体验&#xff0c;我们将分享拆分为两个部分&#xff1a; Part I 中我们将介绍问…

PolarDB 助力易仓打造跨境行业生态链协同的产业链 SaaS

2022年7月&#xff0c;易仓ECCANG WMS东南亚版正式上线&#xff01;专为东南亚海外仓业务打造&#xff0c;帮助东南亚海外仓企业排忧解难&#xff0c;实现订单、仓库、人员、财务高效管理。易仓科技是头部的跨境行业SaaS服务商&#xff0c;其生态涵盖了300工厂、100000卖家、17…

iLogtail 社区版使用入门 - 采集 MySQL Binlog

iLogtail是阿里云日志服务&#xff08;SLS&#xff09;团队自研的可观测数据采集Agent&#xff0c;拥有的轻量级、高性能、自动化配置等诸多生产级别特性&#xff0c;可以署于物理机、虚拟机、Kubernetes等多种环境中来采集遥测数据。iLogtail在阿里云上服务了数万家客户主机和…

融合数据库生态:利用 EventBridge 构建 CDC 应用

引言 CDC&#xff08;Change Data Capture&#xff09;指的是监听上游数据变更&#xff0c;并将变更信息同步到下游业务以供进一步处理的一种应用场景。近年来事件驱动架构&#xff08;EDA&#xff09;热度逐步上升&#xff0c;日渐成为项目架构设计者的第一选择。EDA 天然契合…

Pandas+ SLS SQL:融合灵活性和高性能的数据透视

Pandas是什么 Pandas是一个十分强大的python数据分析工具&#xff0c;也是各种数据建模的标准工具。Pandas擅长处理数字型数据和时间序列数据。Pandas的第一大优势在于&#xff0c;封装了一些复杂的代码实现过程&#xff0c;只需要调用接口就行了&#xff0c;避免了编写大量的…

iLogtail 开源之路

2022年6月底&#xff0c;阿里云iLogtail代码完整开源&#xff0c;正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器&#xff0c;多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户&#xff0c;目前已经有千万级的安装量&#xff0…

迁移 Nacos 和 ZooKeeper,有了新工具

背景 注册中心迁移在行业中主要有两个方案&#xff0c;一个是双注册双订阅模式&#xff08;类似数据库双写&#xff09;&#xff0c;一个是 Sync 模式&#xff08;类似于数据库 DTS&#xff09;&#xff1b;MSE 同时支持了两种模式&#xff0c;对于开通 MSE 服务治理客户&…

基于 Serverless+OSS 分分钟实现图片秒变素描

场景介绍 小明接到学校老师安排的任务&#xff0c;需要批量将班级里同学们拍的普通照片转换为素描图&#xff0c;供课堂游戏使用&#xff0c;于是求助到程序员老爸&#xff0c;机智的程序员老爸分分钟用几行Python代码解决&#xff1a;在阿里云Serverless函数计算服务中部署普…