En este documento, se describe cómo configurar la entrega de Knative que se ejecuta en Google Kubernetes Engine (GKE) a fin de usar GKE Sandbox para mejorar el aislamiento de las cargas de trabajo del kernel del host.
Objetivos
- Aprende a habilitar GKE Sandbox en tu clúster de entrega de Knative.
- Implementa un servicio especificado para que se ejecute en nodos de zona de pruebas.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- En este instructivo, se supone que tienes instalado y configurado en tu clúster la entrega de Knative.
- Asegúrate de que el entorno de la línea de comandos esté configurado y las herramientas estén actualizadas:
Agrega un grupo de nodos de GKE Sandbox a un clúster de entrega de Knative existente
Sigue los pasos a fin de agregar un grupo de nodos habilitado para usar GKE Sandbox en tu clúster de entrega de Knative existente. Aquí es donde se ejecutan las cargas de trabajo que habilitas para usar GKE Sandbox.
Implementa una carga de trabajo en el grupo de nodos de GKE Sandbox
Una vez que tengas un clúster de GKE con un grupo de nodos habilitado para GKE Sandbox, actualiza la configuración de entrega de Knative. Además, actualiza cada especificación de servicio para usar los nodos nuevos. Estas actualizaciones solo se necesitan una vez.
Habilita la marca de función de la clase de tiempo de ejecución
En esta sección, habilitarás la clase del entorno de ejecución de Kubernetes mediante las marcas de función y extensión de Knative en el ConfigMap de config-features
en el espacio de nombres knative-serving
. Para habilitar la clase de tiempo de ejecución, establece la marca de ConfigMap kubernetes.podspec-runtimeclassname
en enabled
. Para obtener más información, consulta Clase de entorno de ejecución de Kubernetes y Configura marcas en la documentación de Funciones y extensiones de Knative.
Abre el ConfigMap
config-features
para editar:kubectl edit configmap config-features -n knative-serving
Agrega la marca de función
kubernetes.podspec-runtimeclassname: enabled
al campodata
.Como alternativa a los pasos anteriores, puedes ejecutar el siguiente comando para aplicar un parche a esta marca en tus funciones de Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
A fin de verificar los cambios, ejecuta el siguiente comando para ver el ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
El ConfigMap debería verse de la siguiente manera:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Implementa un servicio configurado para ejecutarse en GKE Sandbox
Después de habilitar la marca de función de la clase de entorno de ejecución, puedes crear Services que especifiquen un runtimeClassName
en la especificación. Establece runtimeClassName
en gvisor
para indicar que un servicio debe ejecutarse en el grupo de nodos de GKE Sandbox.
Ejecuta el siguiente comando para implementar una aplicación de Knative "Hello World":
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOF
Si la función de nombre de clase del entorno de ejecución de Kubernetes está habilitada, el comando debería finalizar sin errores.
Ejecuta el siguiente comando para obtener los pods de tu servicio y su clase de entorno de ejecución configurada:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
El resultado debe parecerse al siguiente:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
¿Qué sigue?
Después de verificar que puedes implementar apps no confiables en tu grupo de nodos de GKE Sandbox recién creado, tienes todo listo para agregar runtimeClassName: gvisor
a las
especificaciones de Kubernetes de otros servicios no confiables que quieras ejecutar en
los grupos de nodos de GKE Sandbox.
Lecturas adicionales:
- Documentación de GKE Sandbox para comprender las limitaciones que pueden afectar la compatibilidad con algunos servicios.
- Documentos de gVisor sobre la implementación de servicios de Knative para obtener una guía más detallada sobre la implementación de apps de Knative en gVisor (también llamada GKE Sandbox).