保姆级教程!如何在 Anolis 8 上构建基于 Nydus 和 Dragonfly 的镜像加速解决方案?
文/云原生 SIG
01 背景
镜像是容器技术的基础之一,在云原生场景下,业务的正常运作离不开对镜像的制作、分发和运行。当前的镜像在使用的过程中,需要将镜像从仓库中全量拉取到本地,再由容器 engine 进行解压,堆叠挂载,然后才能构造成 rootfs 提供给容器。而在实际生产过程中,由于镜像版本的迭代,镜像的体积往往越来越大,因而导致镜像拉取耗时往往占据了容器启动阶段的大部分时间。
2016 年的 usenix 的论文 Slacker:Fast Distribution with Lazy Docker Containers (链接见文末)中曾发表数据,在容器启动的过程中,平均只需要读取镜像数据中的 7%不到的数据,因此在实际应用过程中,通常不需要全量拉取数据我们就可以完成业务的发布过程。同时,镜像的拉取速度受限于镜像仓库和运行节点之间的网络带宽,而容器镜像的下载的承接主体是 node,即一个容器如果运行在不同的 node 上,就需要在不同的 node 中各自拉取数据,在集群规模较大的情况下,容器并发程度较高的时候,都会对容器镜像仓库造成一定的压力。
基于以上问题,龙蜥社区引入了 Nydus 镜像加速方案以及基于 Dragonfly 的 P2P 镜像加速系统,其中 Nydus 提供了镜像按需加载能力,Dragonfly 提供了集群镜像 P2P 加速能力,通过以上能力的组合减少容器启动过程中镜像的拉取时间,提升集群间的镜像分发效率。
本文将介绍如何在龙蜥 OS 上构建基于 Nydus 和 Dragonfly 的镜像加速端到端解决方案,其中会包含:
harbor 镜像仓库构建以及 Nydus 插件的支持
单机 Nydus 镜像加速组件的配置以及使用
Nydus 格式镜像的制作、提交和使用
单机 Dragonfly P2P 加速组件的配置以及使用
使用 Nydus 以 Dragonfly 在特定场景下的效果对比
注:Harbor、Nydus、Dragonfly 这 3 个组件是相互独立的,您可以根据自己的实际应用场景对 3 个组件进行组合应用。
基于本解决方案,可以在特定的实验 case 下,将集群的扩容速度提升 100%,集群的计算性能提升 127% ,具体实验结果请参考:https://openanolis.cn/sig/cloud-native/doc/664655138551659287。
另外,龙蜥社区推出了 ACNS(OpenAnolis Cloud Native Suite),您可以用一键部署的方式完成 Nydus & Dragonfly 在集群内的部署应用,欢迎大家试用!
02 在龙蜥 OS 上构建 Harbor 以及服务与 Harbor 的 Nydus 插件
Harbor 是一个开源的企业级的容器 Registry 管理项目,提供容器 Registry 管理 UI,提供的功能包括:基于角色访问的控制权限管理(RBAC)、AD/LDAP 集成、日志审核、管理界面、自我注册、镜像复制和中文支持等。在使用 Harbor 时,您可以在您的集群内迅速搭建一个企业级的容器 registry 服务,不仅可以保证生产镜像的安全,还可以获得更高的稳定性保障。
Nydus 镜像加速服务针对 Harbor 进行了适配,您可以在您的 harbor 镜像仓库中添加对 Nydus 的支持,这样,用户在推送一个镜像的时候,harbor 镜像仓库会自动完成对于镜像格式的转换,避免手动修改、转换镜像的负载工作。本章将介绍如何在 Harbor 仓库中对接使能 Nydus 服务。
首先,您需要有一个已经建立完成的 Harbor 镜像仓库,如果您还没有,可以参考龙蜥的 Harbor 部署文档:https://openanolis.cn/sig/cloud-native/doc/663184185494429473。
然后,我们需要开始适配 Nydus 的 acceld 服务,这里我们将 accld 与 Harbor 部署在同一台宿主机环境上:
配置 harbor 的 webhook,选择我们需要使能 Nydus 的 project,点击进入项目,这里采用默认的 project library:
在相应的 project 中选择添加 webhook:
配置 webhook:
其中,事件类型选择 Artifact pushed,即在推送镜像的时候,调用此 webhook,然后,在 Endpoint 地址中,填写 http://{要部署的 acceld 的主机 IP}:2077/api/v1/conversions。
在 Auth Header 中填写 header,然后选择添加。然后开始添加机器人账户:
在点击添加之后,会出现账户的令牌,请务必记录令牌的内容,将账目名和 secret 用 base64 工具生成 auth 序列:
下载 acceld 组件,并配置好 acceld 的配置文件 config.yaml.nydus:
首先配置 harbor 的域名,然后将刚才生产的序列号补充到 auth 中,最后将 insecure 字段配置为 true:
最后,运行 acceld:
在您运行 acceld 的机器上,需要有 nydus-image 工具用于镜像转换,如果您使用的是龙蜥 OS,那么只需要安装 nydus-rs 包,否则需要自行下载该工具,具体步骤请参考:https://openanolis.cn/sig/cloud-native/doc/624244092113272868。
此时,只要有用户往该 harbor 仓库中上传任意镜像,acceld 都会自动将其转换成 Nydus 格式的镜像,以 {original_tag}-nydus 作为 tag,比如:
可以看到这时 harbor 仓库中会多出现一个 ubuntu:latest-nydus 的镜像:
03 单机 Nydus 镜像加速组件的配置以及使用
在单机上安装、使用 Nydus 组件,请参考以下文档:*https://openanolis.cn/sig/cloud-native/doc/624244092113272868*。
04 Nydus 格式镜像的制作、提交和使用
4.1 对 Harbor 仓库中已有镜像进行转换
如果您的 Harbor 仓库中已经存在了一定的镜像,需要进行 Nydus 格式转换,可以采用如下方式:
首先,在已经运行了 acceld 的机器上,安装 acceldctl 工具:
然后,进行转换,比如 harbor 中已经有 nginx 的镜像,我们需要进行转换,可以采用:
4.2 在任意安装了 Nydus 的机器上进行本地镜像的转换
请参考 https://openanolis.cn/sig/cloud-native/doc/624244092113272868 中的第六章,您使用 nydusify convert 时,如果目标的镜像指明了仓库,nydusify 会自动帮您推送到相应的仓库中去。
4.3 使用 buildkit 进行基于 dockerfile 的镜像制作
我们可以使用 buildkit 工具基于 Dockerfile 构建 Nydus 格式的容器镜像,Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction) ,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
先创建一个 nginx 的 Dockerfile
安装 Nydus 与 nerdctl
下载并启动支持 Nydus 版本的 buildkit
启动本地镜像中心
构建并转换镜像
启动镜像
4.4 Nydus 镜像制作限制
当前 Nydus 格式还不支持使用 nerdctl 或者 docker commit 进行镜像制作。
当前 Nydus 格式镜像不支持使用 buildkit 的时候,用 from nydus 格式镜像的方式制作镜像。
05 Dragonfly P2P 加速组件的配置以及使用
首先,我们先要在集群内部署 Dragonfly,如果您的集群内还没有 Dragonfly,请参考文章部署:*https://openanolis.cn/sig/cloud-native/doc/663184381485245340*。
然后,我们开始进行 Dragonfly 和 Harbor 私有仓库的对接,这里介绍用代理的方式来配置 Dragonfly 的方式。首先,生成 worker 节点的证书,用于 Dragonfly 的 https 劫持:
修改 Dragonfly 的 daemon 配置文件(/etc/dragonfly/dfget.yaml),将证书以及加速域名添加到配置文件中:
注意,在/etc/containerd/config.toml 中,不能在 registry.anolis.com 中配置 127.0.0.1:65001 的 endpoint:
至此,Dragonfly 对接我们的自建 harbor 已经构建完毕。
更多内容还请前往龙蜥社区云原生 SIG 查看,链接地址:
https://openanolis.cn/sig/cloud-native
2016 年 usenix 论文:
https://www.usenix.org/system/files/conference/fast16/fast16-papers-harter.pdf
—— 完 ——
版权声明: 本文为 InfoQ 作者【OpenAnolis小助手】的原创文章。
原文链接:【http://xie.infoq.cn/article/52568c504635761e78d0e4e54】。文章转载请联系作者。
评论