Klaster Kubernetes uruchamiający aplikacje serwerowe skompilowane do formatu WebAssembly.
System operacyjny: Linux, MacOS lub Windows
Kubernetes
Docker
WebAssembly
iWebAssembly System Interface
k3d
-- lekka dystrybucja Kubernetes, pozwala na stworzenie większej ilości węzłów niż 1 jak w przypadku Docker for DesktopRust
spin
-- to narzędzie dostarczające zestaw funkcji do rozwijania oprogramowania (SDK Software Development Kit) w dla technologii WebAssembly
Docker for Desktop
- instalacja
- Wybranie ponizszych opcji konfiguracyjnych
k3d
instalacjaRust
- instalacja
- Dodanie formatu kompilacji dla WASI
rustup target add wasm32-unknown-unknown
- Klient HTTP, np.
curl
Narzędzie spin
pozwala na tworzenie komponentów aplikacji działających w technologii WebAssembly. W poniższym projekcie, wymienione narzędzi pozwoliło na przyjmowanie zapytań HTTP oraz nasłuchiwanie na zdarzenia wysyłane przez bazę danych Redis.
Restaurant
-- komponent HTTP, odpowiada za- Zwracanie listy pozycji menu
- Składanie zamówienia
- Sprawdzanie statusu zamówienia
Kitchen
-- komponent nasłuchujący na zdarzenia Redisa- Po przyjęciu zdarzenia zamówienia nowej pozycji menu, oznacza wygenerowane zamówienie jako gotowe po upłynięciu określonej ilości sekund
Klaster posiada 2 węzły
k3d-bachelors-project-server-0
-- standardowy węzeł z domyślnym środowiskiem uruchomienioym, działa na nim baza danych Redisk3d-bachelors-project-worker-0
-- przygotowany do uruchamiania aplikacji w formacie WebAssembly
k8s
-- pliki konfiguracyjne klastraauth.yaml
-- konfiguracja dla konta administratora klastraingress.yaml
-- konfiguracja reguł wejścia ruchu sieciowego oraz routingu klastrak3d.yaml
-- konfiguracja narzędziak3d
redis.yaml
-- konfiguracja bazy danych Redisruntime.yaml
-- konfiguracja klasy uruchomieniowej (RuntimeClass
) dla środowiska uruchomieniowego WebAssembly
kitchen
-- pliki serwisukitchen
src
-- pliki źródłowe aplikacjiCargo.lock
-- plik zawierający informacje o wymaganych wersjach zewnętrznych pakietówCargo.toml
-- plik konfiguracyjny dla programu w języku Rustdeploy.yaml
-- plik konfiguracyjny wdrożenia do klastra Kubernetesspin.toml
-- plik konfiguracyjny dla narzędziaspin
, więcej informacji link
restaurant
-- ta sama struktura jak dlakitchen
dashboard.sh
-- pomocniczy skrypt uruchamiający interfejs graficzny Kubernetesa
Zakładając, ze zainstalowane zostały wszystkie wymagane narzędzia w odpowiedni sposób, poniższe kroki stworzą klaster Kubernetes
- Stworzenie klastra z balanserem ruchu sieciowego
k3d cluster create bachelors-project --port "8088:80@loadbalancer"
- Stworzenie węzła roboczego, uruchamiającego aplikacje w technologii WebAssembly
k3d node create bachelors-project-worker -c bachelors-project --image="ghcr.io/deislabs/
containerd-wasm-shims/examples/k3d:latest"
- Oznaczenie węzła roboczego etykietą
kubectl label nodes k3d-bachelors-project-worker-0 wasm=yes spin=yes
- Wczytanie konfiguracji do klastra
kubectl -rf k8s
-- zaapliokuje konfigurację dla wszystkich plików z kataloguk8s
kubectl -f kitchen/deploy.yaml
kubectl -f restaurant/deploy.yaml
Aplikacja akceptuje zapytania HTTP pod adresem:
- Odczytanie listy pozycji menu
GET http://localhost:8088/menu
- Złożenie zamówienia, np. pizzy
POST http://localhost:8088/order/PIZZA
- Odczytanie statusu zamówienia np. pizzy
GET http://localhost:8088/order/PIZZA