WebAssembly 元件是建置和部署應用程式的新方式。 它們的設計目的是要成為程式設計語言的可攜式編譯目標,而且可以在各種環境中執行。 WebAssembly 元件是透過設計進行沙盒化,並使用定義的介面公開其功能。 元件與容器不同,因為單一二進位檔的啟動速度要小得多且更快。 尋找模型的完整描述,以及規格中的元件為何。
wasmCloud 是雲端原生運算基礎 (NCF) 專案,旨在快速追蹤 WebAssembly 元件的開發、部署和協調流程。 本文件詳細說明如何在 Azure Kubernetes Service (AKS) 叢集上部署 wasmCloud 的指示。
開始之前
- 本文章假設您對 Kubernetes 概念有基本瞭解。 如需詳細資訊,請參閱 Azure Kubernetes Services (AKS) 的 Kubernetes 核心概念。
- 您需要作用中的 Azure 訂用帳戶。 如果您沒有帳戶,請在開始之前建立 免費帳戶 。
- 您需要 AKS 叢集。 如果您沒有現有的叢集,您可以使用 Azure CLI、Azure PowerShell 或 Azure 入口網站來建立叢集。
- 您必須在 0.39.0 版或更新版本安裝 wasmCloud CLI (wash)。 如需安裝選項,請參閱 wasmcloud-cli。
先決條件
- 您無法使用 Azure 入口網站將 wasmCloud 部署到 AKS 叢集。
部署 wasmCloud
若要在 AKS 叢集上部署 wasmCloud,您需要將整合型 Helm 圖表安裝到您的叢集中。 這會將下列服務安裝到單一命名空間:
- NATS:NATS 為 wasmCloud 中元件之間的所有通訊提供骨幹。
- wadm:wasmCloud 應用程式管理員,否則稱為 wadm 是管理在 wasmCloud 上執行之應用程式的協調器。
- wasmCloud作員:wasmCloud作員是可管理 wasmCloud 主機生命週期的 Kubernetes作員。
我們建議將 wasmCloud 部署到專用的 Kubernetes 命名空間。
使用
kubectl建立 wasmCloud 的命名空間:kubectl create namespace wasmcloud使用
helm upgrade命令將 NATS 和 wadm 安裝到 wasmCloud 命名空間:# By default, the chart installs NATS, Wadm, and wasmCloud Operator subcharts helm upgrade --install \ wasmcloud-platform \ --values https://raw.githubusercontent.com/wasmCloud/wasmcloud/main/charts/wasmcloud-platform/values.yaml \ oci://ghcr.io/wasmcloud/charts/wasmcloud-platform:0.1.2 \ --dependency-update此指令輸出看起來應該如下所示:
NAME: wasmcloud-platform LAST DEPLOYED: Thu Nov 7 14:58:54 2024 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES:等候所有 Pod 開始使用
kubectl:kubectl rollout status deploy,sts -l app.kubernetes.io/name=nats kubectl wait --for=condition=available --timeout=600s deploy -l app.kubernetes.io/name=wadm kubectl wait --for=condition=available --timeout=600s deploy -l app.kubernetes.io/name=wasmcloud-operator使用 CRD 和
kubectl來啟動 wasmCloud 主機:cat << EOF | kubectl apply -f - apiVersion: k8s.wasmcloud.dev/v1alpha1 kind: WasmCloudHostConfig metadata: name: wasmcloud-host spec: lattice: default version: "1.4.1" EOF確認 wasmCloud 主機正在執行:
kubectl get pod -l app.kubernetes.io/instance=wasmcloud-host您的輸出應該類似於以下內容:
NAME READY STATUS RESTARTS AGE wasmcloud-host-f9d67b8cf-lvsq6 2/2 Running 0 84s請確認您可以使用
wash連線到 wasmCloud 主機。在不同的殼層使用中,執行下列命令,將連接埠轉送至其中一個執行中的 NATS Pod:
kubectl port-forward nats-0 4222此命令會將所有 4222 連接埠的流量在本地轉送至叢集中執行的 NATS Pod。 您必須將此連接埠轉送,才能使用
wash連接到 wasmCloud。在原始殼層中,使用
wash執行下列命令,以確認您的 wasmCloud 主機正在運行:wash get hosts您的輸出應該類似於以下內容:
Host ID Friendly name Uptime (seconds) ND2G4FRXLBCV3YL52OD4NRSS66Z5YOR3JOSL3Q7T5I6ZJM4EII3Y73CZ frosty-resonance-6227 312
部署 wasmCloud 應用程式
現在,wasmCloud 正在 AKS 叢集上執行,您可以部署 wasmCloud 應用程式。 wasmCloud 應用程式是由 wasmCloud 應用程式管理員 (wadm) 所協調的 WebAssembly 元件集合。
建立 wasmCloud 應用程式指令清單檔案。 此檔案描述組成應用程式的元件。 將下列 yaml 檔案儲存為
hello-world.yaml。apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: hello-world annotations: description: 'HTTP hello world demo in Rust, using the WebAssembly Component Model and WebAssembly Interfaces Types (WIT)' spec: components: - name: http-component type: component properties: image: ghcr.io/wasmcloud/components/http-hello-world-rust:0.1.0 traits: # Govern the spread/scheduling of the component - type: spreadscaler properties: instances: 1 # Add a capability provider that enables HTTP access - name: httpserver type: capability properties: image: ghcr.io/wasmcloud/http-server:0.23.2 traits: # Establish a unidirectional link from this http server provider (the "source") # to the `http-component` component (the "target") so the component can handle incoming HTTP requests, # # The source (this provider) is configured such that the HTTP server listens on 0.0.0.0:8080 - type: link properties: target: http-component namespace: wasi package: http interfaces: [incoming-handler] source_config: - name: default-http properties: address: 0.0.0.0:8080使用
wash部署 wasmCloud 應用程式:wash app deploy hello-world.yaml您的輸出應該類似於以下內容:
Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"確認應用程式正在使用
wash執行:wash app status hello-world您的輸出應該類似於以下內容:
Name Kind Status http_component SpreadScaler Deployed httpserver -(wasi:http)-> http_component LinkScaler Deployed httpserver SpreadScaler Deployed如有必要,請重複此命令,直到所有元件都處於
Deployed狀態為止。使用
curl和kubectl port-forward來叫用 http 元件:在不同的殼層中,執行下列命令,以將連接埠轉送至
hello-world應用程式kubectl port-forward port-forward deployment/wasmcloud-host 8080此命令會將埠 8080 本機上的所有流量轉送至叢集中執行的 wasmCloud 主機。 您必須將此連接埠轉送,才能使用
curl連接到 wasmCloud。在您的原來的 shell 中,執行下列命令以啟動 HTTP 元件:
curl http://localhost:8080您的輸出應該類似於以下內容:
Hello from Rust!清除已安裝的資源
若要清除您所建立的資源,請執行下列命令:
kubectl delete namespace wasmcloud此命令會從 AKS 叢集移除 wasmCloud 元件。
後續步驟
您可以遵循 wasmCloud 快速入門指南來繼續學習,該指南會逐步引導您從頭開始建立 WebAssembly 元件、使用不同的 wasmCloud 功能和調整應用程式。