作者
SuperEdge 開發者團隊
概要
SuperEdge 是 一個開源的分布式邊緣計算容器管理系統,用于管理多個云邊區域中的計算資源和容器應用, 在當前架構中,這些資源和應用能夠作為一個 Kubernetes 原生的資源進行管理,

然而在某些情況下,邊緣設備通常需要一些更加輕量、性能更好的運行時,也需要減少以 GB 為單位的容器鏡像,將容器的啟動時間提升到到秒級甚至毫秒級,而基于虛擬機堆疊二進制指令格式的 WebAssembly 可以更好地處理這種情況,
WasmEdge 是一個輕量級、高性能和可擴展的 WebAssembly 運行時,適用于云原生、邊緣和去中心化應用程式,它是當今發展最快的 Wasm 運行時,社區活躍度也相當的高,

運行簡圖

Superedge 最近支持了 Containerd,在邊緣節點我們將讓 Containerd 使用 crun 來支持 WasmEdge 運行時,也就是說,按照這些步驟后,你的邊緣節點可以同時支持 OCI 容器和 WASM 容器,
安裝 SuperEdge 邊緣 K8s 集群
- 下載安裝包
arch=amd64 version=v0.7.0 && rm -rf edgeadm-linux-* && wget https://superedge-1253687700.cos.ap-guangzhou.myqcloud.com/$version/$arch/edgeadm-linux-containerd-$arch-$version.tgz && tar -xzvf edgeadm-linux-* && cd edgeadm-linux-$arch-$version && ./edgeadm
注意選擇機器架構對應的安裝包,這個安裝包默認帶 Containerd 容器運行時,
- 創建邊緣集群
./edgeadm init --kubernetes-version=1.18.2 --image-repository superedge.tencentcloudcr.com/superedge --service-cidr=10.96.0.0/12 --pod-network-cidr=192.168.0.0/16 --install-pkg-path ./kube-linux-*.tar.gz --apiserver-cert-extra-sans=<Master Public IP> --apiserver-advertise-address=<Master Intranet IP> --enable-edge=true --runtime=containerd
注意帶 --runtime=containerd 引數,表示使用 Containerd 容器運行時, --runtime=dockerd 表示使用 Docker容器運行時,
- Join 邊緣節點
./edgeadm join <Master Public/Intranet IP Or Domain>:Port --token xxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxx --install-pkg-path ./kube-linux-*.tar.gz --enable-edge=true --runtime=containerd
詳細可查看 SuperEdge 官方檔案一鍵安裝原生的k8s集群和邊緣K8s集群
安裝 WasmEdge 運行環境
安裝 WasmEdge
在邊緣節點上使用腳本便可很輕松安裝 WasmEdge,在邊緣節點執行如下腳本:
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
安裝 crun
crun 專案內置了 WasmEdge 支持,但是默認的 crun release 沒有把 wasmedge 模塊編譯進去,目前需要手動從源代碼構建支持 WasmEdge 的 crun 二進制,
首先,確保在您的 Ubuntu 20.04 上安裝了 crun 依賴項,對于其他 Linux 發行版請參閱 crun 的 README,
sudo apt update
sudo apt install -y make git gcc build-essential pkgconf libtool \
libsystemd-dev libprotobuf-c-dev libcap-dev libseccomp-dev libyajl-dev \
go-md2man libtool autoconf python3 automake
接下來,編譯和安裝 crun:
git clone https://github.com/containers/crun
cd crun
./autogen.sh
./configure --with-wasmedge
make
sudo make install
配置 Containerd 使用 crun 運行時
這里我們給出需要配置 Containerd 檔案 /etc/containerd/config.toml 原始配置和配置之后的差異,用戶可以按對比進行修改,
cat > config.toml.diff << EOF
--- /etc/containerd/config.toml 2022-02-14 15:05:40.061562127 +0800
+++ /etc/containerd/config.toml.crun 2022-02-14 15:03:35.846052853 +0800
@@ -24,17 +24,23 @@
max_concurrent_downloads = 10
[plugins.cri.containerd]
- default_runtime_name = "runc"
- [plugins.cri.containerd.runtimes.runc]
+ default_runtime_name = "crun"
+ [plugins.cri.containerd.runtimes.crun]
runtime_type = "io.containerd.runc.v2"
- pod_annotations = []
+ pod_annotations = ["*.wasm.*", "wasm.*", "module.wasm.image/*", "*.module.wasm.image", "module.wasm.image/variant.*"]
container_annotations = []
privileged_without_host_devices = false
- [plugins.cri.containerd.runtimes.runc.options]
- BinaryName = "runc"
+ [plugins.cri.containerd.runtimes.crun.options]
+ BinaryName = "crun"
# cni
[plugins.cri.cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"
conf_template = ""
+ [plugins."io.containerd.runtime.v1.linux"]
+ no_shim = false
+ runtime = "crun"
+ runtime_root = ""
+ shim = "containerd-shim"
+ shim_debug = false
EOF
最后重啟下 Containerd 容器運行時
sudo patch -d/ -p0 < config.toml.diff
sudo systemctl restart containerd
創建 WASM 應用
我們將使用已經在 dockerhub 上的一個wasm示例鏡像wasm-wasi-example,這里 wasm 鏡像需要在鏡像的Manfest檔案中增加一個"module.wasm.image/variant":"compat"的 Annotation 讓運行時區分出 wasm 和作業系統運行時,因此 docker build 功能是沒法滿足的,可以使用buildah來構建 wasm 鏡像并 push 到任意 OCI 標準的鏡像倉庫中,
cat > wasmedge-app.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
annotations:
module.wasm.image/variant: compat
labels:
run: wasi-demo
name: wasi-demo
spec:
containers:
- args:
- /wasi_example_main.wasm
- "50000000"
image: hydai/wasm-wasi-example:with-wasm-annotation
imagePullPolicy: IfNotPresent
name: wasi-demo
hostNetwork: true
restartPolicy: Never
EOF
kubectl create -f wasmedge-app.yaml
可用 kubectl logs wasi-demo 看到這個程式輸出如下內容:
Random number: -1643170076
Random bytes: [15, 223, ... 106, 51]
Printed from wasi: This is from a main function
This is from a main function
The env vars are as follows.
The args are as follows.
/wasi_example_main.wasm
50000000
File content is This is in a file
未來
隨著更廣泛的邊緣設備接入,更多的邊緣場景覆寫的要求,SuperEdge 在邊緣計算運行時不僅支持傳統的 docker 和 containerd 等,現在還可以支持各種 WebAssembly 運行時(WasmEdge),也會持續為廣大開發者創造充滿想象力且無限可能的邊緣計算和調度平臺,
關于我們
更多關于云原生的案例和知識,可關注同名【騰訊云原生】公眾號~
福利:
①公眾號后臺回復【手冊】,可獲得《騰訊云原生路線圖手冊》&《騰訊云原生最佳實踐》~
②公眾號后臺回復【系列】,可獲得《15個系列100+篇超實用云原生原創干貨合集》,包含Kubernetes 降本增效、K8s 性能優化實踐、最佳實踐等系列,
③公眾號后臺回復【白皮書】,可獲得《騰訊云容器安全白皮書》&《降本之源-云原生成本管理白皮書v1.0》
④公眾號后臺回復【光速入門】,可獲得騰訊云專家5萬字精華教程,光速入門Prometheus和Grafana,
⑤公眾號后臺回復【精選集】,可獲得騰訊24位騰訊云專家精彩演講——4萬字《騰訊云技術實踐精選集 2021》,
【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/444383.html
標籤:其他
上一篇:基于 EventBridge 構建 SaaS 應用集成方案
下一篇:【使用分享】Hive磁區表那些事

