Creación de grupos de nodos de Interfaz del sistema de WebAssembly (WASI) en Azure Kubernetes Service (AKS) para ejecutar la carga de trabajo de WebAssembly (Wasm) (versión preliminar)
WebAssembly (Wasm) es un formato binario optimizado para una descarga rápida y una velocidad de ejecución máxima en un entorno de ejecución Wasm. Un tiempo de ejecución de Wasm está diseñado para ejecutarse en una arquitectura de destino y ejecutar componentes Wasm en un espacio aislado, aislado del equipo host, en un rendimiento casi nativo. De forma predeterminada, los componentes Wasm no pueden acceder a los recursos del host fuera del espacio aislado a menos que se permita explícitamente. Por ejemplo, los componentes Wasm no pueden comunicarse a través de sockets, recibir o enviar tráfico HTTP, o incluso para acceder a cosas como variables de entorno sin aprobación explícita. El estándar Interfaz del sistema de WebAssembly (WASI) define una API para que los entornos de ejecución Wasm proporcionen acceso a los componentes de Wasm al entorno y a los recursos fuera del host mediante un modelo de capacidades.
Importante
Los grupos de nodos WASI ahora usan Correcciones de compatibilidad en contenedores SpinKube para ejecutar cargas de trabajo de Wasm. Anteriormente, AKS usaba Krustlet para permitir que los módulos Wasm se ejecutasen en Kubernetes. Si sigue usando grupos de nodos WASI basados en Krustlet, puede migrar a correcciones de compatibilidad (shims) containerd mediante la creación de un nuevo grupo de nodos WASI y la migración de las cargas de trabajo al nuevo grupo de nodos.
Debe tener instalada la versión más reciente de la CLI de Azure.
Instalación de la versión preliminar de la extensión de la CLI de Azure en versión preliminar de AKS
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Ejecute el siguiente comando para instalar la extensión de versión preliminar de AKS:
az extension add --name aks-preview
Ejecute el siguiente comando para actualizar a la versión más reciente de la extensión publicada:
az extension update --name aks-preview
Registre la marca de la característica WasmNodePoolPreview
con el comando WasmNodePoolPreview
, como se muestra en el siguiente ejemplo:
az feature register --namespace "Microsoft.ContainerService" --name "WasmNodePoolPreview"
Tarda unos minutos en que el estado muestre Registrado. Para comprobar el estado de registro se usa el comandoaz feature show:
az feature show --namespace "Microsoft.ContainerService" --name "WasmNodePoolPreview"
Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register:
az provider register --namespace Microsoft.ContainerService
- Actualmente, los grupos de nodos WASI solo admiten aplicaciones Spin, que utilizan el entorno de ejecución Wasmtime y contenedores nativos de Linux.
- El operador SpinKube no se admite en grupos de nodos Wasm/WASI.
- Los grupos de nodos Wasm/WASI no se pueden usar para el grupo de nodos del sistema.
- El tipo de sistema operativo de los grupos de nodos Wasm/WASI debe ser Linux.
- No se puede usar Azure Portal para crear grupos de nodos Wasm/WASI.
Para agregar un grupo de nodos Wasm/WASI, utilice el comando az aks node pool add. En el ejemplo siguiente, se crea un grupo de nodos WASI llamado mywasipool con un nodo.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mywasipool \
--node-count 1 \
--workload-runtime WasmWasi
Nota
El valor predeterminado del parámetro workload-runtime es ocicontainer. Para crear un grupo de nodos que ejecute cargas de trabajo de contenedor, omita el parámetro workload-runtime o establezca el valor en ocicontainer.
Compruebe el valor de workloadRuntime mediante az aks nodepool show
. Por ejemplo:
az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n mywasipool --query workloadRuntime
En la salida de ejemplo siguiente, se muestra que mywasipool tiene el tipo de workloadRuntime establecido en WasmWasi.
az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n mywasipool --query workloadRuntime
"WasmWasi"
Para configurar kubectl
para conectarse a su clúster de Kubernetes, use el comando az aks get-credentials. El siguiente comando:
az aks get-credentials -n myakscluster -g myresourcegroup
Utilice kubectl get nodes
para mostrar los nodos del clúster.
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-mywasipool-12456878-vmss000000 Ready agent 123m v1.23.12 <WASINODE_IP> <none> Ubuntu 22.04.1 LTS 5.15.0-1020-azure containerd://1.5.11+azure-2
aks-nodepool1-12456878-vmss000000 Ready agent 133m v1.23.12 <NODE_IP> <none> Ubuntu 22.04.1 LTS 5.15.0-1020-azure containerd://1.5.11+azure-2
Use kubectl describe node
para mostrar las etiquetas de un nodo en el grupo de nodos WASI. En el ejemplo siguiente, se muestran los detalles de aks-mywasipool-12456878-vmss000000.
kubectl describe node aks-mywasipool-12456878-vmss000000
Name: aks-mywasipool-12456878-vmss000000
Roles: agent
Labels: agentpool=mywasipool
...
kubernetes.azure.com/wasmtime-spin-v2=true
...
Cree un archivo llamado spin.yaml con el siguiente contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wasm-spin
spec:
replicas: 1
selector:
matchLabels:
app: wasm-spin
template:
metadata:
labels:
app: wasm-spin
spec:
runtimeClassName: wasmtime-spin-v2
containers:
- name: spin-hello
image: ghcr.io/spinkube/containerd-shim-spin/examples/spin-rust-hello:v0.15.1
command: ["/"]
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: wasm-spin
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: wasm-spin
Nota
Si quiere obtener más información sobre cómo desarrollar aplicaciones spin, consulte la documentación de spin.
Utilice kubectl
para ejecutar la implementación de ejemplo:
kubectl apply -f spin.yaml
Use kubectl get svc
para obtener la dirección IP externa del servicio.
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 10m
wasm-spin LoadBalancer 10.0.133.247 <EXTERNAL-IP> 80:30725/TCP 2m47s
Acceda a la aplicación de ejemplo en http://EXTERNAL-IP/hello
. En el ejemplo siguiente se utiliza curl
.
curl http://EXTERNAL-IP/hello
Hello world from Spin!
Nota
Si la solicitud agota el tiempo de espera, use kubectl get pods
y kubectl describe pod <POD_NAME>
para comprobar el estado del pod. Si el pod no se está ejecutando, use kubectl get rs
y kubectl describe rs <REPLICA_SET_NAME>
para ver si el conjunto de réplicas tiene problemas para crear un nuevo pod.
Para quitar la implementación de ejemplo, use kubectl delete
.
kubectl delete -f spin.yaml
Para quitar el grupo de nodos Wasm/WASI, use az aks nodepool delete
.
az aks nodepool delete --name mywasipool -g myresourcegroup --cluster-name myakscluster
La clase RuntimeClass siguiente se admite en grupos de nodos WASI:
- wasmtime-spin-v2 (alias para wasmtime-spin-v0-15-1)
- wasmtime-spin-v1 (alias para wasmtime-spin-v0-8-0)
- wasmtime-spin-v0-15-1
- wasmtime-spin-v0-8-0
- wasmtime-spin-v0-5-1
- wasmtime-spin-v0-3-0
El sufijo -v0-15-1
, -v0-8-0
, -v0-5-1
y -v0-3-0
son las versiones de la corrección de compatibilidad de número. Puede encontrar las versiones admitidas de la corrección de compatibilidad en la tabla siguiente:
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: