如何在 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 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: 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
這裡可以看到,採用 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: 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 釋出頁面:
3.Nydus 的更多技術細節:
https://developer.aliyun.com/article/971522
4.Nydus 更詳細的部署說明:
https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md
相關連結可移步龍蜥公眾號(OpenAnolis龍蜥)2022年8月11日相同推送檢視。
—— 完 ——
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2910164/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 保姆級教程!如何在 Anolis 8 上構建基於 Nydus 和 Dragonfly 的映象加速解決方案?Go
- Nydus 映象掃描加速
- Nerdctl 原生支援 Nydus 加速映象
- Nydus 映象加速外掛遷入 Containerd 旗下AI
- Nydus 在約苗平臺的容器映象加速實踐
- Nydus 加速映象一致性校驗增強
- 如何在Anolis 8 安裝 極狐GitLab RunnerGitlab
- 螞蟻安全科技 Nydus 與 Dragonfly 映象加速實踐 | 龍蜥技術Go
- Jou 的解決方案系列:Composer 映象加速與 NPM 映象加速NPM
- 讓容器應用管理更快更安全,Dragonfly 釋出 Nydus 容器映象加速服務Go
- docker 映象加速Docker
- Nydus —— 下一代容器映象的探索實踐
- 【實戰】yolov8 tensorrt模型加速部署YOLO模型
- 映象加速器
- Docker 映象加速教程Docker
- 如何在K8s,Docker-Compose注入映象TagK8SDocker
- 如何在 CentOS 8 / RHEL 8 上安裝 VirtualBox 6.0CentOS
- HunggingFace的映象加速站
- 關於Docker加速映象Docker
- 加速 Kubernetes 映象拉取
- SBT 配置映象加速源
- docker下載映象加速Docker
- springboot docker jenkins 自動化部署並上傳映象Spring BootDockerJenkins
- 如何在 CentOS 8/RHEL 8 上安裝和使用 CockpitCentOSKPI
- 使用Cloudflare Worker加速docker映象CloudDocker
- 如何使用阿里雲映象加速阿里
- docker配置映象加速器Docker
- Docker Hub 映象加速器Docker
- kubeadm 部署k8s 映象翻牆解決辦法K8S
- 如何在 CentOS 8/RHEL 8 上安裝和配置 Nagios CoreCentOSiOS
- Windows10下yolov8 tensorrt模型加速部署【實戰】WindowsYOLO模型
- Win10下yolov8 tensorrt模型加速部署【實戰】Win10YOLO模型
- Cloud Kernel SIG月度動態:釋出 Anolis 8.8 映象、kABI 社群共建流程Cloud
- 如何在 CentOS 8 上配置和管理防火牆CentOS防火牆
- 各類常用映象加速配置
- [第五篇]——Docker 映象加速Docker
- 各種各樣的映象加速
- 使用映象配置為 Git Clone 加速Git