Usare wasmCloud su Azure Kubernetes Service (AKS)

I componenti WebAssembly sono un nuovo modo per compilare e distribuire applicazioni. Sono progettati per essere una destinazione di compilazione portabile per i linguaggi di programmazione e possono essere eseguiti in vari ambienti. I componenti WebAssembly sono in modalità sandbox per progettazione ed espongono le relative funzionalità usando interfacce definite. I componenti differiscono dai contenitori in quanto i singoli file binari sono molto più piccoli e veloci da avviare. Trovare la descrizione completa del modello e il componente nella specifica.

wasmCloud è un progetto CLOUD Native Computing Foundation (CNF) progettato per monitorare rapidamente lo sviluppo, la distribuzione e l'orchestrazione dei componenti WebAssembly. Questo documento illustra in dettaglio come distribuire wasmCloud in un cluster del servizio Azure Kubernetes.

Prima di iniziare

Prerequisiti

  • Non è possibile usare il portale di Azure per distribuire wasmCloud su un cluster AKS.

Distribuire wasmCloud

Per distribuire wasmCloud in un cluster del servizio Azure Kubernetes, è necessario installare tutti in un unico grafico Helm nel cluster. In questo modo, i servizi seguenti vengono installati in un unico spazio dei nomi:

  • NATS: NATS fornisce il backbone per tutte le comunicazioni tra i componenti in wasmCloud.
  • wadm: wasmCloud Application Manager, altrimenti noto come wadm è l'agente di orchestrazione per la gestione delle applicazioni in esecuzione su wasmCloud.
  • wasmCloud Operator: wasmCloud Operator è un operatore Kubernetes che gestisce il ciclo di vita degli host wasmCloud.

È consigliabile distribuire wasmCloud in uno spazio dei nomi Kubernetes dedicato.

  1. Creare un namespace per wasmCloud usando kubectl:

    kubectl create namespace wasmcloud
    
  2. Installare NATS e wadm nello spazio dei nomi wasmCloud usando il helm upgrade comando :

    # 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
    

    L'output di questo comando dovrebbe essere simile al seguente:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Attendere che tutti i pod inizino a usare 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. Avviare un host wasmCloud usando un CRD e 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. Verificare che l'host wasmCloud sia in esecuzione:

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

    L'output dovrebbe essere simile al seguente:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Verificare che sia possibile connettersi all'host wasmCloud usando wash:

    In una shell separata, eseguire il seguente comando per effettuare il port forwarding verso uno dei pod NATS in esecuzione.

    kubectl port-forward nats-0 4222
    

    Questo comando inoltra tutto il traffico sulla porta 4222 localmente al pod NATS in esecuzione nel cluster. Per connettersi a wasmCloud è necessario inoltrare questa porta usando wash.

    Nella shell originale eseguire il comando seguente con wash per verificare che l'host wasmCloud sia in esecuzione:

    wash get hosts
    

    L'output dovrebbe essere simile al seguente:

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

Distribuire un'applicazione wasmCloud

Ora che wasmCloud è in esecuzione nel cluster del servizio Azure Kubernetes, è possibile distribuire un'applicazione wasmCloud. Un'applicazione wasmCloud è una raccolta di componenti WebAssembly orchestrati da wasmCloud Application Manager (wadm).

  1. Creare un file manifesto dell'applicazione wasmCloud. Questo file descrive i componenti che costituiscono l'applicazione. Salvare il file yaml seguente come 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. Distribuire l'applicazione wasmCloud usando wash:

    wash app deploy hello-world.yaml
    

    L'output dovrebbe essere simile al seguente:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Verificare che l'applicazione sia in esecuzione usando wash:

    wash app status hello-world
    

    L'output dovrebbe essere simile al seguente:

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

    Ripetere questo comando, se necessario, finché tutti i componenti non sono nello Deployed stato .

  4. Richiamare il componente HTTP usando curl e kubectl port-forward:

    In una shell separata, esegui il comando seguente per effettuare il port forwarding all'applicazione hello-world

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

    Questo comando inoltra tutto il traffico sulla porta 8080 localmente all'host wasmCloud in esecuzione nel cluster. Per connettersi a wasmCloud è necessario inoltrare questa porta usando curl.

    Nella shell originale eseguire il comando seguente per richiamare il componente HTTP:

    curl http://localhost:8080
    

    L'output dovrebbe essere simile al seguente:

    Hello from Rust!
    
  5. Pulire le risorse installate

    Per pulire le risorse create, eseguire i comandi seguenti:

    kubectl delete namespace wasmcloud
    

    Questo comando rimuove i componenti di wasmCloud dal cluster AKS (Azure Kubernetes Service).

Passaggi successivi

È possibile continuare a imparare seguendo la Guida introduttiva a wasmCloud, che illustra come creare un componente WebAssembly da zero, usando diverse funzionalità wasmCloud e ridimensionando l'applicazione.