Verwenden von wasmCloud auf Azure Kubernetes Service (AKS)

WebAssembly-Komponenten sind eine neue Möglichkeit zum Erstellen und Bereitstellen von Anwendungen. Sie sind so konzipiert, dass sie ein portables Kompilierungsziel für Programmiersprachen sind und in verschiedenen Umgebungen ausgeführt werden können. WebAssembly-Komponenten sind von Natur aus abgeschirmt und stellen ihre Funktionalität über definierte Schnittstellen bereit. Komponenten unterscheiden sich von Containern dadurch, dass sie einzelne Binärdateien sind, die viel kleiner sind und schneller starten. Finden Sie die vollständige Beschreibung des Modells und was eine Komponente in der Spezifikation ist.

wasmCloud ist ein CNCF-Projekt (Cloud Native Computing Foundation), das entwickelt wurde, um die Entwicklung, Bereitstellung und Orchestrierung von WebAssembly-Komponenten schnell zu verfolgen. Dieses Dokument enthält Anweisungen zum Bereitstellen von wasmCloud auf einem Azure Kubernetes Service (AKS)-Cluster.

Bevor Sie anfangen

Voraussetzungen

  • Sie können das Azure-Portal nicht zum Bereitstellen von wasmCloud in einem AKS-Cluster verwenden.

Bereitstellen von wasmCloud

Um wasmCloud auf einem AKS-Cluster zu implementieren, müssen Sie den All-in-One-Helm-Chart in Ihrem Cluster einsetzen. Dadurch werden die folgenden Dienste in einem einzigen Namespace installiert:

  • NATS: NATS bietet das Rückgrat für die gesamte Kommunikation zwischen Komponenten in wasmCloud.
  • wadm: Der wasmCloud-Anwendungs-Manager, der auch als Wadm bekannt ist, ist der Orchestrator für die Verwaltung von Anwendungen, die über wasmCloud ausgeführt werden.
  • der wasmCloud-Operator: der wasmCloud-Operator ist ein Kubernetes-Operator, der den Lebenszyklus von wasmCloud-Hosts verwaltet.

Es wird empfohlen, wasmCloud in einem dedizierten Kubernetes-Namespace bereitzustellen.

  1. Erstellen Sie einen Namespace für wasmCloud mithilfe von kubectl:

    kubectl create namespace wasmcloud
    
  2. Installieren Sie NATS und Wadm in den wasmCloud-Namespace mit dem helm upgrade Befehl:

    # 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
    

    Die Ausgabe dieses Befehls sollte etwa wie folgt aussehen:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Warten Sie, bis alle Pods mit der Verwendung von kubectl beginnen:

    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. Starten Sie einen wasmCloud-Host mithilfe einer CRD und kubectl:

    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. Überprüfen Sie, ob der wasmCloud host läuft:

    kubectl get pod -l app.kubernetes.io/instance=wasmcloud-host
    

    Ihre Ausgabe sollte in etwa wie folgt aussehen:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Stellen Sie sicher, dass Sie eine Verbindung mit dem wasmCloud-Host herstellen können:wash

    Führen Sie in einer separaten Shell den folgenden Befehl aus, um eine Portweiterleitung zu einem der ausgeführten NATS-Pods durchzuführen:

    kubectl port-forward nats-0 4222
    

    Dieser Befehl leitet den gesamten Datenverkehr auf Port 4222 zu dem in Ihrem Cluster laufenden NATS-Pod weiter. Sie müssen diesen Port weitergeleitet haben, um mithilfe von wash eine Verbindung zu wasmCloud herzustellen.

    Führen Sie in Ihrer ursprünglichen Shell den folgenden Befehl wash aus, um zu überprüfen, ob Ihr wasmCloud-Host ausgeführt wird:

    wash get hosts
    

    Ihre Ausgabe sollte in etwa wie folgt aussehen:

      Host ID                                                      Friendly name           Uptime (seconds)
      ND2G4FRXLBCV3YL52OD4NRSS66Z5YOR3JOSL3Q7T5I6ZJM4EII3Y73CZ     frosty-resonance-6227   312
    

Bereitstellen einer wasmCloud-Anwendung

Nachdem wasmCloud nun auf Ihrem AKS-Cluster ausgeführt wird, können Sie eine wasmCloud-Anwendung bereitstellen. Eine wasmCloud-Anwendung ist eine Sammlung von WebAssembly-Komponenten, die vom wasmCloud Application Manager (Wadm) orchestriert werden.

  1. Erstellen Sie eine wasmCloud-Anwendungsmanifestdatei. Diese Datei beschreibt Komponenten, die Ihre Anwendung umfassen. Speichern Sie die folgende Yaml-Datei als 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. Bereitstellen der wasmCloud-Anwendung mit wash:

    wash app deploy hello-world.yaml
    

    Ihre Ausgabe sollte in etwa wie folgt aussehen:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Überprüfen Sie, ob die Anwendung ausgeführt wird, indem Sie wash verwenden:

    wash app status hello-world
    

    Ihre Ausgabe sollte in etwa wie folgt aussehen:

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

    Wiederholen Sie diesen Befehl bei Bedarf, bis sich alle Komponenten im Deployed Zustand befinden.

  4. Aufrufen der HTTP-Komponente mit curl und kubectl port-forward:

    Führen Sie in einer separaten Shell den folgenden Befehl aus, um eine Portweiterleitung an die Anwendung hello-world durchzuführen.

    kubectl port-forward port-forward deployment/wasmcloud-host 8080
    

    Dieser Befehl leitet den gesamten Datenverkehr an Port 8080 lokal an den in Ihrem Cluster ausgeführten wasmCloud-Host weiter. Sie müssen diesen Port weitergeleitet haben, um mithilfe von curl eine Verbindung zu wasmCloud herzustellen.

    Führen Sie in der ursprünglichen Shell den folgenden Befehl aus, um die HTTP-Komponente aufzurufen:

    curl http://localhost:8080
    

    Ihre Ausgabe sollte in etwa wie folgt aussehen:

    Hello from Rust!
    
  5. Bereinigen der installierten Ressourcen

    Führen Sie die folgenden Befehle aus, um die von Ihnen erstellten Ressourcen zu bereinigen:

    kubectl delete namespace wasmcloud
    

    Mit diesem Befehl werden die wasmCloud-Komponenten aus Ihrem AKS-Cluster entfernt.

Nächste Schritte

Sie können weiter lernen, indem Sie dem wasmCloud-Schnellstarthandbuch folgen, das Sie durch das Erstellen einer WebAssembly-Komponente von Grund auf führt, indem Sie verschiedene wasmCloud-Funktionen verwenden und Ihre Anwendung skalieren.