Použití wasmCloudu ve službě Azure Kubernetes Service (AKS)

Komponenty WebAssembly představují nový způsob vytváření a nasazování aplikací. Jsou navržené tak, aby byly přenosným cílem kompilace pro programovací jazyky a mohly běžet v různých prostředích. Komponenty WebAssembly jsou v izolovaném prostoru (sandbox) a zpřístupňují jejich funkce pomocí definovaných rozhraní. Komponenty se liší od kontejnerů tím, že jde o jednotlivé binární soubory, které jsou mnohem menší a rychleji se spouštějí. Vyhledejte úplný popis modelu a komponentu ve specifikaci.

wasmCloud je projekt CNCF (Cloud Native Computing Foundation), který je navržený tak, aby rychle sledoval vývoj, nasazení a orchestraci komponent WebAssembly. Tento dokument podrobně popisuje, jak nasadit wasmCloud v clusteru Azure Kubernetes Service (AKS).

Než začnete

Požadavky

  • K nasazení wasmCloudu do clusteru AKS nemůžete použít Azure Portal.

Nasadit wasmCloud

Pokud chcete nasadit wasmCloud v clusteru AKS, musíte do clusteru nainstalovat Helm chart all-in-one. Tím se do jednoho oboru názvů nainstalují následující služby:

  • NATS: NATS poskytuje páteř pro veškerou komunikaci mezi komponentami v wasmCloudu.
  • wadm: Správce aplikací wasmCloud, jinak známý jako wadm je orchestrátor pro správu aplikací běžících na wasmCloudu.
  • wasmCloud Operator: wasmCloud Operator je operátor Kubernetes, který spravuje životní cyklus hostitelů wasmCloud.

Doporučujeme nasadit wasmCloud do vyhrazeného prostoru názvů Kubernetes.

  1. Vytvořte obor názvů pro wasmCloud pomocí kubectl:

    kubectl create namespace wasmcloud
    
  2. Nainstalujte NATS a wadm do oboru názvů wasmCloud pomocí příkazu 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
    

    Výstup z tohoto příkazu by měl vypadat nějak takto:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Počkejte, až všechny pody začnou používat 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. Spuštění hostitele wasmCloud pomocí CRD a 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. Ověřte, že je hostitel wasmCloud spuštěný:

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

    Výstup by měl vypadat nějak takto:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Pomocí následujícího příkazu ověřte, že se můžete připojit k hostiteli wasmCloud:wash

    Spuštěním následujícího příkazu v samostatném prostředí přejděte na jeden ze spuštěných podů NATS:

    kubectl port-forward nats-0 4222
    

    Tento příkaz přesměruje veškerý provoz na portu 4222 místně do podu NATS spuštěného ve vašem clusteru. Abyste se mohli připojit k wasmCloudu pomocí wash, musíte mít tento port přeposlaný.

    V původním prostředí spusťte následující příkaz s wash, abyste ověřili, že je váš hostitel wasmCloud spuštěný:

    wash get hosts
    

    Výstup by měl vypadat nějak takto:

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

Nasazení aplikace wasmCloud

Teď, když je wasmCloud spuštěný ve vašem clusteru AKS, můžete nasadit aplikaci wasmCloud. Aplikace wasmCloud je kolekce komponent WebAssembly, které jsou orchestrovány správcem aplikací wasmCloud (wadm).

  1. Vytvořte soubor manifestu aplikace wasmCloud. Tento soubor popisuje komponenty, které tvoří vaši aplikaci. Uložte následující soubor yaml jako 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. Nasaďte aplikaci wasmCloud pomocí wash:

    wash app deploy hello-world.yaml
    

    Výstup by měl vypadat nějak takto:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Ověřte, že aplikace běží pomocí wash:

    wash app status hello-world
    

    Výstup by měl vypadat nějak takto:

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

    Tento příkaz v případě potřeby opakujte, dokud nebudou všechny komponenty ve stavu Deployed.

  4. Vyvolejte komponentu HTTP pomocí curl a kubectl port-forward:

    V samostatném prostředí spusťte následující příkaz pro přesměrování do hello-world aplikace.

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

    Tento příkaz přesměruje veškerý provoz na portu 8080 místně na hostitele wasmCloud spuštěného ve vašem clusteru. Abyste se mohli připojit k wasmCloudu pomocí curl, musíte mít tento port přeposlaný.

    V původním prostředí spusťte následující příkaz, který vyvolá komponentu HTTP:

    curl http://localhost:8080
    

    Výstup by měl vypadat nějak takto:

    Hello from Rust!
    
  5. Vyčistěte nainstalované prostředky

    Pokud chcete vyčistit prostředky, které jste vytvořili, spusťte následující příkazy:

    kubectl delete namespace wasmcloud
    

    Tento příkaz odebere komponenty wasmCloud z clusteru AKS.

Další kroky

Můžete se i nadále učit podle úvodní příručky wasmCloud, která vás provede vytvořením komponenty WebAssembly od nuly pomocí různých funkcí wasmCloud a škálování aplikace.