Compartir a través de


Uso de wasmCloud en Azure Kubernetes Service (AKS)

Los componentes de WebAssembly son una nueva manera de compilar e implementar aplicaciones. Están diseñados para ser un destino de compilación portátil para lenguajes de programación y se pueden ejecutar en varios entornos. Los componentes de WebAssembly están aislados por diseño y exponen su funcionalidad mediante interfaces definidas. Los componentes difieren de los contenedores en que los archivos binarios únicos son mucho más pequeños y más rápidos para empezar. Busque la descripción completa del modelo y cuál es un componente de la especificación.

wasmCloud es un proyecto de Cloud Native Computing Foundation (CNCF) diseñado para realizar un seguimiento rápido del desarrollo, la implementación y la orquestación de componentes webAssembly. En este documento se detallan las instrucciones sobre cómo implementar wasmCloud en un clúster de Azure Kubernetes Service (AKS).

Antes de empezar

Prerrequisitos

  • No puede usar Azure Portal para implementar wasmCloud en un clúster de AKS.

Implementación de wasmCloud

Para implementar wasmCloud en un clúster de AKS, debe instalar todo en un gráfico de Helm en el clúster. Esto instala los siguientes servicios en un único espacio de nombres:

  • NATS: NATS proporciona la red troncal para toda la comunicación entre los componentes de wasmCloud.
  • wadm: wasmCloud Application Manager, también conocido como wadm es el orquestador para administrar aplicaciones que se ejecutan en wasmCloud.
  • el operador wasmCloud: el operador wasmCloud es un operador de Kubernetes que administra el ciclo de vida de los hosts wasmCloud.

Se recomienda implementar wasmCloud en un espacio de nombres de Kubernetes dedicado.

  1. Cree un namespace para wasmCloud mediante kubectl:

    kubectl create namespace wasmcloud
    
  2. Instale NATS y wadm en el espacio de nombres wasmCloud mediante el comando 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
    

    La salida de este comando debe ser similar a la siguiente:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Espere a que todos los pods empiecen a usar 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. Inicie un host wasmCloud mediante un CRD y 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. Asegúrese de que el host wasmCloud esté en ejecución:

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

    La salida debe tener una apariencia similar a la siguiente:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Compruebe que puede conectarse al host wasmCloud mediante wash:

    En un shell independiente, ejecute el siguiente comando para reenviar uno de los pods NATS en ejecución:

    kubectl port-forward nats-0 4222
    

    Este comando reenvía todo el tráfico en el puerto 4222 localmente al pod NATS que se ejecuta en el clúster. Debe tener este puerto reenviado para conectarse a wasmCloud mediante wash.

    En su shell original, ejecute el siguiente comando con wash para comprobar que el host wasmCloud se está ejecutando:

    wash get hosts
    

    La salida debe tener una apariencia similar a la siguiente:

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

Implementación de una aplicación wasmCloud

Ahora que wasmCloud se está ejecutando en el clúster de AKS, puede implementar una aplicación wasmCloud. Una aplicación wasmCloud es una colección de componentes de WebAssembly orquestados por el administrador de aplicaciones wasmCloud (wadm).

  1. Cree un archivo de manifiesto para la aplicación de wasmCloud. En este archivo se describen los componentes que componen la aplicación. Guarde el siguiente archivo yaml como 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. Implemente la aplicación wasmCloud mediante wash:

    wash app deploy hello-world.yaml
    

    La salida debe tener una apariencia similar a la siguiente:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Compruebe que la aplicación se está ejecutando mediante wash:

    wash app status hello-world
    

    La salida debe tener una apariencia similar a la siguiente:

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

    Repita este comando si es necesario hasta que todos los componentes estén en estado Deployed .

  4. Invoque el componente http mediante curl y kubectl port-forward:

    En un shell independiente, ejecute el siguiente comando para reenviar a la aplicación hello-world

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

    Este comando reenvía todo el tráfico del puerto 8080 localmente al host wasmCloud que se ejecuta en el clúster. Debe tener este puerto reenviado para conectarse a wasmCloud mediante curl.

    En el shell original, ejecute el siguiente comando para invocar el componente http:

    curl http://localhost:8080
    

    La salida debe tener una apariencia similar a la siguiente:

    Hello from Rust!
    
  5. Limpieza de los recursos instalados

    Para limpiar los recursos que ha creado, ejecute los siguientes comandos:

    kubectl delete namespace wasmcloud
    

    Este comando quita los componentes wasmCloud del clúster de AKS.

Pasos siguientes

Puede seguir aprendiendo siguiendo la guía de inicio rápido de wasmCloud, que le guía a través de la creación de un componente WebAssembly desde cero, mediante diferentes funcionalidades de wasmCloud y escalado de la aplicación.