概述
Kuasar 是今年華為在 CNCF 峰會(huì)上發(fā)布的支持多種沙箱隔離技術(shù)的容器運(yùn)行時(shí) [1],可以在單個(gè)節(jié)點(diǎn)上運(yùn)行多種不同類(lèi)型的沙箱容器;同時(shí)采用了 1:N 的容器進(jìn)程管理模型,對(duì)比當(dāng)前 Shim 進(jìn)程 1:1 的設(shè)計(jì),在容器并發(fā)時(shí)能夠提升啟動(dòng)速度 2 倍以上、并節(jié)省容器管理進(jìn)程 99% 的內(nèi)存增量。Kuasar 基于 Sandbox API [2] 接口開(kāi)發(fā),區(qū)別于當(dāng)前的 Shim v2 接口,對(duì)沙箱的生命周期管理具有內(nèi)存消耗小、調(diào)用鏈簡(jiǎn)短等優(yōu)勢(shì)。
openEuler 社區(qū)通過(guò) iSulad 組件率先完成了對(duì) Sandbox API 的支持,并在近日發(fā)布的 openEuler 23.09上內(nèi)置了 Kuasar,用戶(hù)可以一鍵部署 iSulad+Kuasar+StratoVirt 這一套極速輕量的安全容器解決方案 [3]。關(guān)于 iSulad+Kuasar 統(tǒng)一容器運(yùn)行時(shí)解決方案的架構(gòu)和所帶來(lái)的優(yōu)勢(shì),可參考上一篇系列文章 [4]。
本文將詳細(xì)介紹該解決方案的安裝與使用方式,支持用戶(hù)快速上手。
圖 1iSulad+Kuasar+StratoVirt 安全容器解決方案架構(gòu)
安裝與配置
說(shuō)明:kuasar 的安裝和使用均需要 root 權(quán)限。
前提條件
1. 為了獲取更好的性能體驗(yàn),該方案需要運(yùn)行在裸金屬服務(wù)器上,暫不支持運(yùn)行在虛擬機(jī)內(nèi)。
2. 安裝 openEuler 23.09 操作系統(tǒng)。
3. 安裝啟動(dòng)沙箱及容器需要使用的 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/
一鍵安裝
通過(guò)下述指令可以在 openEuler 23.09 上一鍵安裝 iSulad、kuasar 和 stratovirt 組件:
$ yum install iSulad kuasar stratovirt
組件配置
crictl 命令行工具的配置
修改 crictl 配置文件 /etc/crictl.yaml 以對(duì)接 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 啟動(dòng) vmm 類(lèi)型的 sandbox ,需在配置文件中新增如下字段:
$ cat /etc/isulad/daemon.json ... "cri-sandboxers": { "vmm": { "name": "vmm", "address": "/run/vmm-sandboxer.sock" } }, "cri-runtimes": { "vmm": "io.containerd.vmm.v1" }, ...
保存后重新啟動(dòng) iSulad 服務(wù)
$ systemctl restart isulad
之后可通過(guò)指令 `systemctl status iSulad` 確認(rèn) iSulad 服務(wù)已處于 running 狀態(tài)
kuasar的配置
修改對(duì)接 stratovirt 的 kuasar 配置文件(可直接使用 kuasar rpm 包安裝好后的默認(rèn)配置,路徑位于 /var/lib/kuasar/config_stratovirt.toml )
$cat/var/lib/kuasar/config_stratovirt.toml [sandbox] log_level = "info" #指定kuasar日志級(jí)別,默認(rèn)為info [hypervisor] path = "/usr/bin/stratovirt" #指定stratovirt二進(jìn)制路徑 machine_type = "virt,mem-share=on" #指定模擬芯片類(lèi)型,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)核運(yùn)行參數(shù) vcpus = 1 #指定每個(gè)沙箱的默認(rèn)vCPU數(shù)量,默認(rèn)為1 memory_in_mb = 1024 #指定每個(gè)沙箱的默認(rèn)內(nèi)存大小,默認(rèn)為1024 MiB block_device_driver = "virtio-blk" #指定塊設(shè)備驅(qū)動(dòng) debug = true #指定是否開(kāi)啟debug模式 enable_mem_prealloc=false#指定是否開(kāi)啟內(nèi)存預(yù)占 [hypervisor.virtiofsd_conf] path = "/usr/bin/vhost_user_fs" #指定vhost_user_fs路徑
保存后重新啟動(dòng) kuasar-vmm 服務(wù)
$ systemctl restart kuasar-vmm
之后可通過(guò)指令 `systemctl status kuasar-vmm` 確認(rèn) kuasar-vmm 服務(wù)已處于 running 狀態(tài)
部署沙箱與容器
啟動(dòng)沙箱與容器
以上配置完畢后,可以使用 crictl 命令行部署 pod 沙箱和容器,操作步驟如下:
1. 準(zhǔn)備 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. 通過(guò) `crictl run`命令啟動(dòng)一個(gè) pod 以及對(duì)應(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 和容器已啟動(dòng)完畢,均處于運(yùn)行狀態(tài)。
檢驗(yàn)沙箱與容器
進(jìn)入 pod 沙箱的 shell 環(huán)境進(jìn)行調(diào)試:
# 查看獲取pod對(duì)應(yīng)stratovirt進(jìn)程內(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命令進(jìn)入沙箱shell $ yum install -y nmap && ncat --vsock 395568061 1025 bash-6.4#
測(cè)試 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 # 測(cè)試pod與主機(jī)之間網(wǎng)絡(luò)連通性(172.19.0.1為主機(jī)上的網(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)正常工作起來(lái)并已經(jīng)完成與外部主機(jī)的連通。
以上創(chuàng)建 pod 沙箱的過(guò)程并沒(méi)有新增 shim 進(jìn)程,而是在 kuasar 提供的 vmm-sandboxer 進(jìn)程內(nèi)部新增了 sandbox 實(shí)例實(shí)現(xiàn)的。通過(guò)下述方式也可以查看 kuasar 與虛擬化引擎 stratovirt 的聯(lián)系。查看該容器 pod 所對(duì)應(yīng) stratovirt 進(jìn)程,其 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...
同時(shí)該 pod 沙箱與主機(jī)側(cè)通信的 sock 套接字、日志等文件均位于 kuasar 路徑下:
$ ls -al /run/kuasar-vmm/5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3/ console.sock sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.log sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.pid ...
以上就是 iSulad+Kuasar+StratoVirt 安全容器解決方案的使用介紹,更多關(guān)于 Kuasar 的使用可以進(jìn)入 openEuler 官網(wǎng)查看 [5]。
后續(xù) CloudNative SIG 將繼續(xù)對(duì) iSulad 實(shí)現(xiàn) Sandbox API、Kuasar 支持 wasm 等特性進(jìn)行詳細(xì)介紹,敬請(qǐng)期待!
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8598瀏覽量
151163 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6825瀏覽量
123333 -
容器
+關(guān)注
關(guān)注
0文章
495瀏覽量
22062 -
openEuler
+關(guān)注
關(guān)注
2文章
313瀏覽量
5880
原文標(biāo)題:openEuler 23.09 一鍵部署基于 Kuasar 的極速輕量安全容器
文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論