Использование wasmCloud в службе Azure Kubernetes (AKS)

Компоненты WebAssembly — это новый способ создания и развертывания приложений. Они предназначены для переносимого целевого объекта компиляции для языков программирования и могут выполняться в различных средах. Компоненты WebAssembly изначально изолированы и предоставляют свои функциональные возможности через определенные интерфейсы. Компоненты отличаются от контейнеров в том, что они одинарные двоичные файлы, которые гораздо меньше и быстрее запускаются. Найдите полное описание модели и какой компонент в спецификации.

wasmCloud — это проект Cloud Native Computing Foundation (CNCF), предназначенный для быстрого отслеживания разработки, развертывания и оркестрации компонентов WebAssembly. В этом документе описаны инструкции по развертыванию wasmCloud в кластере Службы Azure Kubernetes (AKS).

Перед тем как начать

Предпосылки

  • Вы не можете использовать портал Azure для развертывания wasmCloud в кластере AKS.

Разверните wasmCloud

Чтобы развернуть wasmCloud в кластере Azure Kubernetes Service (AKS), необходимо установить единый график Helm в ваш кластер. При этом устанавливаются следующие службы в одно пространство имен:

  • NATS: NATS предоставляет магистраль для всех связей между компонентами в WasmCloud.
  • wadm: диспетчер приложений wasmCloud, также известный как wadm, является оркестратором для управления приложениями, запущенными на wasmCloud.
  • Оператор wasmCloud: оператор wasmCloud — это оператор Kubernetes, который управляет жизненным циклом узлов wasmCloud.

Рекомендуется развернуть wasmCloud в выделенном пространстве имен Kubernetes.

  1. Создайте пространство имен для wasmCloud с помощью kubectl:

    kubectl create namespace wasmcloud
    
  2. Установите NATS и wadm в пространство имен wasmCloud с помощью команды 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
    

    Выходные данные этой команды должны выглядеть следующим образом:

    NAME: wasmcloud-platform
    LAST DEPLOYED: Thu Nov  7 14:58:54 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    
  3. Дождитесь, когда все Pod'ы начнут работать, используя 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. Запустите узел wasmCloud с помощью CRD и 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. Убедитесь, что хост wasmCloud запущен:

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

    Выходные данные должны выглядеть примерно так:

    NAME                             READY   STATUS    RESTARTS   AGE
    wasmcloud-host-f9d67b8cf-lvsq6   2/2     Running   0          84s
    
  6. Убедитесь, что вы можете подключиться к узлу WasmCloud с помощью wash:

    В отдельной оболочке выполните следующую команду, чтобы перенаправить порт на один из запущенных модулей pod NATS:

    kubectl port-forward nats-0 4222
    

    Эта команда перенаправит весь трафик через порт 4222 локально в модуль NATS, работающий в кластере. Этот порт необходимо перенаправить, чтобы подключиться к wasmCloud с помощью wash.

    В исходной оболочке выполните следующую команду с wash, чтобы убедиться, что хост wasmCloud запущен:

    wash get hosts
    

    Выходные данные должны выглядеть примерно так:

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

Развертывание приложения WasmCloud

Теперь, когда wasmCloud работает в кластере AKS, можно развернуть приложение wasmCloud. Приложение wasmCloud — это коллекция компонентов WebAssembly, управляемых диспетчером приложений WasmCloud (wadm).

  1. Создайте файл манифеста приложения wasmCloud. В этом файле описываются компоненты, составляющие приложение. Сохраните следующий yaml-файл как 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. Развертывание приложения WasmCloud с помощью wash:

    wash app deploy hello-world.yaml
    

    Выходные данные должны выглядеть примерно так:

    Deployed application "hello-world", version "01JC44TVDBC2V6MJ1NJTKNNX1J"
    
  3. Убедитесь, что приложение работает с помощью wash:

    wash app status hello-world
    

    Выходные данные должны выглядеть примерно так:

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

    Повторите эту команду при необходимости, пока все компоненты не находятся в Deployed состоянии.

  4. Вызов компонента HTTP с помощью curl и kubectl port-forward:

    В отдельной оболочке выполните следующую команду, чтобы перенаправить его в hello-world приложение.

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

    Эта команда перенаправит весь трафик через порт 8080 локально на узел wasmCloud, работающий в кластере. Этот порт необходимо перенаправить, чтобы подключиться к wasmCloud с помощью curl.

    В исходной оболочке выполните следующую команду, чтобы вызвать компонент HTTP:

    curl http://localhost:8080
    

    Выходные данные должны выглядеть примерно так:

    Hello from Rust!
    
  5. Очистка установленных ресурсов

    Чтобы очистить созданные ресурсы, выполните следующие команды:

    kubectl delete namespace wasmcloud
    

    Эта команда удаляет компоненты wasmCloud из кластера AKS.

Дальнейшие действия

Вы можете продолжить изучение, следуя руководству по краткому руководству по wasmCloud, которое поможет вам создать компонент WebAssembly с нуля, используя различные возможности wasmCloud и масштабирование приложения.