Udostępnij przez


Wdrażanie SpinKube w usłudze Azure Kubernetes Service (AKS) w celu uruchamiania bezserwerowych obciążeń WebAssembly (Wasm)

W tym artykule pokazano, jak wdrożyć narzędzie SpinKube w usłudze Azure Kubernetes Service (AKS) w celu uruchamiania bezserwerowych obciążeń zestawu WebAssembly (Wasm).

Omówienie

WebAssembly (Wasm) to format binarny zoptymalizowany pod kątem szybkiego pobierania i niemal natywnej szybkości wykonywania. Działa w piaskownicy izolowanej od komputera hosta udostępnionego przez środowisko uruchomieniowe Wasm. Domyślnie moduły WebAssembly nie mogą uzyskiwać dostępu do zasobów, w tym gniazd i zmiennych środowiskowych, na hoście poza środowiskiem piaskownicy, chyba że są jawnie dozwolone. Standard WebAssembly System Interface (WASI) definiuje zestaw interfejsów dla środowisk uruchomieniowych Wasm w celu zapewnienia dostępu do modułów WebAssembly do środowiska i zasobów spoza hosta przy użyciu modelu zabezpieczeń opartego na możliwościach.

SpinKube to projekt typu open source, który uruchamia bezserwerowe obciążenia Wasm (Spin Apps) zbudowane za pomocą otwartego oprogramowania Spin w Kubernetes. W przeciwieństwie do wcześniejszych środowisk uruchomieniowych Wasm dla platformy Kubernetes narzędzie SpinKube wykonuje aplikacje Spin Apps natywnie na źródłowych węzłach Kubernetes i nie opiera się na kontenerach. Aplikacje Spin to zwykłe moduły Wasm, które są zgodne ze specyfikacją modelu komponentów WebAssembly.

Uruchamiając polecenie Spin Apps na platformie Kubernetes za pomocą narzędzia SpinKube, możesz uruchomić następujące obciążenia:

  • Uruchom zadania Wasm obok istniejących aplikacji konteneryzowanych.
  • Uruchamiaj podobne obciążenia, zużywając mniej zasobów.
  • Uruchamianie większej liczby obciążeń w danym zestawie zasobów.
  • Uruchamiaj obciążenia na różnych architekturach (takich jak amd64 i arm64) bez konieczności ich kompilowania krzyżowego.

System SpinKube składa się z dwóch składników najwyższego poziomu:

  • spin-operator: Operator kubernetes umożliwiający wdrażanie i zarządzanie aplikacjami spin przy użyciu zasobów niestandardowych.
  • kube wtyczka dla spin: wtyczka spin interfejsu wiersza polecenia umożliwiająca użytkownikom tworzenie szkieletu manifestów wdrożenia Kubernetes dla aplikacji Spin.

Wymagania wstępne

Ograniczenia

  • Węzeł os-type Kubernetes musi być systemem Linux.
  • Nie można użyć witryny Azure Portal do wdrożenia narzędzia SpinKube w klastrze usługi AKS.

Wdrażanie narzędzia SpinKube w istniejącym klastrze

Nawiązywanie połączenia z klastrem usługi AKS

  • Skonfiguruj kubectl, aby nawiązać połączenie z klastrem Kubernetes za pomocą polecenia az aks get-credentials.

    az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
    

Wdrożyć cert-manager

Jeśli jeszcze nie wdrożyłeś cert-manager do swojego klastra AKS, możesz go zainstalować, wdrażając niestandardowe definicje zasobów (CRD), a następnie chart Helm cert-manager udostępniony za pośrednictwem repozytorium jetstack.

  1. Wdróż elementy CRD i chart Helm za pomocą polecenia cert-manager.

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yaml
    
  2. Dodaj i zaktualizuj repozytorium Jetstack przy użyciu poleceń helm repo add i helm repo update.

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    
  3. Zainstaluj chart Helm przy użyciu polecenia cert-managerhelm install.

    helm install \
      cert-manager jetstack/cert-manager --version v1.14.3 \
      --namespace cert-manager --create-namespace \
      --wait
    

Wdróż runtime-class-manager (znane również jako KWasm)

Obiekt runtime-class-manager (znany również jako KWasm) jest odpowiedzialny za wdrażanie i zarządzanie containerd-shim na żądanych węzłach Kubernetes.

  1. Dodaj repozytorium KWasm Helm przy użyciu helm repo add polecenia .

    helm repo add kwasm http://kwasm.sh/kwasm-operator/
    
  2. Zainstaluj operator KWasm przy użyciu helm install polecenia .

    helm install \
      kwasm-operator kwasm/kwasm-operator \
      --namespace kwasm --create-namespace \
      --version 0.2.3 \
      --set kwasmOperator.installerImage=ghcr.io/spinframework/containerd-shim-spin/node-installer:v0.19.0
    

Aprowizuj kontenerd-shim-spin do węzłów kubernetes

Po runtime-class-manager zainstalowaniu w klastrze usługi AKS należy dodać adnotacje do węzłów Kubernetes, które powinny mieć możliwość uruchamiania funkcji Spin Apps za pomocą kwasm.sh/kwasm-node=truepolecenia . Możesz użyć kubectl annotate node do adnotacji wszystkich węzłów lub tylko określonych węzłów w klastrze AKS. W tym przykładzie dodajemy adnotacje do wszystkich węzłów w klastrze usługi AKS z adnotacją kwasm.sh/kwasm-node=true .

  1. Skonfiguruj containerd-shim-spin wszystkie węzły w klastrze usługi AKS, korzystając z polecenia kubectl annotate node --all.

    kubectl annotate node --all kwasm.sh/kwasm-node=true
    
  2. Po dodaniu adnotacji do węzłów, runtime-class-manager używa zadania Kubernetes Job do zmodyfikowania żądanych węzłów. Po pomyślnym wdrożeniu containerd-shim-spinwęzły są oznaczone etykietą kwasm.sh/kwasm-provisioned . Możesz sprawdzić, czy żądane węzły mają przypisaną etykietę kwasm.sh/kwasm-provisioned, używając polecenia kubectl get nodes --show-labels.

    kubectl get nodes --show-labels
    

Wdróż spin-operator

Element spin-operator składa się z dwóch niestandardowych definicji zasobów (CRDs), które należy wdrożyć do klastra usługi AKS: pierwsza to RuntimeClass dla spin, a druga to SpinAppExecutor.

  1. Wdróż CRD i RuntimeClass dla spin za pomocą polecenia kubectl apply.

    kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.crds.yaml
    kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.runtime-class.yaml
    
  2. Wdróż spin-operator przy użyciu polecenia helm install.

    helm install spin-operator --version 0.5.0 \
      --namespace spin-operator --create-namespace \
      --wait oci://ghcr.io/spinframework/charts/spin-operator
    
  3. Utwórz element SpinAppExecutor w domyślnej przestrzeni nazw przy użyciu kubectl apply polecenia .

    kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml
    

Uruchom aplikację Spin w usłudze AKS

W tej sekcji zweryfikujesz instalację narzędzia SpinKube, tworząc prostą Spin App przy użyciu CLI (interfejsu wiersza polecenia) i języka JavaScript.

Utwórz nową aplikację Spin

  1. Utwórz nową aplikację Spin przy użyciu polecenia spin new z szablonem http-js.

    spin new -t http-js --accept-defaults hello-spinkube
    
  2. Przejdź do hello-spinkube katalogu przy użyciu cd polecenia .

    cd hello-spinkube
    
  3. Zainstaluj zależności przy użyciu npm install polecenia .

    npm install
    
  4. Użyj spin interfejsu wiersza polecenia, aby utworzyć podstawową aplikację Hello, World.

    spin build
    

Tworzenie rejestru kontenerów i uwierzytelnianie interfejsu spin wiersza polecenia

  1. Aplikacje Spin są pakowane jako artefakty OCI i dystrybuowane za pośrednictwem rejestru zgodnego z OCI, takiego jak Azure Container Registry (ACR). Utwórz nowe wystąpienie usługi ACR przy użyciu az acr create polecenia .

    az acr create --name <acr-name> --resource-group <resource-group-name> --location <location> --sku Basic --admin-enabled true
    
  2. Uzyskaj punkt końcowy serwera logowania ACR oraz hasło administratora, korzystając z poleceń az acr show i az acr credential show.

    ACR_LOGIN_SERVER=$(az acr show -n <acr-name> -g <resource-group-name> --query 'loginServer' -otsv)
    ACR_PASSWORD=$(az acr credential show -n <acr-name> -g <resource-group-name> --query 'passwords[0].value' -otsv)
    
  3. Uwierzytelnij swój (c0) interfejs wiersza polecenia za pomocą polecenia (c1).

    spin registry login -u $ACR_NAME -p $ACR_PASSWORD $ACR_LOGIN_SERVER
    

Pakowanie, dystrybuowanie i wdrażanie aplikacji spin

  1. Teraz, gdy spin interfejs wiersza polecenia jest uwierzytelniany w wystąpieniu usługi ACR, możesz spakować i rozpowszechnić aplikację spin przy użyciu spin registry push polecenia, a następnie odwołania do artefaktu OCI (który jest zgodny ze schematem <your acr login server>/<repository-name>:<tag> nazewnictwa).

    spin registry push $ACR_LOGIN_SERVER/hello-spinkube:0.0.1
    
  2. Utwórz wpis tajny kubernetes typu docker-registry na potrzeby odwoływania się podczas wdrażania aplikacji spin do klastra usługi AKS przy użyciu kubectl create secret polecenia . W tym przykładzie sekret nosi nazwę spinkube-on-aks.

    kubectl create secret docker-registry spinkube-on-aks \
      --docker-server=$ACR_LOGIN_SERVER \
      --docker-username=$ACR_NAME\
      --docker-password $ACR_PASSWORD
    
  3. Utwórz niezbędne manifesty wdrożenia platformy Kubernetes przy użyciu spin kube scaffold polecenia .

    spin kube scaffold --from $ACR_LOGIN_SERVER/hello-spinkube:0.0.1 -s spinkube-on-aks > spinapp.yaml
    

    Plik spinapp.yaml zawiera wstępnie skonfigurowane wystąpienie SpinApp crD, które powinno wyglądać następująco:

    apiVersion: core.spinoperator.dev/v1alpha1
    kind: SpinApp
    metadata:
      name: hello-spinkube
    spec:
      image: "<your acr name>.azurecr.io/hello-spinkube:0.0.1"
      executor: containerd-shim-spin
      replicas: 2
      imagePullSecrets:
        - name: spinkube-on-aks
    
  4. Wdróż aplikację Spin w klastrze usługi AKS przy użyciu kubectl apply polecenia .

    kubectl apply -f spinapp.yaml
    

Eksplorowanie aplikacji spin w usłudze AKS

Pobieranie listy aplikacji spin

  • Pobierz listę aplikacji Spin przy użyciu polecenia kubectl get spinapps.

    kubectl get spinapps
    
    NAME             READY   DESIRED   EXECUTOR
    hello-spinkube   2       2         containerd-shim-spin
    

Pobierz prymitywy Kubernetes utworzone przez spin-operator

Po wdrożeniu obiekt spin-operator tworzy podstawowe elementy pierwotne kubernetes, takie jak usługa, wdrożenie i odpowiadające im zasobniki.

  1. Pobierz listę usług przy użyciu kubectl get service polecenia .

    kubectl get service
    
    NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
    hello-spinkube   ClusterIP   10.43.35.78   <none>        80/TCP    24s
    
  2. Pobierz listę wdrożeń przy użyciu kubectl get deployment polecenia .

    kubectl get deployment
    
    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    hello-spinkube   2/2     2            2           38s
    
  3. Pobierz listę podów za pomocą polecenia kubectl get pod.

    kubectl get pod
    
    NAME                              READY   STATUS    RESTARTS   AGE
    hello-spinkube-5b8579448d-zmc6x   1/1     Running   0          51s
    hello-spinkube-5b8579448d-bhkp9   1/1     Running   0          51s
    

Wywoływanie Aplikacji Spin

Aby wywołać aplikację Spin, należy skonfigurować przekazywanie portów do usługi przygotowanej przez spin-operator i używać curl do wysyłania żądań HTTP.

  1. Ustanów przekierowanie portów do usługi hello-spinkube przy użyciu polecenia kubectl port-forward.

    kubectl port-forward svc/hello-spinkube 8080:80
    
    Forwarding from 127.0.0.1:8080 -> 80
    Forwarding from [::1]:8080 -> 80
    
  2. Otwórz nowe wystąpienie terminalu i użyj następującego curl polecenia, aby wysłać żądanie HTTP do localhost:8080.

    curl -iX GET localhost:8080
    
    HTTP/1.1 200 OK
    content-type: text/plain
    content-length: 17
    date: Tue, 28 May 2024 08:55:50 GMT
    Hello from JS-SDK
    

Czyszczenie zasobów

  1. Usuń aplikację Spin z klastra AKS przy użyciu polecenia kubectl delete.

    kubectl delete spinapp hello-spinkube
    
  2. Usuń sekret rejestru docker (spinkube-on-aks) przy użyciu polecenia kubectl delete secret.

    kubectl delete secret spinkube-on-aks
    
  3. Usuń wystąpienie usługi ACR utworzone w ramach tego samouczka przy użyciu polecenia az acr delete.

    az acr delete --name <acr-name> --resource-group <resource-group-name> --yes
    
  4. Usuń składniki SpinKube z klastra AKS za pomocą następujących poleceń.

    # Remove the spin-operator
    helm delete spin-operator --namespace spin-operator
    
    # Remove the SpinAppExecutor
    kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml
    
    # Remove the RuntimeClass for Spin
    kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.runtime-class.yaml
    
    # Remove the SpinKube CRDs
    kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.crds.yaml
    
    # Remove runtime-class-manager (also known as KWasm)
    helm delete kwasm-operator --namespace kwasm
    
    # Remove cert-manager Helm Release
    helm delete cert-manager --namespace cert-manager
    
    # Remove cert-manager CRDs
    kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yaml
    

Następne kroki

W tym artykule przedstawiono sposób wdrażania narzędzia SpinKube w usłudze Azure Kubernetes Service (AKS) w celu uruchamiania bezserwerowych obciążeń zestawu WebAssembly (Wasm). Aby wdrożyć więcej obciążeń w usłudze AKS, zobacz poniższe artykuły: