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

Os componentes webAssembly são uma nova maneira de criar e implantar aplicativos. Eles foram projetados para serem 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 natureza e expõem suas funcionalidades por meio de interfaces definidas. Os componentes diferem dos contêineres por serem binários únicos que são menores e começam mais rapidamente. Encontre a descrição completa do modelo e o que é um componente na especificação.

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

Antes de começar

Pré-requisitos

  • Você não pode usar o portal do Azure para implantar o wasmCloud em um cluster do AKS.

Implantar wasmCloud

Para implantar o wasmCloud em um cluster do AKS, você precisa instalar o Helm chart all-in-one em seu cluster. Isso instala os seguintes serviços em um único namespace:

  • NATS: O NATS fornece o backbone para toda a comunicação entre componentes no wasmCloud.
  • wadm: o gerenciador de aplicativos wasmCloud, também conhecido como wadm, é o orquestrador para gerenciar aplicativos em execução em cima do wasmCloud.
  • o operador wasmCloud: o operador wasmCloud é um operador do Kubernetes que gerencia o ciclo de vida dos hosts wasmCloud.

Recomendamos implantar o wasmCloud em um namespace dedicado do Kubernetes.

  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 desse 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 iniciem o uso de 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
    

    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, execute o seguinte comando para redirecionar a porta para um dos pods NATS em execução:

    kubectl port-forward nats-0 4222
    

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

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

    wash get hosts
    

    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á em execução no cluster do AKS, você pode implantar um aplicativo wasmCloud. Um aplicativo wasmCloud é uma coleção de componentes WebAssembly orquestrados pelo gerenciador de aplicativos wasmCloud (wadm).

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

    wash app deploy hello-world.yaml
    

    Seu resultado deve ser semelhante ao seguinte:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Verifique se o aplicativo está em execução usando wash:

    wash app status hello-world
    

    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 esse comando se necessário até que todos os componentes estejam no Deployed estado.

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

    Em um shell separado, execute o seguinte comando para fazer um redirecionamento de porta para o aplicativo hello-world

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

    Esse comando encaminha todo o tráfego na porta 8080 localmente para o host wasmCloud em execução em seu 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
    

    Seu resultado deve ser semelhante ao seguinte:

    Hello from Rust!
    
  5. Limpar os recursos instalados

    Para limpar os recursos que você criou, execute os seguintes comandos:

    kubectl delete namespace wasmcloud
    

    Esse comando remove os componentes do wasmCloud do cluster do AKS.

Próximas etapas

Você pode continuar aprendendo seguindo o Guia de Início Rápido do wasmCloud, que orienta você ao criar um componente WebAssembly do zero, usando diferentes funcionalidades do wasmCloud e dimensionando seu aplicativo.