WasmCloud gebruiken in Azure Kubernetes Service (AKS)

WebAssembly-onderdelen zijn een nieuwe manier om toepassingen te bouwen en te implementeren. Ze zijn ontworpen als een draagbaar compilatiedoel voor programmeertalen en kunnen worden uitgevoerd in verschillende omgevingen. WebAssembly-onderdelen worden standaard in een sandbox geplaatst en bieden hun functionaliteit met behulp van gedefinieerde interfaces. Onderdelen verschillen van containers omdat ze afzonderlijke binaire bestanden hebben die veel kleiner en sneller zijn om te starten. Zoek de volledige beschrijving van het model en wat een onderdeel in de specificatie is.

wasmCloud is een CNCF-project (Cloud Native Computing Foundation) dat is ontworpen om de ontwikkeling, implementatie en indeling van WebAssembly-onderdelen snel bij te houden. In dit document vindt u instructies voor het implementeren van wasmCloud in een AKS-cluster (Azure Kubernetes Service).

Voordat u begint

Vereiste voorwaarden

  • U kunt Azure Portal niet gebruiken om wasmCloud te implementeren in een AKS-cluster.

Deploy wasmCloud

Als u wasmCloud wilt implementeren op een AKS-cluster, moet u alles in één Helm-grafiek installeren in uw cluster. Hiermee worden de volgende services in één naamruimte geïnstalleerd:

  • NATS: NATS biedt de backbone voor alle communicatie tussen onderdelen in wasmCloud.
  • wadm: wasmCloud Application Manager, ook wel wadm genoemd, is de orchestrator voor het beheren van toepassingen die worden uitgevoerd op wasmCloud.
  • de wasmCloud-operator: de wasmCloud-operator is een Kubernetes-operator die de levenscyclus van wasmCloud-hosts beheert.

U wordt aangeraden wasmCloud te implementeren in een toegewezen Kubernetes-naamruimte.

  1. Maak een naamruimte voor wasmCloud met behulp van kubectl:

    kubectl create namespace wasmcloud
    
  2. Installeer NATS en wadm in de wasmCloud-naamruimte met behulp van de helm upgrade opdracht:

    # 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
    

    De uitvoer van deze opdracht moet er ongeveer als volgt uitzien:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Wacht totdat alle pods beginnen te gebruiken 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. Start een wasmCloud-host met behulp van een CRD en 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. Zorg ervoor dat de wasmCloud-host actief is.

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

    Uw uitvoer moet er ongeveer als volgt uitzien:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Controleer of u verbinding kunt maken met de wasmCloud-host met behulp van wash:

    Voer in een afzonderlijke shell de volgende opdracht uit om door te sturen naar een van de actieve NATS-pods:

    kubectl port-forward nats-0 4222
    

    Met deze opdracht wordt al het verkeer op poort 4222 lokaal doorgestuurd naar de NATS-pod die in uw cluster wordt uitgevoerd. U moet deze poort hebben doorgestuurd om verbinding te kunnen maken met wasmCloud met behulp van wash.

    Voer in de oorspronkelijke shell de volgende opdracht met wash uit om te verifiëren dat uw wasmCloud-host draait.

    wash get hosts
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

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

Een wasmCloud-toepassing implementeren

Nu wasmCloud wordt uitgevoerd op uw AKS-cluster, kunt u een wasmCloud-toepassing implementeren. Een wasmCloud-toepassing is een verzameling WebAssembly-onderdelen die worden ingedeeld door wasmCloud Application Manager (wadm).

  1. Maak een wasmCloud-toepassingsmanifestbestand. In dit bestand worden onderdelen beschreven waaruit uw toepassing bestaat. Sla het volgende yaml-bestand op 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. Implementeer de wasmCloud-toepassing met behulp van wash:

    wash app deploy hello-world.yaml
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Controleer of de toepassing wordt uitgevoerd met:wash

    wash app status hello-world
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

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

    Herhaal deze opdracht indien nodig totdat alle onderdelen de Deployed status hebben.

  4. Roep het HTTP-onderdeel aan met behulp van curl en kubectl port-forward:

    Voer in een afzonderlijke shell de volgende opdracht uit om door te sturen naar de hello-world toepassing

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

    Met deze opdracht wordt al het verkeer op poort 8080 lokaal doorgestuurd naar de wasmCloud-host die wordt uitgevoerd in uw cluster. U moet deze poort hebben doorgestuurd om verbinding te kunnen maken met wasmCloud met behulp van curl.

    Voer in de oorspronkelijke shell de volgende opdracht uit om het HTTP-onderdeel aan te roepen:

    curl http://localhost:8080
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

    Hello from Rust!
    
  5. De geïnstalleerde resources opschonen

    Voer de volgende opdrachten uit om de resources die u hebt gemaakt op te schonen:

    kubectl delete namespace wasmcloud
    

    Met deze opdracht verwijdert u de wasmCloud-onderdelen uit uw AKS-cluster.

Volgende stappen

U kunt verder leren door de quickstartgids wasmCloud te volgen. U leert hoe u een webassembly-onderdeel helemaal zelf maakt, met behulp van verschillende wasmCloud-mogelijkheden en het schalen van uw toepassing.