Korzystanie z usługi wasmCloud w usłudze Azure Kubernetes Service (AKS)

Składniki zestawu WebAssembly to nowy sposób tworzenia i wdrażania aplikacji. Są one przeznaczone do przenośnej kompilacji docelowej dla języków programowania i mogą być uruchamiane w różnych środowiskach. Składniki zestawu WebAssembly są projektowane w trybie piaskownicy i uwidaczniają ich funkcjonalność przy użyciu zdefiniowanych interfejsów. Składniki różnią się od kontenerów, ponieważ pojedyncze pliki binarne są znacznie mniejsze i szybsze do uruchomienia. Znajdź pełny opis modelu i dowiedz się, czym jest składnik w specyfikacji.

wasmCloud to projekt Cloud Native Computing Foundation (CNCF) zaprojektowany w celu przyspieszenia tworzenia, wdrażania i zarządzania orkiestracją składników WebAssembly. Ten dokument zawiera szczegółowe instrukcje dotyczące wdrażania usługi wasmCloud w klastrze usługi Azure Kubernetes Service (AKS).

Zanim rozpoczniesz

Wymagania wstępne

  • Nie można użyć witryny Azure Portal do wdrożenia usługi wasmCloud w klastrze usługi AKS.

Wdrażanie usługi wasmCloud

Aby wdrożyć usługę wasmCloud w klastrze AKS, należy zainstalować konfigurację „all-in-one” Helm w klastrze. Spowoduje to zainstalowanie następujących usług w jednej przestrzeni nazw:

  • NATS: USŁUGA NATS zapewnia szkielet dla całej komunikacji między składnikami w usłudze wasmCloud.
  • wadm: wasmCloud Application Manager, inaczej znany jako wadm jest koordynatorem do zarządzania aplikacjami działającymi na bazie wasmCloud.
  • wasmCloud Operator: wasmCloud Operator jest Kubernetes operatorem, który zarządza cyklem życia hostów wasmCloud.

Zalecamy wdrożenie wasmCloud w dedykowanej przestrzeni nazw Kubernetes.

  1. Utwórz przestrzeń nazw dla usługi wasmCloud przy użyciu polecenia kubectl:

    kubectl create namespace wasmcloud
    
  2. Zainstaluj NATS i wadm w przestrzeni nazw wasmCloud, używając polecenia 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
    

    Dane wyjściowe tego polecenia powinny wyglądać podobnie do następujących:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Poczekaj na rozpoczęcie korzystania ze kubectlwszystkich zasobników:

    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. Uruchom hosta wasmCloud przy użyciu crd i 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. Sprawdź, czy host wasmCloud jest uruchomiony:

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

    Dane wyjściowe powinny wyglądać podobnie do następujących:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Sprawdź, czy możesz nawiązać połączenie z hostem wasmCloud przy użyciu polecenia wash:

    W oddzielnej powłoce uruchom następujące polecenie, aby przekierować port do jednego z działających podów NATS.

    kubectl port-forward nats-0 4222
    

    To polecenie przekazuje cały ruch na porcie 4222 lokalnie do podu NATS uruchomionego w klastrze. Aby nawiązać połączenie z usługą wasmCloud za pomocą wash, musisz mieć przekierowany ten port.

    W oryginalnej powłoce uruchom następujące polecenie za pomocą wash, aby sprawdzić, czy host wasmCloud działa:

    wash get hosts
    

    Dane wyjściowe powinny wyglądać podobnie do następujących:

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

Wdrażanie aplikacji wasmCloud

Teraz, gdy usługa wasmCloud działa w klastrze usługi AKS, możesz wdrożyć aplikację wasmCloud. Aplikacja wasmCloud to kolekcja składników zestawu WebAssembly, które są orkiestrowane przez menedżera aplikacji wasmCloud (wadm).

  1. Utwórz plik manifestu aplikacji wasmCloud. W tym pliku opisano składniki wchodzące w skład aplikacji. Zapisz następujący plik 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. Wdróż aplikację wasmCloud przy użyciu polecenia wash:

    wash app deploy hello-world.yaml
    

    Dane wyjściowe powinny wyglądać podobnie do następujących:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Sprawdź, czy aplikacja jest uruchomiona przy użyciu polecenia wash:

    wash app status hello-world
    

    Dane wyjściowe powinny wyglądać podobnie do następujących:

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

    Powtórz to polecenie, jeśli to konieczne, dopóki wszystkie składniki nie znajdą się w stanie Deployed.

  4. Wywołaj składnik http przy użyciu poleceń curl i kubectl port-forward:

    W oddzielnej powłoce uruchom następujące polecenie, aby przekierować port dla aplikacji hello-world

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

    To polecenie przekazuje cały ruch na porcie 8080 lokalnie do hosta wasmCloud uruchomionego w klastrze. Aby nawiązać połączenie z usługą wasmCloud za pomocą curl, musisz mieć przekierowany ten port.

    Uruchom w swoim terminalu następujące polecenie, aby wywołać składnik http:

    curl http://localhost:8080
    

    Dane wyjściowe powinny wyglądać podobnie do następujących:

    Hello from Rust!
    
  5. Czyszczenie zainstalowanych zasobów

    Aby wyczyścić utworzone zasoby, uruchom następujące polecenia:

    kubectl delete namespace wasmcloud
    

    To polecenie usuwa składniki wasmCloud z klastra AKS.

Następne kroki

Możesz kontynuować naukę, postępując zgodnie z przewodnikiem Szybki start usługi wasmCloud, który przeprowadzi Cię przez proces tworzenia składnika WebAssembly od podstaw, korzystając z różnych możliwości usługi wasmCloud i skalowania aplikacji.