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

2年前 (2022) 程序员胖胖胖虎阿
183 0 0

简介: 手把手教你在 Anolis OS 上部署 Nydus!
如何在 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-snapshotter2.2 使用上游开源版本下载 Nydus 的可执行文件。从发布页面(见文末链接1)获取最新的压缩包,并解压。wget https://github.com/dragonflyo...
tar -xzvf nydus-static-v2.1.0-alpha.4-linux-amd64.tgz下载 Nydus Snapshotter 的可执行文件。从发布页面(见文末链接2)获取最新的压缩包,并解压。wget https://github.com/containerd...
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 Snapshotter3.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

}
}
EOF3.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-stdoutcache-dir参数表示本地 blob 缓存根目录,如果未设置,会默认为root+ "/cache"。它会覆盖 nydusd-config.json 中的 device.cache.config.work_dir。四、配置 Containerd4.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 = false4.2 重新启动 Contained。配置更新后需要重启 Contained 服务。systemctl restart containerd五、启动 Nydus 镜像格式的容器这里展示如何使用 crictl 启动一个 Nydus 镜像格式的容器。5.1 编写 sandbox yaml 文件 nydus-sandbox.yaml,往 POD 中传递 Nydus  annotation。metadata:
attempt: 1
name: nydus-sandbox
namespace: 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
如何在 Anolis 8上部署 Nydus 镜像加速方案?
这里可以看到,采用 Nydus 镜像仅使用 2 秒便完成了容器镜像的拉取和容器启动的过程。在同等的条件下,我们创建一个 OCIv1 的镜像对比一下,使用的依然是 anolis 8.6 的镜像,镜像的内容与上述使用的 nydus 完全一致。yaml 文件编写如下:metadata:
attempt: 1
name: normal-sandbox
namespace: default
log_directory: /tmp
linux:
security_context:

namespace_options:
  network: 2metadata:

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
如何在 Anolis 8上部署 Nydus 镜像加速方案?
 可以看到,同等环境下,使用 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 xxx6.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/dragonflyo... 下 nydus snapshotter 发布页面:https://github.com/containerd... Nydus 的更多技术细节:https://developer.aliyun.com/... 更详细的部署说明:https://github.com/dragonflyo... —— 完 ——加入社群加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!
如何在 Anolis 8上部署 Nydus 镜像加速方案?
关于龙蜥社区  龙蜥社区(OpenAnolis)由企事业单位、高等院校、科研单位、非营利性组织、个人等在自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux 上游发行版社区及创新平台。龙蜥社区成立的短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 停服后的应对方案,构建一个兼容国际 Linux 主流厂商的社区发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。目前,Anolis OS 8.6 已发布,更多龙蜥自研特性,支持 X86_64 、RISC-V、Arm64、LoongArch 架构,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。欢迎下载:https://openanolis.cn/download加入我们,一起打造面向未来的开源操作系统!https://openanolis.cn原文链接:https://click.aliyun.com/m/10...本文为阿里云原创内容,未经允许不得转载。

版权声明:程序员胖胖胖虎阿 发表于 2022年10月6日 上午9:32。
转载请注明:如何在 Anolis 8上部署 Nydus 镜像加速方案? | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...