Usar wasmCloud no Serviço Kubernetes do Azure (AKS)

Os componentes WebAssembly são uma nova maneira de criar e implantar aplicativos. Eles são projetados para ser um destino de compilação portátil para linguagens de programação e podem ser executados em vários ambientes. Os componentes WebAssembly são isolados por design e expõem a sua funcionalidade através de interfaces definidas. Os componentes diferem dos contêineres porque são binários únicos que são muito menores e mais rápidos de iniciar. Encontre a descrição completa do modelo e o que é um componente na especificação.

wasmCloud é um projeto Cloud Native Computing Foundation (CNCF) projetado para acelerar o desenvolvimento, implantação e orquestração de componentes WebAssembly. Este documento detalha instruções sobre como implantar o wasmCloud em um cluster do Serviço Kubernetes do Azure (AKS).

Antes de começar

Pré-requisitos

  • Não é possível usar o portal do Azure para implantar o wasmCloud em um cluster AKS.

Implante o wasmCloud

Para implantar o wasmCloud em um cluster AKS, você precisa instalar o gráfico Helm tudo em um em seu cluster. Isso instala os seguintes serviços em um único namespace:

  • NATS: O NATS fornece a espinha dorsal para toda a comunicação entre componentes no wasmCloud.
  • wadm: o wasmCloud Application Manager, também conhecido como wadm, é o orquestrador para gerenciar aplicativos executados sobre o wasmCloud.
  • o operador wasmCloud: o operador wasmCloud é um operador Kubernetes que gerencia o ciclo de vida dos hosts wasmCloud.

Recomendamos implantar o wasmCloud em um namespace Kubernetes dedicado.

  1. Crie um namespace para wasmCloud usando kubectl:

    kubectl create namespace wasmcloud
    
  2. Instale NATS e wadm no namespace wasmCloud usando o helm upgrade comando:

    # 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
    

    A saída deste comando deve ser semelhante à seguinte:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Aguarde até que todos os pods comecem 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 um host wasmCloud usando um CRD e 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. Verifique se o host wasmCloud está em execução:

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

    O seu resultado deve ser semelhante ao seguinte:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Verifique se você pode se conectar ao host wasmCloud usando wash:

    Em um shell separado, use o seguinte comando para fazer a portabilidade para um dos pods NATS em execução:

    kubectl port-forward nats-0 4222
    

    Este comando encaminha todo o tráfego na porta 4222 localmente para o pod NATS em execução no cluster. Você deve ter essa porta encaminhada para se conectar ao wasmCloud usando wash.

    No shell original, execute o seguinte comando com wash para verificar se o seu host wasmCloud está em execução:

    wash get hosts
    

    O seu resultado deve ser semelhante ao seguinte:

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

Implantar um aplicativo wasmCloud

Agora que o wasmCloud está sendo executado em seu cluster AKS, você pode implantar um aplicativo wasmCloud. Um aplicativo wasmCloud é uma coleção de componentes WebAssembly que são orquestrados pelo wasmCloud Application Manager (wadm).

  1. Crie um arquivo de manifesto do aplicativo wasmCloud. Este arquivo descreve os componentes que compõem seu aplicativo. Salve o seguinte arquivo 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. Implante o aplicativo wasmCloud usando wash:

    wash app deploy hello-world.yaml
    

    O seu resultado deve ser semelhante ao seguinte:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Verifique se o aplicativo está sendo executado usando wash:

    wash app status hello-world
    

    O seu resultado deve ser semelhante ao seguinte:

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

    Repita este comando Deployed, se necessário, até que todos os componentes estejam no estado Deployed.

  4. Invoque o componente http usando curl e kubectl port-forward:

    Em um shell separado, execute o seguinte comando para fazer o redirecionamento de porta para a aplicação hello-world.

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

    Este comando encaminha todo o tráfego na porta 8080 localmente para o host wasmCloud em execução no cluster. Você deve ter essa porta encaminhada para se conectar ao wasmCloud usando curl.

    No shell original, execute o seguinte comando para invocar o componente http:

    curl http://localhost:8080
    

    O seu resultado deve ser semelhante ao seguinte:

    Hello from Rust!
    
  5. Limpar os recursos instalados

    Para limpar os recursos criados, execute os seguintes comandos:

    kubectl delete namespace wasmcloud
    

    Este comando remove os componentes wasmCloud do seu cluster AKS.

Próximos passos

Você pode continuar a aprender seguindo o Guia de Início Rápido do wasmCloud, que o orienta na criação de um componente WebAssembly do zero, usando diferentes recursos do wasmCloud e dimensionando seu aplicativo.