Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie SpinKube für Azure Kubernetes Service (AKS) bereitstellen, um serverlose WebAssembly-Workloads (Wasm) auszuführen.
Übersicht
WebAssembly (Wasm) ist ein Binärformat, das für schnelles Herunterladen und nahezu native Ausführungsgeschwindigkeit optimiert ist. Sie wird in einer Sandbox isoliert vom Hostcomputer ausgeführt, der von einer Wasm-Runtime bereitgestellt wird. Standardmäßig können WebAssembly-Module nicht auf Ressourcen zugreifen, einschließlich Sockets und Umgebungsvariablen, auf dem Host außerhalb der Sandbox, es sei denn, sie sind explizit zulässig. Der WebAssembly System Interface (WASI)-Standard definiert eine Reihe von Schnittstellen für Wasm-Runtimes, um den Zugriff auf WebAssembly-Module auf die Umgebung und Ressourcen außerhalb des Hosts mithilfe eines funktionsbasierten Sicherheitsmodells bereitzustellen.
SpinKube ist ein Open-Source-Projekt, das serverlose Wasm-Workloads (Spin Apps) ausführt, die mit Open Source Spin in Kubernetes erstellt wurden. Im Gegensatz zu früheren Wasm-Runtimes für Kubernetes führt SpinKube Spin Apps systemintern auf den zugrunde liegenden Kubernetes-Knoten aus und basiert nicht auf Containern. Spin-Apps sind normale Wasm-Module, die an der Spezifikation des WebAssembly-Komponentenmodells ausgerichtet sind.
Indem Sie Spin-Apps auf Kubernetes mit SpinKube ausführen, können Sie die folgenden Workloads ausführen:
- Führen Sie Wasm-Workloads neben vorhandenen containerisierten Anwendungen aus.
- Führen Sie ähnliche Workloads aus, während weniger Ressourcen verbraucht werden.
- Führen Sie weitere Workloads für eine bestimmte Gruppe von Ressourcen aus.
- Führen Sie Workloads auf verschiedenen Architekturen (z. B.
amd64undarm64) aus, ohne sie zu kompilieren.
SpinKube besteht aus zwei Komponenten der obersten Ebene:
-
spin-operator: Ein Kubernetes-Operator, der die Bereitstellung und Verwaltung von Spin Apps mithilfe von benutzerdefinierten Ressourcen zulässt. -
kubePlug-In fürspin: Einspin-CLI-Plug-In, mit dem Benutzer Gerüste für Kubernetes-Bereitstellungsmanifeste für Spin-Apps erstellen können.
Voraussetzungen
- Azure CLI-Version
2.64.0oder höher. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure-Befehlszeilenschnittstelle. -
kubectlVersion1.31.0oder höher. -
helmVersion3.15.4oder höher. -
spinVersion3.0.0oder höher. -
Node.js-Version
21.6.2. - Ein vorhandener AKS-Cluster. Wenn Sie noch keinen haben, lesen Sie die Informationen zum Erstellen eines AKS-Clusters.
Begrenzungen
- Der Kubernetes-Knoten
os-typemuss Linux sein. - Sie können das Azure-Portal nicht verwenden, um SpinKube in einem AKS-Cluster bereitzustellen.
Bereitstellen von SpinKube auf einem vorhandenen Cluster
Herstellen einer Verbindung mit dem AKS-Cluster
Mit dem Befehl
kubectlkönnen Sieaz aks get-credentialsfür die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren.az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
Bereitstellen cert-manager
Wenn Sie cert-manager noch nicht für ihr AKS-Cluster bereitgestellt haben, können Sie es installieren, indem Sie die benutzerdefinierten Ressourcendefinitionen (Custom Resource Definitions, CRDs) bereitstellen, gefolgt von dem cert-manager-Helm-Diagramm, das über das jetstack-Repository bereitgestellt wird.
Stellen Sie die
cert-manager-CRDs und das Helm-Diagramm mithilfe deskubectl apply-Befehls bereit.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yamlFügen Sie das Jetstack-Repository hinzu und aktualisieren Sie es mithilfe der Befehle
helm repo addundhelm repo update.helm repo add jetstack https://charts.jetstack.io helm repo updateInstallieren Sie das
cert-manager-Helm-Diagramm mithilfe deshelm install-Befehls.helm install \ cert-manager jetstack/cert-manager --version v1.14.3 \ --namespace cert-manager --create-namespace \ --wait
Bereitstellen runtime-class-manager (auch bekannt als KWasm)
Die runtime-class-manager (auch als KWasm bezeichnet) ist für die Bereitstellung und Verwaltung von containerd-shim auf dem gewünschten Kubernetes-Knoten verantwortlich.
Fügen Sie das KWasm Helm-Repository mit dem Befehl
helm repo addhinzu.helm repo add kwasm http://kwasm.sh/kwasm-operator/Installieren Sie den KWasm-Operator mit dem Befehl
helm install.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
Bereitstellen von containerd-shim-spin auf Kubernetes-Knoten
Nachdem runtime-class-manager auf Ihrem AKS-Cluster installiert ist, müssen Sie die Kubernetes-Knoten kommentieren, die Spin Apps mit kwasm.sh/kwasm-node=true ausführen können sollen. Sie können kubectl annotate node verwenden, um alle Knoten oder nur bestimmte Knoten in Ihrem AKS-Cluster zu kommentieren. In diesem Beispiel kommentieren wir alle Knoten im AKS-Cluster mit der kwasm.sh/kwasm-node=true-Anmerkung.
Stellen Sie
containerd-shim-spinmithilfe des Befehlskubectl annotate node --allfür alle Knoten im AKS-Cluster bereit.kubectl annotate node --all kwasm.sh/kwasm-node=trueNachdem Sie die Kubernetes-Knoten kommentiert haben, verwendet
runtime-class-managereinen Kubernetes Auftrag, um die gewünschten Knoten zu ändern. Nach erfolgreicher Bereitstellung voncontainerd-shim-spinwerden die Knoten mit einerkwasm.sh/kwasm-provisioned-Bezeichnung versehen. Sie können überprüfen, ob die gewünschten Knoten diekwasm.sh/kwasm-provisioned-Bezeichnung mit demkubectl get nodes --show-labels-Befehl zugewiesen haben.kubectl get nodes --show-labels
Bereitstellen von spin-operator
Das spin-operator besteht aus zwei benutzerdefinierten Ressourcendefinitionen (Custom Resource Definitions, CRDs), die Sie für Ihr AKS-Cluster bereitstellen müssen: Die RuntimeClass für spin und eine SpinAppExecutor.
Stellen Sie die CRDs und die RuntimeClass für
spinmithilfe des Befehlskubectl applybereit.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.yamlStellen Sie die
spin-operatormithilfe des Befehlshelm installbereit.helm install spin-operator --version 0.5.0 \ --namespace spin-operator --create-namespace \ --wait oci://ghcr.io/spinframework/charts/spin-operatorErstellen Sie einen
SpinAppExecutorim Standardnamespace mithilfe deskubectl apply-Befehls.kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml
Ausführen einer Spin-App auf AKS
In diesem Abschnitt überprüfen Sie die SpinKube-Installation, indem Sie eine einfache Spin-App mit der spin-CLI und JavaScript erstellen.
Erstellen einer neuen Spin-App
Erstellen Sie eine neue Spin-App mit dem
spin new-Befehl mit derhttp-js-Vorlage.spin new -t http-js --accept-defaults hello-spinkubeWechseln Sie mit dem
hello-spinkube-Befehl zumcd-Verzeichnis.cd hello-spinkubeInstallieren Sie die Abhängigkeiten mithilfe des
npm install-Befehls.npm installVerwenden Sie die
spin-CLI, um eine einfache Hello, World-Anwendung zu erstellen.spin build
Erstellen der Containerregistrierung und Authentifizieren der spin-CLI
Spin-Apps werden als OCI-Artefakte verpackt und über eine OCI-kompatible Registrierung wie Azure Container Registry (ACR) verteilt. Erstellen Sie mithilfe des Befehls
az acr createeine neue ACR-Instanz.az acr create --name <acr-name> --resource-group <resource-group-name> --location <location> --sku Basic --admin-enabled trueRufen Sie den ACR-Anmeldeserverendpunkt und das Administratorkennwort mithilfe der Befehle
az acr showundaz acr credential showab.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)Authentifizieren Sie Ihre
spin-CLI mit demspin registry login-Befehl.spin registry login -u $ACR_NAME -p $ACR_PASSWORD $ACR_LOGIN_SERVER
Packen, Verteilen und Bereitstellen der Spin-App
Nachdem die
spin-CLI nun für die ACR-Instanz authentifiziert wurde, können Sie die Spin-App mithilfe desspin registry push-Befehls packen und verteilen, gefolgt von einem OCI-Artefaktverweis (der dem<your acr login server>/<repository-name>:<tag>-Benennungsschema folgt).spin registry push $ACR_LOGIN_SERVER/hello-spinkube:0.0.1Erstellen Sie einen Kubernetes-Geheimschlüssel vom Typ
docker-registryfür den Verweis während der Bereitstellung der Spin-App auf Ihrem AKS-Cluster mithilfe deskubectl create secret-Befehls. In diesem Beispiel heißt das Geheimnisspinkube-on-aks.kubectl create secret docker-registry spinkube-on-aks \ --docker-server=$ACR_LOGIN_SERVER \ --docker-username=$ACR_NAME\ --docker-password $ACR_PASSWORDErstellen Sie mithilfe des
spin kube scaffold-Befehls die erforderlichen Kubernetes-Bereitstellungsmanifeste.spin kube scaffold --from $ACR_LOGIN_SERVER/hello-spinkube:0.0.1 -s spinkube-on-aks > spinapp.yamlDie
spinapp.yaml-Datei enthält eine vorkonfigurierte Instanz derSpinApp-CRD, die wie folgt aussehen soll: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-aksStellen Sie die Spin-App mithilfe des
kubectl apply-Befehls auf dem AKS-Cluster bereit.kubectl apply -f spinapp.yaml
Erkunden der Spin-App in AKS
Abrufen der Liste der Spin-Apps
Rufen Sie die Liste der Spin-Apps mithilfe des
kubectl get spinapps-Befehls ab.kubectl get spinappsNAME READY DESIRED EXECUTOR hello-spinkube 2 2 containerd-shim-spin
Abrufen der Kubernetes-Grundtypen, die von der spin-operator erstellt werden
Bei der Bereitstellung erstellt der spin-operator zugrunde liegende Kubernetes-Grundtypen wie ein Service, eine Bereitstellung und entsprechende Pods.
Rufen Sie die Liste der Dienste mithilfe des
kubectl get service-Befehls ab.kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-spinkube ClusterIP 10.43.35.78 <none> 80/TCP 24sRufen Sie die Liste der Bereitstellungen mithilfe des
kubectl get deployment-Befehls ab.kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE hello-spinkube 2/2 2 2 38sRufen Sie die Liste der Pods mithilfe des
kubectl get pod-Befehls ab.kubectl get podNAME READY STATUS RESTARTS AGE hello-spinkube-5b8579448d-zmc6x 1/1 Running 0 51s hello-spinkube-5b8579448d-bhkp9 1/1 Running 0 51s
Aufrufen der Spin-App
Um die Spin-App aufzurufen, konfigurieren Sie die Portweiterleitung an den Dienst, der von der spin-operator bereitgestellt wird und curl zum Senden von HTTP-Anforderungen verwendet.
Richten Sie die Portweiterleitung mithilfe des Befehls
hello-spinkubean denkubectl port-forward-Dienst ein.kubectl port-forward svc/hello-spinkube 8080:80Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80Öffnen Sie eine neue Terminalinstanz und verwenden Sie den folgenden
curl-Befehl, um eine HTTP-Anforderung anlocalhost:8080zu senden.curl -iX GET localhost:8080HTTP/1.1 200 OK content-type: text/plain content-length: 17 date: Tue, 28 May 2024 08:55:50 GMT Hello from JS-SDK
Bereinigen von Ressourcen
Entfernen Sie die Spin-App mithilfe des
kubectl delete-Befehls aus dem AKS-Cluster.kubectl delete spinapp hello-spinkubeEntfernen Sie das docker-registry-Geheimnis (spinkube-on-aks) mithilfe des
kubectl delete secret-Befehls.kubectl delete secret spinkube-on-aksEntfernen Sie die ACR-Instanz, die Sie als Teil dieses Tutorial mithilfe des
az acr delete-Befehls erstellt haben.az acr delete --name <acr-name> --resource-group <resource-group-name> --yesEntfernen Sie die SpinKube-Komponenten aus dem AKS-Cluster mithilfe der folgenden Befehle.
# 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
Nächste Schritte
In diesem Artikel haben Sie erfahren, wie Sie SpinKube für Azure Kubernetes Service (AKS) bereitstellen, um serverlose WebAssembly-Workloads (Wasm) auszuführen. Weitere Arbeitsauslastungen auf AKS finden Sie in den folgenden Artikeln: