Utiliser wasmCloud sur Azure Kubernetes Service (AKS)

Les composants WebAssembly constituent un nouveau moyen de générer et de déployer des applications. Ils sont conçus pour être une cible de compilation portable pour les langages de programmation et peuvent s’exécuter dans différents environnements. Les composants WebAssembly sont en bac à sable par conception et exposent leurs fonctionnalités à l’aide d’interfaces définies. Les composants diffèrent des conteneurs en utilisant des binaires uniques, beaucoup plus petits et plus rapides à démarrer. Trouvez la description complète du modèle et le rôle d'un composant dans la spécification.

wasmCloud est un projet CLOUD Native Computing Foundation (CNCF) conçu pour suivre rapidement le développement, le déploiement et l’orchestration des composants WebAssembly. Ce document détaille les instructions sur le déploiement de wasmCloud sur un cluster Azure Kubernetes Service (AKS).

Avant de commencer

Prerequisites

  • Vous ne pouvez pas utiliser le portail Azure pour déployer wasmCloud sur un cluster AKS.

Déployer wasmCloud

Pour déployer wasmCloud sur un cluster AKS, vous devez installer le chart Helm complet sur votre cluster. Cela installe les services suivants dans un espace de noms unique :

  • NATS : NATS fournit l’épine dorsale pour toutes les communications entre les composants dans wasmCloud.
  • wadm : le gestionnaire d’applications wasmCloud, sinon appelé wadm est l’orchestrateur pour la gestion des applications s’exécutant sur wasmCloud.
  • l’opérateur wasmCloud : l’opérateur wasmCloud est un opérateur Kubernetes qui gère le cycle de vie des hôtes wasmCloud.

Nous vous recommandons de déployer wasmCloud dans un espace de noms Kubernetes dédié.

  1. Créez un espace de noms pour wasmCloud à l'aide de kubectl:

    kubectl create namespace wasmcloud
    
  2. Installez NATS et wadm dans l’espace de noms wasmCloud à l’aide de la helm upgrade commande :

    # 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
    

    La sortie de cette commande doit ressembler à ce qui suit :

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Attendez que tous les pods commencent à utiliser 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. Démarrez un hôte wasmCloud à l’aide d’un CRD et 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. Vérifiez que l’hôte wasmCloud est en cours d’exécution :

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

    Votre résultat doit être semblable à ce qui suit :

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Vérifiez que vous pouvez vous connecter à l'hôte wasmCloud à l'aide de wash :

    Dans un interpréteur de commandes distinct, exécutez la commande suivante pour transférer vers l’un des pods NATS en cours d’exécution :

    kubectl port-forward nats-0 4222
    

    Cette commande transfère tout le trafic sur le port 4222 localement au pod NATS s’exécutant dans votre cluster. Ce port doit être transféré pour vous connecter à wasmCloud à l'aide de wash.

    Dans votre interpréteur de commandes d’origine, exécutez la commande suivante wash pour vérifier que votre hôte wasmCloud est en cours d’exécution :

    wash get hosts
    

    Votre résultat doit être semblable à ce qui suit :

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

Déployer une application wasmCloud

Maintenant que wasmCloud s’exécute sur votre cluster AKS, vous pouvez déployer une application wasmCloud. Une application wasmCloud est une collection de composants WebAssembly orchestrés par le gestionnaire d’applications wasmCloud (wadm).

  1. Créez un fichier manifeste d’application wasmCloud. Ce fichier décrit les composants qui composent votre application. Enregistrez le fichier yaml suivant sous 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. Déployez l’application wasmCloud en utilisant wash :

    wash app deploy hello-world.yaml
    

    Votre résultat doit être semblable à ce qui suit :

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Vérifiez que l'application s'exécute à l'aide de wash :

    wash app status hello-world
    

    Votre résultat doit être semblable à ce qui suit :

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

    Répétez cette commande si nécessaire jusqu’à ce que tous les composants soient dans l’état Deployed .

  4. Appelez le composant http à l’aide curl et kubectl port-forward:

    Dans un interpréteur de commandes séparé, exécutez la commande suivante pour transférer le port vers l’application hello-world

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

    Cette commande transfère tout le trafic sur le port 8080 localement vers l’hôte wasmCloud s’exécutant dans votre cluster. Ce port doit être transféré pour vous connecter à wasmCloud à l'aide de curl.

    Dans votre interpréteur de commandes d’origine, exécutez la commande suivante pour appeler le composant http :

    curl http://localhost:8080
    

    Votre résultat doit être semblable à ce qui suit :

    Hello from Rust!
    
  5. Nettoyer les ressources installées

    Pour nettoyer les ressources que vous avez créées, exécutez les commandes suivantes :

    kubectl delete namespace wasmcloud
    

    Cette commande supprime les composants wasmCloud de votre cluster AKS.

Étapes suivantes

Vous pouvez continuer à apprendre en suivant le guide de démarrage rapide wasmCloud, qui vous guide tout en créant un composant WebAssembly à partir de zéro, en utilisant différentes fonctionnalités wasmCloud et la mise à l’échelle de votre application.