github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/applications/nydus/sealer_nydus_guide_zh.md (about) 1 # 使用nydus加速文件分发 2 3 [Nydus](https://github.com/dragonflyoss/image-service)的按需加载和预取能够极大地提高sealer分发rootfs的性能。 4 5 ## 分发流程 6 7 在服务端,先调用[nydus-image](https://github.com/dragonflyoss/image-service/blob/master/docs/nydus-image.md)将需要分发的目录转换为nydus格式的blob,并创建的同名clientfile目录存放生成的bootstrap文件和nydusd相关配置文件,然后启动[nydusd_http_server](https://github.com/dragonflyoss/image-service/blob/master/contrib/nydus-backend-proxy/README.md)服务。文件分发时,把[nydusd](https://github.com/dragonflyoss/image-service/blob/master/docs/nydusd.md)和相关脚本文件传输到目标节点上,在节点上启动nydusd服务,nydusd会从服务端按需拉取数据并缓存到本地,当所有数据都拉取完后,即使断开nydusdserver也不影响rootfs的使用。 8 9 ## 快速使用 10 11 ### 服务端 12 13 #### nydusd_http_server start 14 15 ```bash 16 sh serverstart.sh 17 -i xxx.xxx.xxx.xxx #服务端IP 18 -d /path/to/rootfsdir1,/path/to/rootfsdir2 #需要分发的目录路径,支持多目录(用于支持sealer的都架构运行),用逗号隔开 19 ``` 20 21 调用serverstart.sh脚本,输入需要分发的目录路径和服务端IP。 22 这会调用nydus-image把指定的本地目录转换成blob保存在nydusblobs目录下,创建对应的同名目录(rootfsdir1和rootfsdir2),生成对应的bootstrap文件(rootfsdir1/rootfs.meta)和nydusd配置文件(rootfsdir1/httpserver.json),然后启动nydusdserver服务(nydusd_http_server.service)。 23 24 #### nydusd_http_server clean 25 26 ```bash 27 sh serverclean.sh 28 ``` 29 30 调用serverclean.sh,停止并删除nydusdserver服务 31 32 ### 节点端 33 34 #### nydusd start 35 36 ```bash 37 sh start.sh /path/to/mount 38 ``` 39 40 运行nydusd_scp_file/start.sh脚本,输入挂载点路径。 41 创建并启动nydusd.service,并在挂载点挂载一个overlay文件系统。nydusd会从服务器按需拉取文件并缓存在./cache目录下。 42 43 #### nydusd clean 44 45 ```bash 46 umount /path/to/mount 47 sh clean.sh 48 ``` 49 50 先将挂载点umount,然后调用nydusd_scp_file/start.sh脚本,停止nydusd.service并清理nydusd相关文件和目录。 51 52 ## nydus指南 53 54 ### nydusdfile目录结构 55 56 ```bash 57 nydusdfile 58 ├── rootfsdir1(clientfile) # 需要被传输到远端节点的目录,与被分发的本地目录同名,包括nydusd和相应的脚本文件 59 │ ├── clean.sh # nydusd clean 60 │ ├── httpserver.json # nydusd配置文件,由serverstart.sh脚本生成,配置说明详见[nydusd](https://github.com/dragonflyoss/image-service/blob/master/docs/nydusd.md) 61 │ ├── nydusd # nydusd 62 │ ├── nydusd.service # systemd service文件,由start.sh脚本生成 63 │ ├── rootfs.meta # nydus-image转换目录时生成的bootstrap文件 64 │ └── start.sh # nydusd启动脚本 65 └── serverfile # nydusd server端文件 66 ├── nydus-backend-proxy # nydusd HTTP服务器,将本地目录用作nydusd的blob后端 67 ├── nydusblobs # 存放生成的nydus blobs文件 68 ├── nydus-image # 将目录转换成nydus格式,生成元数据文件bootstrap 69 ├── Rocket.toml # nydus-backend-proxy的配置文件 70 ├── serverclean.sh # nydusd_http_server清理脚本 71 └── serverstart.sh # nydusd_http_server启动脚本 72 ``` 73 74 ### nydus应用使用说明 75 76 #### [nydus-image](https://github.com/dragonflyoss/image-service/blob/master/docs/nydus-image.md) 77 78 将本地目录转换成nydus格式,生成bootstrap和blob: 79 80 - bootstrap:存储目录元数据信息的文件 81 - blob:存储目录里所有文件数据的文件 82 83 ```bash 84 nydus-image create \ 85 --bootstrap /path/to/bootstrap \ #指定生成的bootstrap文件路径 86 --blob /path/to/blob \ #指定生成的blob存放目录 87 /path/to/source/dir #被转换的本地目录 88 ``` 89 90 #### [nydus-backend-proxy](https://github.com/dragonflyoss/image-service/blob/master/contrib/nydus-backend-proxy/README.md) 91 92 nydusd HTTP服务器,将本地blobs目录用作nydusd的blob后端 93 94 ```bash 95 nydus-backend-proxy --blobsdir /path/to/nydus/blobs/dir #输入blobs的存放目录 96 ``` 97 98 #### [nydusd](https://github.com/dragonflyoss/image-service/blob/master/docs/nydusd.md) 99 100 Linux FUSE user-space daemon,从后端拉取blob数据并解析成原来的文件数据,支持OSS、Localfs、Registry后端,通过配置文件配置存储后端。 101 102 ```bash 103 sudo nydusd \ 104 --config /path/to/nydusd-config.json \ #指定配置文件 105 --mountpoint /path/to/mnt \ #指定挂载点 106 --bootstrap /path/to/bootstrap \ #bootstrap文件 107 --log-level info 108 ``` 109 110 ### 下载编译 111 112 需要安装rust环境,推荐静态编译,避免部署时遇到glibc版本问题。 113 114 ```bash 115 git clone https://github.com/dragonflyoss/image-service.git 116 cd image-service 117 # build nydusd,nydus-images, x86_64 118 make static-release 119 cp target-fusedev/x86_64-unknown-linux-musl/release/nydusd /var/lib/sealer/nydusdfile/clientfile 120 cp target-fusedev/x86_64-unknown-linux-musl/release/nydus-image /var/lib/sealer/nydusdfile/serverfile 121 # build nydus-backend-proxy 122 cd contrib/nydus-backend-proxy 123 make static-release 124 cp arget/x86_64-unknown-linux-musl/release/nydus-backend-proxy /var/lib/sealer/nydusdfile/serverfile 125 ```