Använda wasmCloud på Azure Kubernetes Service (AKS)

WebAssembly-komponenter är ett nytt sätt att skapa och distribuera program. De är utformade för att vara ett portabelt kompileringsmål för programmeringsspråk och kan köras i olika miljöer. WebAssembly-komponenter är begränsade efter design och exponerar deras funktioner med hjälp av definierade gränssnitt. Komponenter skiljer sig från containrar eftersom de är enkla binärfiler som är mycket mindre och snabbare att starta. Hitta den fullständiga beskrivningen av modellen och vad en komponent är i specifikationen.

wasmCloud är ett CNCF-projekt (Cloud Native Computing Foundation) som utformats för att påskynda utvecklingen, distributionen och orkestreringen av WebAssembly-komponenter. Det här dokumentet innehåller anvisningar om hur du distribuerar wasmCloud i ett AKS-kluster (Azure Kubernetes Service).

Innan du börjar

Förutsättningar

  • Du kan inte använda Azure-portalen för att distribuera wasmCloud till ett AKS-kluster.

Distribuera wasmCloud

För att distribuera wasmCloud på ett AKS-kluster måste du installera den kompletta Helm-chart i ditt kluster. Detta installerar följande tjänster i ett enda namnområde:

  • NATS: NATS tillhandahåller stamnätet för all kommunikation mellan komponenter i wasmCloud.
  • wadm: wasmCloud Application Manager, även kallat wadm, är orkestreraren för att hantera program som körs ovanpå wasmCloud.
  • wasmCloud-operatorn: wasmCloud-operatorn är en Kubernetes-operator som hanterar livscykeln för wasmCloud-värdar.

Vi rekommenderar att du distribuerar wasmCloud till ett dedikerat Kubernetes-namnområde.

  1. Skapa ett namnområde för wasmCloud med hjälp av kubectl:

    kubectl create namespace wasmcloud
    
  2. Installera NATS och wadm i wasmCloud-namnområdet med kommandot helm upgrade :

    # 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
    

    Utdata från det här kommandot bör se ut ungefär så här:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Vänta tills alla poddar börjar använda 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. Starta en wasmCloud-värd med hjälp av en CRD och 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. Kontrollera att wasmCloud-värden körs:

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

    Dina utdata bör se ut ungefär så här:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Kontrollera att du kan ansluta till wasmCloud-värdtjänsten genom wash:

    I ett separat skalfönster, kör följande kommando för att porta vidare till någon av de NATS-poddar som körs:

    kubectl port-forward nats-0 4222
    

    Det här kommandot vidarebefordrar all trafik på port 4222 lokalt till NATS-podden som körs i ditt kluster. Du måste ha den här porten vidarebefordrad för att kunna ansluta till wasmCloud med .wash

    I ditt ursprungliga skal kör du följande kommando med wash för att verifiera att din wasmCloud-värd är igång:

    wash get hosts
    

    Dina utdata bör se ut ungefär så här:

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

Distribuera ett wasmCloud-program

Nu när wasmCloud körs i ditt AKS-kluster kan du distribuera ett wasmCloud-program. Ett wasmCloud-program är en samling WebAssembly-komponenter som orkestreras av wasmCloud Application Manager (wadm).

  1. Skapa en wasmCloud-programmanifestfil. Den här filen beskriver komponenter som ingår i ditt program. Spara följande yaml-fil som 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. Distribuera wasmCloud-programmet med :wash

    wash app deploy hello-world.yaml
    

    Dina utdata bör se ut ungefär så här:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Kontrollera att programmet körs med :wash

    wash app status hello-world
    

    Dina utdata bör se ut ungefär så här:

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

    Upprepa det här kommandot om det behövs tills alla komponenter är i tillståndet Deployed .

  4. Anropa http-komponenten med hjälp av curl och kubectl port-forward:

    Kör följande kommando i ett separat gränssnitt för att porta vidare till hello-world programmet

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

    Det här kommandot skickar vidare all trafik på port 8080 lokalt till wasmCloud-värden som körs i ditt kluster. Du måste ha den här porten vidarebefordrad för att kunna ansluta till wasmCloud med .curl

    Kör följande kommando i det ursprungliga gränssnittet för att anropa http-komponenten:

    curl http://localhost:8080
    

    Dina utdata bör se ut ungefär så här:

    Hello from Rust!
    
  5. Rensa de installerade resurserna

    Om du vill rensa de resurser som du skapade kör du följande kommandon:

    kubectl delete namespace wasmcloud
    

    Det här kommandot tar bort wasmCloud-komponenterna från AKS-klustret.

Nästa steg

Du kan fortsätta att lära dig genom att följa snabbstartsguiden för wasmCloud, som vägleder dig genom att skapa en WebAssembly-komponent från grunden, använda olika wasmCloud-funktioner och skala ditt program.