WebAssembly en RKE2
Introducción
WebAssembly fue originalmente creado para navegadores pero ultimamente se ha vuelto bastante popular del lado de servidor. En este laboratorio hablaremos un poco acerca de WebAssembly , sus ventajas y como ejecutarlo utlizando contenedores.
WebAssembly es una tecnologia universal que permite compilar aplicativos en varios lenguajes como c, rust y go en bytecode, para luego ser ejecutados directamente en navegadores y servidores.
Se pueden enumerar las siguientes ventajas/ Rapidez: Estos modulos inician considerablemente mas rapido que contenedores regulares. Livianos: Generalmente ocupan menos espacio y requieren menos recursos que contenedores regulares. Seguros: Estos modulos estan aislados del sistema operativo. Portabilidad: Los modulos de WASM puede ejecutarse en varios sistemas operativos y arquitecturas sin necesitas realizar cambios.
Objetivo
Objetivo General:
- El objetivo de este laboratorio es entender la tecnologia de webassembly e integrarla con nuestro cluster de rke2 por medio de un operador que nos facilita el trabajo de configuracion. Desplegando finalmente un aplicativo con esta tecnologia.
Laboratorio: Desplegar KwASM y probar aplicativo webassembly(cluster1)
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
- Haber realizado la validación de conexión y funcionamiento
- Finalizar las prácticas de laboratorio de las instalaciones de RKE2.
- Esta práctica utiliza cluster (cluster1).
Inicio de laboratorio
Esta práctica se ejecutará con el usuario student en el sistemas lab-X-bastion
student@lab-0-bastion:~>
- Habilitaremos el acceso al
cluster1defieniedo la variableKUBECONFIG. Utilizaremos elcluster1, para desplegar la KwASM.export KUBECONFIG=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml -
Antes de instalar KvASM hablemos un poco de esta herramienta: Es un operador de kubernetes que agregar soporte para WebAssembly a los nodos de un cluster de kubernetes, este operador modificar directamente cada nodo del cluster instalando binarios y configuraciones necesarias para poder ejecutar WebAseembly Kwasm
-
Primeramente vamos a agregar el repositorio de helm de esta herramienta.
helm repo add kwasm http://kwasm.sh/kwasm-operator/ - Vamos a proceder con la instalacion utlizando al configuracion por defecto.
helm install -n kwasm --create-namespace kwasm-operator kwasm/kwasm-operator - Esperamos a que finalice la instalacion, podemos revisar con el siguiente comando.
Esperamos a que el pod del operador se encuentre en estado running.
kubectl get pods -n kwasm - En este momento el operador ya se encuentra instalado pero no es funcional, para este proposito necesitamos colocarle un par de anotaciones a nuestros nodos workers de la siguiente manera.
kubectl annotate node lab-11-node1.c.mx-g01.internal kwasm.sh/kwasm-node=true kubectl annotate node lab-11-node2.c.mx-g01.internal kwasm.sh/kwasm-node=true - En este momento nuestro nodos estan listos para poder ejecutar aplicativos WebAssembly, vamos a ejecutar uno de ejemplo.
Primero necesitamos crear el runtime de sping para poder ejecutar cargas de trabajo , ejecutamos el siguiente comando.
echo ' apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: wasmtime-spin handler: spin' | kubectl apply -f - - Vamos a crear un namespace en donde deplegaremos nuestra carga de trabajo.
kubectl create ns webassembly - Finalmente vamos a crear un archivo llamado webdeployment.yaml con el siguiente contenido.
Es de notar que definimos un parametro que no habiamos visto antes que es el de runtimeClassName, aqui indicamos que ejecute el runtime de Webassembly que creamos antes. Finalmente creamos el deploy
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 containers: - name: spin-hello image: ghcr.io/deislabs/containerd-wasm-shims/examples/spin-rust-hello:latest command: ["/"]kubectl apply -f webdeployment.yaml -n webassembly - Validamos que se este ejecutando correctamente.
kubectl get pods -n webassemblyNAME READY STATUS RESTARTS AGE wasm-spin-9f65849d-cxkd2 1/1 Running 0 40s - Finalmente vamos a limpiar el ambiente
Eliminamos el deployment y el runtime
Le quitamos las anotaciones a los nodos
kubectl delete -f webdeployment.yaml -n webassembly kubectl delete RuntimeClass wasmtime-spinFinalmente eliminamos el operadorkubectl annotate node lab-11-node1.c.mx-g01.internal kwasm.sh/kwasm-node- kubectl annotate node lab-11-node2.c.mx-g01.internal kwasm.sh/kwasm-node-helm uninstall kwasm-operator -n kwasm