在 Azure Kubernetes Service 上使用 wasmCloud (AKS)

WebAssembly 元件是建置和部署應用程式的新方式。 它們的設計目的是要成為程式設計語言的可攜式編譯目標,而且可以在各種環境中執行。 WebAssembly 元件是透過設計進行沙盒化,並使用定義的介面公開其功能。 元件與容器不同,因為單一二進位檔的啟動速度要小得多且更快。 尋找模型的完整描述,以及規格中的元件為何。

wasmCloud 是雲端原生運算基礎 (NCF) 專案,旨在快速追蹤 WebAssembly 元件的開發、部署和協調流程。 本文件詳細說明如何在 Azure Kubernetes Service (AKS) 叢集上部署 wasmCloud 的指示。

開始之前

先決條件

  • 您無法使用 Azure 入口網站將 wasmCloud 部署到 AKS 叢集。

部署 wasmCloud

若要在 AKS 叢集上部署 wasmCloud,您需要將整合型 Helm 圖表安裝到您的叢集中。 這會將下列服務安裝到單一命名空間:

  • NATS:NATS 為 wasmCloud 中元件之間的所有通訊提供骨幹。
  • wadm:wasmCloud 應用程式管理員,否則稱為 wadm 是管理在 wasmCloud 上執行之應用程式的協調器。
  • wasmCloud作員:wasmCloud作員是可管理 wasmCloud 主機生命週期的 Kubernetes作員。

我們建議將 wasmCloud 部署到專用的 Kubernetes 命名空間。

  1. 使用 kubectl建立 wasmCloud 的命名空間:

    kubectl create namespace wasmcloud
    
  2. 使用 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:
    
  3. 等候所有 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
    
  4. 使用 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
    
    
  5. 確認 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
    
  6. 請確認您可以使用 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 元件集合。

  1. 建立 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
    
  2. 使用 wash部署 wasmCloud 應用程式:

    wash app deploy hello-world.yaml
    

    您的輸出應該類似於以下內容:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. 確認應用程式正在使用 wash執行:

    wash app status hello-world
    

    您的輸出應該類似於以下內容:

    Name                                         Kind           Status
    http_component                               SpreadScaler   Deployed
    httpserver -(wasi:http)-> http_component     LinkScaler     Deployed
    httpserver                                   SpreadScaler   Deployed
    

    如有必要,請重複此命令,直到所有元件都處於 Deployed 狀態為止。

  4. 使用 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!
    
  5. 清除已安裝的資源

    若要清除您所建立的資源,請執行下列命令:

    kubectl delete namespace wasmcloud
    

    此命令會從 AKS 叢集移除 wasmCloud 元件。

後續步驟

您可以遵循 wasmCloud 快速入門指南來繼續學習,該指南會逐步引導您從頭開始建立 WebAssembly 元件、使用不同的 wasmCloud 功能和調整應用程式。