Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo implementar SpinKube en Azure Kubernetes Service (AKS) para ejecutar cargas de trabajo WebAssembly (Wasm) sin servidor.
Información general
WebAssembly (Wasm) es un formato binario optimizado para la descarga rápida y la velocidad de ejecución casi nativa. Se ejecuta en un espacio aislado del equipo host proporcionado por un runtime de Wasm. De forma predeterminada, los módulos WebAssembly no pueden acceder a los recursos, incluidos los sockets y las variables de entorno en el host fuera del espacio aislado, a menos que se permitan explícitamente. El estándar de WebAssembly System Interface (WASI) define un conjunto de interfaces para que los runtime de Wasm proporcionen acceso a los módulos de WebAssembly al entorno y los recursos fuera del host mediante un modelo de seguridad basado en funcionalidades.
SpinKube es un proyecto de código abierto que ejecuta cargas de trabajo Wasm sin servidor (Spin Apps) compiladas con Spin de código abierto en Kubernetes. A diferencia de los runtime anteriores de Wasm para Kubernetes, SpinKube ejecuta Spin Apps de forma nativa en los nodos de Kubernetes subyacentes y no se basa en contenedores. Spin Apps son módulos Wasm normales que se alinean con la especificación del modelo de componentes de WebAssembly.
Al ejecutar Spin Apps en Kubernetes con SpinKube, puede ejecutar las siguientes cargas de trabajo:
- Ejecute cargas de trabajo de Wasm junto a las aplicaciones en contenedores existentes.
- Ejecute cargas de trabajo similares mientras consume menos recursos.
- Ejecute más cargas de trabajo en un conjunto determinado de recursos.
- Ejecute cargas de trabajo en distintas arquitecturas (como
amd64yarm64) sin compilarlas entre sí.
SpinKube consta de dos componentes de nivel superior:
-
spin-operator: un operador de Kubernetes que permite la implementación y administración de Spin Apps mediante recursos personalizados. -
Complemento de
kubeparaspin: un complemento de la CLI despinque permite a los usuarios aplicar scaffolding a los manifiestos de implementación de Kubernetes para Spin Apps.
Requisitos previos
- CLI de Azure, versión
2.64.0o posteriores. Para la instalación o la actualización, consulte Instalación de la CLI de Azure. -
kubectlversión1.31.0o posterior. -
helmversión3.15.4o posterior. -
spinversión3.0.0o posterior. -
Node.js versión
21.6.2. - Un clúster de AKS existente Si no tiene ninguna, consulte Creación de un clúster de AKS.
Limitaciones
- El nodo
os-typede Kubernetes debe ser Linux. - No puede usar Azure Portal para implementar SpinKube en un clúster de AKS.
Implementación de SpinKube en un clúster existente
Conectarse al clúster AKS
Para configurar
kubectlpara conectarse a su clúster de Kubernetes, use el comandoaz aks get-credentials.az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
Implementar cert-manager
Si aún no ha implementado cert-manager en el clúster de AKS, puede instalarlo mediante la implementación de sus definiciones de recursos personalizados (CRD) seguidas del gráfico de Helm de cert-manager proporcionado a través del repositorio jetstack.
Implemente los CRD y el gráfico de Helm de
cert-managermediante el comandokubectl apply.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yamlAgregue y actualice el repositorio de Jetstack mediante los comandos
helm repo addyhelm repo update.helm repo add jetstack https://charts.jetstack.io helm repo updateInstale el gráfico de Helm de
cert-managermediante el comandohelm install.helm install \ cert-manager jetstack/cert-manager --version v1.14.3 \ --namespace cert-manager --create-namespace \ --wait
Implementación de runtime-class-manager (también conocida como KWasm)
runtime-class-manager (también conocido como KWasm) es responsable de implementar y administrar containerd-shim en los nodos de Kubernetes deseados.
Agregue el repositorio de Helm de KWasm mediante el comando
helm repo add.helm repo add kwasm http://kwasm.sh/kwasm-operator/Instale el operador KWasm mediante el comando
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
Aprovisionar containerd-shim-spin en nodos de Kubernetes
Una vez runtime-class-manager está instalado en el clúster de AKS, debe anotar los nodos de Kubernetes que deben poder ejecutar Spin Apps con kwasm.sh/kwasm-node=true. Puede usar kubectl annotate node para anotar todos los nodos o solo nodos específicos del clúster de AKS. En este ejemplo, anotamos todos los nodos del clúster de AKS con la anotación kwasm.sh/kwasm-node=true.
Aprovisione
containerd-shim-spinen todos los nodos del clúster de AKS mediante el comandokubectl annotate node --all.kubectl annotate node --all kwasm.sh/kwasm-node=trueDespués de anotar los nodos de Kubernetes,
runtime-class-managerusa un trabajo de Kubernetes para modificar los nodos deseados. Después de una implementación correcta decontainerd-shim-spin, los nodos se etiquetan con una etiquetakwasm.sh/kwasm-provisioned. Puede comprobar si los nodos deseados tienen asignada la etiquetakwasm.sh/kwasm-provisionedmediante el comandokubectl get nodes --show-labels.kubectl get nodes --show-labels
Implementación del spin-operator
spin-operator consta de dos definiciones de recursos personalizadas (CRD) que debe implementar en el clúster de AKS: RuntimeClass para spin y SpinAppExecutor.
Implemente los CRD y RuntimeClass para
spinmediante el comandokubectl 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.yamlImplemente
spin-operatormediante el comandohelm install.helm install spin-operator --version 0.5.0 \ --namespace spin-operator --create-namespace \ --wait oci://ghcr.io/spinframework/charts/spin-operatorCree un
SpinAppExecutoren el espacio de nombres predeterminado mediante el comandokubectl apply.kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml
Ejecución de una aplicación Spin en AKS
En esta sección, comprobará la instalación de SpinKube mediante la creación de una aplicación de Spin simple mediante la CLI de spin y JavaScript.
Creación de una nueva aplicación Spin
Cree una nueva aplicación Spin mediante el comando
spin newcon la plantillahttp-js.spin new -t http-js --accept-defaults hello-spinkubeVaya al directorio
hello-spinkubemediante el comandocd.cd hello-spinkubeInstale las dependencias mediante el comando
npm install.npm installUse la CLI de
spinpara crear una aplicación básica Hello, World.spin build
Creación de un registro de contenedor y autenticación de la CLI de spin
Spin Apps se empaqueta como artefactos de OCI y se distribuye a través de un registro compatible con OCI, como Azure Container Registry (ACR). Cree una instancia de ACR mediante el comando
az acr create.az acr create --name <acr-name> --resource-group <resource-group-name> --location <location> --sku Basic --admin-enabled trueObtenga el punto de conexión del servidor de inicio de sesión de ACR y la contraseña de administrador mediante los comandos
az acr showyaz 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)Autentique la CLI de
spinmediante el comandospin registry login.spin registry login -u $ACR_NAME -p $ACR_PASSWORD $ACR_LOGIN_SERVER
Empaquetar, distribuir e implementar la aplicación App
Ahora que la CLI de
spinse autentica en la instancia de ACR, puede empaquetar y distribuir la aplicación Spin mediante el comandospin registry pushseguido de una referencia de artefacto de OCI (que sigue al esquema de nomenclatura<your acr login server>/<repository-name>:<tag>).spin registry push $ACR_LOGIN_SERVER/hello-spinkube:0.0.1Cree un secreto de Kubernetes de tipo
docker-registrypara hacer referencia durante la implementación de la aplicación Spin en el clúster de AKS mediante el comandokubectl create secret. En este ejemplo, el secreto se llamaspinkube-on-aks.kubectl create secret docker-registry spinkube-on-aks \ --docker-server=$ACR_LOGIN_SERVER \ --docker-username=$ACR_NAME\ --docker-password $ACR_PASSWORDCree los manifiestos de implementación de Kubernetes necesarios mediante el comando
spin kube scaffold.spin kube scaffold --from $ACR_LOGIN_SERVER/hello-spinkube:0.0.1 -s spinkube-on-aks > spinapp.yamlEl archivo
spinapp.yamlcontiene una instancia preconfigurada del CRDSpinApp, que debería tener este aspecto: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-aksImplemente la aplicación Spin en el clúster de AKS mediante el comando
kubectl apply.kubectl apply -f spinapp.yaml
Exploración de la aplicación Spin en AKS
Recuperar la lista de Spin Apps
Recuperar la lista de Spin Apps mediante el comando
kubectl get spinapps.kubectl get spinappsNAME READY DESIRED EXECUTOR hello-spinkube 2 2 containerd-shim-spin
Recuperación de los primitivos de Kubernetes creados por spin-operator
Tras la implementación, spin-operator crea primitivos de Kubernetes subyacentes, como un servicio, una implementación y los pods correspondientes.
Recupere la lista de servicios mediante el comando
kubectl get service.kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-spinkube ClusterIP 10.43.35.78 <none> 80/TCP 24sRecupere la lista de implementaciones mediante el comando
kubectl get deployment.kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE hello-spinkube 2/2 2 2 38sRecupere la lista de pods mediante el comando
kubectl get pod.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
Invocación de la aplicación Spin
Para invocar la aplicación Spin, configure el reenvío de puertos al servicio aprovisionado por spin-operator y use curl para enviar solicitudes HTTP.
Establezca el enrutamiento de puertos al servicio
hello-spinkubemediante el comandokubectl port-forward.kubectl port-forward svc/hello-spinkube 8080:80Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80Abra una nueva instancia de terminal y use el comando
curlsiguiente para enviar una solicitud HTTP alocalhost:8080.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
Limpieza de recursos
Quite la aplicación Spin del clúster de AKS mediante el comando
kubectl delete.kubectl delete spinapp hello-spinkubeQuite el secreto docker-registry (spinkube-on-aks) mediante el comando
kubectl delete secret.kubectl delete secret spinkube-on-aksQuite la instancia de ACR que creó como parte de este tutorial mediante el comando
az acr delete.az acr delete --name <acr-name> --resource-group <resource-group-name> --yesQuite los componentes SpinKube del clúster de AKS mediante los siguientes comandos.
# 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
Pasos siguientes
En este artículo, ha aprendido a implementar SpinKube en Azure Kubernetes Service (AKS) para ejecutar cargas de trabajo WebAssembly (Wasm) sin servidor. Para implementar más cargas de trabajo en AKS, consulte los artículos siguientes: