概述
Kuasar 是今年華為在 CNCF 峰會上發布的支持多種沙箱隔離技術的容器運行時 [1],可以在單個節點上運行多種不同類型的沙箱容器;同時采用了 1:N 的容器進程管理模型,對比當前 Shim 進程 1:1 的設計,在容器并發時能夠提升啟動速度 2 倍以上、并節省容器管理進程 99% 的內存增量。Kuasar 基于 Sandbox API [2] 接口開發,區別于當前的 Shim v2 接口,對沙箱的生命周期管理具有內存消耗小、調用鏈簡短等優勢。
openEuler 社區通過 iSulad 組件率先完成了對 Sandbox API 的支持,并在近日發布的 openEuler 23.09上內置了 Kuasar,用戶可以一鍵部署 iSulad+Kuasar+StratoVirt 這一套極速輕量的安全容器解決方案 [3]。關于 iSulad+Kuasar 統一容器運行時解決方案的架構和所帶來的優勢,可參考上一篇系列文章 [4]。
本文將詳細介紹該解決方案的安裝與使用方式,支持用戶快速上手。
圖 1iSulad+Kuasar+StratoVirt 安全容器解決方案架構
安裝與配置
說明:kuasar 的安裝和使用均需要 root 權限。
前提條件
1. 為了獲取更好的性能體驗,該方案需要運行在裸金屬服務器上,暫不支持運行在虛擬機內。
2. 安裝 openEuler 23.09 操作系統。
3. 安裝啟動沙箱及容器需要使用的 cri 命令行工具 crictl 。
#arm環境 $ 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環境 $ 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. 安裝配置網絡需要使用的 cni 插件。
#創建cni目錄 $mkdir-p/opt/cni/bin&&mkdir-p/etc/cni/net.d # arm環境 $ 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環境 $ 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 調用 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 服務
$ systemctl restart isulad
之后可通過指令 `systemctl status iSulad` 確認 iSulad 服務已處于 running 狀態
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架構為virt,x86架構為q35 kernel_path = "/var/lib/kuasar/vmlinux.bin" #指定guest kernel執行路徑 image_path = "" #指定guest image執行路徑 initrd_path = "/var/lib/kuasar/kuasar.initrd" #指定guest initrd執行路徑,與image二選一 kernel_params = "task.log_level=debug task.sharefs_type=virtiofs" #指定guest內核運行參數 vcpus = 1 #指定每個沙箱的默認vCPU數量,默認為1 memory_in_mb = 1024 #指定每個沙箱的默認內存大小,默認為1024 MiB block_device_driver = "virtio-blk" #指定塊設備驅動 debug = true #指定是否開啟debug模式 enable_mem_prealloc=false#指定是否開啟內存預占 [hypervisor.virtiofsd_conf] path = "/usr/bin/vhost_user_fs" #指定vhost_user_fs路徑
保存后重新啟動 kuasar-vmm 服務
$ systemctl restart kuasar-vmm
之后可通過指令 `systemctl status kuasar-vmm` 確認 kuasar-vmm 服務已處于 running 狀態
部署沙箱與容器
啟動沙箱與容器
以上配置完畢后,可以使用 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 以及對應的業務容器,指定 runtime 為 vmm
$ crictl run -r vmm container-config.yaml podsandbox-config.yaml
3. 查看 pod 列表,pod 為 Ready 狀態
$ crictl pods PODIDCREATEDSTATENAMENAMESPACEATTEMPT 5cbcf744949d8AboutaminuteagoReadybusybox-sandboxdefault1
查看容器列表,容器為 Running 狀態
$ crictl ps CONTAINERIMAGECREATEDSTATENAMEATTEMPTPODID c11df540f913edocker.io/library/busybox:latest2minutesagoRunningbusybox05cbcf744949d8
至此,pod 和容器已啟動完畢,均處于運行狀態。
檢驗沙箱與容器
進入 pod 沙箱的 shell 環境進行調試:
# 查看獲取pod對應stratovirt進程內的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 網絡連接:
# 在pod shell環境內執行 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與主機之間網絡連通性(172.19.0.1為主機上的網關) 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 已經正常工作起來并已經完成與外部主機的連通。
以上創建 pod 沙箱的過程并沒有新增 shim 進程,而是在 kuasar 提供的 vmm-sandboxer 進程內部新增了 sandbox 實例實現的。通過下述方式也可以查看 kuasar 與虛擬化引擎 stratovirt 的聯系。查看該容器 pod 所對應 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 沙箱與主機側通信的 sock 套接字、日志等文件均位于 kuasar 路徑下:
$ ls -al /run/kuasar-vmm/5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3/ console.sock sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.log sandbox-5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3.pid ...
以上就是 iSulad+Kuasar+StratoVirt 安全容器解決方案的使用介紹,更多關于 Kuasar 的使用可以進入 openEuler 官網查看 [5]。
后續 CloudNative SIG 將繼續對 iSulad 實現 Sandbox API、Kuasar 支持 wasm 等特性進行詳細介紹,敬請期待!
審核編輯:湯梓紅
-
接口
+關注
關注
33文章
8598瀏覽量
151156 -
操作系統
+關注
關注
37文章
6825瀏覽量
123331 -
容器
+關注
關注
0文章
495瀏覽量
22061 -
openEuler
+關注
關注
2文章
313瀏覽量
5877
原文標題:openEuler 23.09 一鍵部署基于 Kuasar 的極速輕量安全容器
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論