概述
Kuasar 是今年華為在 CNCF 峰會上發(fā)布的支持多種沙箱隔離技術(shù)的容器運行時 [1],可以在單個節(jié)點上運行多種不同類型的沙箱容器;同時采用了 1:N 的容器進程管理模型,對比當(dāng)前 Shim 進程 1:1 的設(shè)計,在容器并發(fā)時能夠提升啟動速度 2 倍以上、并節(jié)省容器管理進程 99% 的內(nèi)存增量。Kuasar 基于 Sandbox API [2] 接口開發(fā),區(qū)別于當(dāng)前的 Shim v2 接口,對沙箱的生命周期管理具有內(nèi)存消耗小、調(diào)用鏈簡短等優(yōu)勢。
openEuler 社區(qū)通過 iSulad 組件率先完成了對 Sandbox API 的支持,并在近日發(fā)布的 openEuler 23.09上內(nèi)置了 Kuasar,用戶可以一鍵部署 iSulad+Kuasar+StratoVirt 這一套極速輕量的安全容器解決方案 [3]。關(guān)于 iSulad+Kuasar 統(tǒng)一容器運行時解決方案的架構(gòu)和所帶來的優(yōu)勢,可參考上一篇系列文章 [4]。
本文將詳細介紹該解決方案的安裝與使用方式,支持用戶快速上手。
圖 1iSulad+Kuasar+StratoVirt 安全容器解決方案架構(gòu)
安裝與配置
說明:kuasar 的安裝和使用均需要 root 權(quán)限。
前提條件
1. 為了獲取更好的性能體驗,該方案需要運行在裸金屬服務(wù)器上,暫不支持運行在虛擬機內(nèi)。
2. 安裝 openEuler 23.09 操作系統(tǒng)。
3. 安裝啟動沙箱及容器需要使用的 cri 命令行工具 crictl 。
#arm環(huán)境 $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-arm64.tar.gz $ tar -zxvf crictl-v1.25.0-linux-arm64.tar.gz -C /usr/local/bin #x86環(huán)境 $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz $tar-zxvfcrictl-v1.25.0-linux-amd64.tar.gz-C/usr/local/bin
4. 安裝配置網(wǎng)絡(luò)需要使用的 cni 插件。
#創(chuàng)建cni目錄 $mkdir-p/opt/cni/bin&&mkdir-p/etc/cni/net.d # arm環(huán)境 $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-arm64-v1.3.0.tgz $ tar -zxvf cni-plugins-linux-arm64-v1.3.0.tgz -C /opt/cni/bin/ #x86環(huán)境 $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz $ tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/
一鍵安裝
通過下述指令可以在 openEuler 23.09 上一鍵安裝 iSulad、kuasar 和 stratovirt 組件:
$ yum install iSulad kuasar stratovirt
組件配置
crictl 命令行工具的配置
修改 crictl 配置文件 /etc/crictl.yaml 以對接 isulad
$ cat /etc/crictl.yaml runtime-endpoint: unix:///var/run/isulad.sock image-endpoint: unix:///var/run/isulad.sock
iSulad容器引擎的配置
修改 iSulad 容器引擎的配置文件 /etc/isulad/daemon.json ,以支持 iSulad 調(diào)用 kuasar 啟動 vmm 類型的 sandbox ,需在配置文件中新增如下字段:
$ cat /etc/isulad/daemon.json ... "cri-sandboxers": { "vmm": { "name": "vmm", "address": "/run/vmm-sandboxer.sock" } }, "cri-runtimes": { "vmm": "io.containerd.vmm.v1" }, ...
保存后重新啟動 iSulad 服務(wù)
$ systemctl restart isulad
之后可通過指令 `systemctl status iSulad` 確認 iSulad 服務(wù)已處于 running 狀態(tài)
kuasar的配置
修改對接 stratovirt 的 kuasar 配置文件(可直接使用 kuasar rpm 包安裝好后的默認配置,路徑位于 /var/lib/kuasar/config_stratovirt.toml )
$cat/var/lib/kuasar/config_stratovirt.toml [sandbox] log_level = "info" #指定kuasar日志級別,默認為info [hypervisor] path = "/usr/bin/stratovirt" #指定stratovirt二進制路徑 machine_type = "virt,mem-share=on" #指定模擬芯片類型,ARM架構(gòu)為virt,x86架構(gòu)為q35 kernel_path = "/var/lib/kuasar/vmlinux.bin" #指定guest kernel執(zhí)行路徑 image_path = "" #指定guest image執(zhí)行路徑 initrd_path = "/var/lib/kuasar/kuasar.initrd" #指定guest initrd執(zhí)行路徑,與image二選一 kernel_params = "task.log_level=debug task.sharefs_type=virtiofs" #指定guest內(nèi)核運行參數(shù) vcpus = 1 #指定每個沙箱的默認vCPU數(shù)量,默認為1 memory_in_mb = 1024 #指定每個沙箱的默認內(nèi)存大小,默認為1024 MiB block_device_driver = "virtio-blk" #指定塊設(shè)備驅(qū)動 debug = true #指定是否開啟debug模式 enable_mem_prealloc=false#指定是否開啟內(nèi)存預(yù)占 [hypervisor.virtiofsd_conf] path = "/usr/bin/vhost_user_fs" #指定vhost_user_fs路徑
保存后重新啟動 kuasar-vmm 服務(wù)
$ systemctl restart kuasar-vmm
之后可通過指令 `systemctl status kuasar-vmm` 確認 kuasar-vmm 服務(wù)已處于 running 狀態(tài)
部署沙箱與容器
啟動沙箱與容器
以上配置完畢后,可以使用 crictl 命令行部署 pod 沙箱和容器,操作步驟如下:
1. 準備 pod 和 container 的 yaml 配置文件,范例如下:
$ cat podsandbox.yaml metadata: name: busybox-sandbox namespace: default uid: hdishd83djaidwnduwk28bcsc log_directory:/tmp linux: namespaces: options: {} $ cat pod-container.yaml metadata: name: busybox image: image:docker.io/library/busybox:latest command: -top log_path:busybox.log
2. 通過 `crictl run`命令啟動一個 pod 以及對應(yīng)的業(yè)務(wù)容器,指定 runtime 為 vmm
$ crictl run -r vmm container-config.yaml podsandbox-config.yaml
3. 查看 pod 列表,pod 為 Ready 狀態(tài)
$ crictl pods PODIDCREATEDSTATENAMENAMESPACEATTEMPT 5cbcf744949d8AboutaminuteagoReadybusybox-sandboxdefault1
查看容器列表,容器為 Running 狀態(tài)
$ crictl ps CONTAINERIMAGECREATEDSTATENAMEATTEMPTPODID c11df540f913edocker.io/library/busybox:latest2minutesagoRunningbusybox05cbcf744949d8
至此,pod 和容器已啟動完畢,均處于運行狀態(tài)。
檢驗沙箱與容器
進入 pod 沙箱的 shell 環(huán)境進行調(diào)試:
# 查看獲取pod對應(yīng)stratovirt進程內(nèi)的vsock guest-cid $ ps -ef | grep stratovirt | grep 5cbcf744949d8 /usr/bin/stratovirt -name sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 ... -device vhost-vsock-pci,id=vsock-395568061,guest-cid=395568061,bus=pcie.0,addr=0x3,vhostfd=3 ... # 使用ncat命令進入沙箱shell $ yum install -y nmap && ncat --vsock 395568061 1025 bash-6.4#
測試 pod 網(wǎng)絡(luò)連接:
# 在pod shell環(huán)境內(nèi)執(zhí)行 bash-6.4# ip addr show 1: lo:mtu 65536 qdisc noqueue qlen 1000 link/loopback 000000:00 brd 000000:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 429239:9f brd ffffff:ff inet 172.19.0.240/24 brd 172.19.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80:92ff399f/64 scope link valid_lft forever preferred_lft forever # 測試pod與主機之間網(wǎng)絡(luò)連通性(172.19.0.1為主機上的網(wǎng)關(guān)) bash-6.4 #ping172.19.0.1 PING 172.19.0.1 (172.19.0.1): 56 data bytes 64 bytes from 172.19.0.1: seq=0 ttl=64 time=0.618 ms 64 bytes from 172.19.0.1: seq=1 ttl=64 time=0.116 ms 64 bytes from 172.19.0.1: seq=2 ttl=64 time=0.152 ms
能夠觀察到,pod 已經(jīng)正常工作起來并已經(jīng)完成與外部主機的連通。
以上創(chuàng)建 pod 沙箱的過程并沒有新增 shim 進程,而是在 kuasar 提供的 vmm-sandboxer 進程內(nèi)部新增了 sandbox 實例實現(xiàn)的。通過下述方式也可以查看 kuasar 與虛擬化引擎 stratovirt 的聯(lián)系。查看該容器 pod 所對應(yīng) stratovirt 進程,其 kernel 與 initrd 等路徑均與 kuasar 配置文件中指定的一致。
$ ps -ef | grep stratovirt | grep 5cbcf744949d8 /usr/bin/stratovirt -name sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3...-kernel /var/lib/kuasar/vmlinux.bin -initrd /var/lib/kuasar/kuasar.initrd...
同時該 pod 沙箱與主機側(cè)通信的 sock 套接字、日志等文件均位于 kuasar 路徑下:
$ ls -al /run/kuasar-vmm/5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3/ console.sock sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.log sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.pid ...
以上就是 iSulad+Kuasar+StratoVirt 安全容器解決方案的使用介紹,更多關(guān)于 Kuasar 的使用可以進入 openEuler 官網(wǎng)查看 [5]。
后續(xù) CloudNative SIG 將繼續(xù)對 iSulad 實現(xiàn) Sandbox API、Kuasar 支持 wasm 等特性進行詳細介紹,敬請期待!
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8720瀏覽量
152035 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6901瀏覽量
123822 -
容器
+關(guān)注
關(guān)注
0文章
499瀏覽量
22130 -
openEuler
+關(guān)注
關(guān)注
2文章
319瀏覽量
5957
原文標題:openEuler 23.09 一鍵部署基于 Kuasar 的極速輕量安全容器
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web2/M00/84/62/wKgaomRmBViARIRxAACMFNuLnfA833.png)
安全容器的發(fā)展與思考
品高軟件:iSula+StratoVirt輕量虛機容器解決方案
![品高軟件:iSula+<b class='flag-5'>StratoVirt</b>輕量虛機<b class='flag-5'>容器</b><b class='flag-5'>解決方案</b>](https://file.elecfans.com/web2/M00/1C/4B/poYBAGGLMQSADv1eAAB2XpH3NLw574.jpg)
openEuler Summit開發(fā)者峰會:iSula+StratoVirt輕量虛機容器解決方案展示
![openEuler Summit開發(fā)者峰會:iSula+<b class='flag-5'>StratoVirt</b>輕量虛機<b class='flag-5'>容器</b><b class='flag-5'>解決方案</b>展示](https://file.elecfans.com/web2/M00/1C/53/pYYBAGGLMnOAMIj0AAMfIobnG68077.png)
歐拉(openEuler)Summit 2021:歐拉demo分享——iSula + StratoVirt
![歐拉(openEuler)Summit 2021:歐拉demo分享——iSula + <b class='flag-5'>StratoVirt</b>](https://file.elecfans.com/web2/M00/1C/53/pYYBAGGLMQSAFWByAAlFUnQBAfo975.png)
StratoVirt中vCPU管理模塊的組成及位置
StratoVirt 中的 balloon 設(shè)備介紹
Nexus Container:容器安全解決方案
openEuler開源項目iSulad加入 CNCF Landscape
iSulad+Kuasar:管理面資源消耗銳減99%的新一代統(tǒng)一容器運行時解決方案
![<b class='flag-5'>iSulad+Kuasar</b>:管理面資源消耗銳減99%的新一代統(tǒng)一<b class='flag-5'>容器</b>運行時<b class='flag-5'>解決方案</b>](https://file1.elecfans.com/web2/M00/82/57/wKgZomRKHg6ABzKEAAAcKtGQ03M642.png)
iSulad Sandbox API簡化容器調(diào)用鏈
![<b class='flag-5'>iSulad</b> Sandbox API簡化<b class='flag-5'>容器</b>調(diào)用鏈](https://file1.elecfans.com/web2/M00/AF/8C/wKgaomVbIq-AfTy9AAAlA_OEayk396.png)
華為云 Flexus 云服務(wù)器 X 實例之 openEuler 系統(tǒng)下玩轉(zhuǎn) iSulad 容器技術(shù)
![華為云 Flexus 云服務(wù)器 X 實例之 openEuler 系統(tǒng)下玩轉(zhuǎn) <b class='flag-5'>iSulad</b> <b class='flag-5'>容器</b>技術(shù)](https://file1.elecfans.com//web3/M00/04/44/wKgZPGdyQ2WAIoP4AAEOFncth-U291.png)
評論