En este documento se describe cómo configurar Knative Serving en Google Kubernetes Engine (GKE) para usar GKE Sandbox y mejorar el aislamiento de las cargas de trabajo del kernel del host.
Objetivos
- Consulta cómo habilitar GKE Sandbox en tu clúster de Knative Serving.
- Despliega un servicio especificado para que se ejecute en nodos aislados.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- En este tutorial se presupone que tienes Knative Serving instalado y configurado en tu clúster.
- Asegúrate de que el entorno de línea de comandos esté configurado y que las herramientas estén actualizadas:
Añadir un grupo de nodos de GKE Sandbox a un clúster de Knative Serving
Sigue los pasos para añadir un grupo de nodos habilitado para usar GKE Sandbox a tu clúster de Knative Serving. Aquí es donde se ejecutan las cargas de trabajo que elijas para usar GKE Sandbox.
Desplegar 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 Knative Serving. Además, actualiza cada especificación de servicio para que use los nuevos nodos. Estas actualizaciones solo son necesarias una vez.
Habilitar el flag de función de clase de tiempo de ejecución
En esta sección, habilitarás la clase de tiempo de ejecución de Kubernetes mediante las funciones y las marcas de extensión de Knative en el ConfigMap config-features
del espacio de nombres knative-serving
. Para habilitar la clase de tiempo de ejecución, asigna el valor enabled
al flag ConfigMap
kubernetes.podspec-runtimeclassname
. Para obtener más información, consulta Clase de tiempo de ejecución de Kubernetes y Configuración de marcas en la documentación de Funciones y extensiones de Knative.
Abre el
config-features
ConfigMap para editarlo:kubectl edit configmap config-features -n knative-serving
Añade el flag de función
kubernetes.podspec-runtimeclassname: enabled
al campodata
.Como alternativa a los pasos anteriores, puedes ejecutar el siguiente comando para aplicar este indicador a tus funciones de Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Para 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 ser similar al siguiente:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Desplegar un servicio configurado para ejecutarse en GKE Sandbox
Una vez que hayas habilitado el flag de función de clase de tiempo de ejecución, puedes crear servicios que especifiquen un runtimeClassName
en la especificación. Asigna el valor gvisor
al runtimeClassName
para indicar que un servicio debe ejecutarse en el grupo de nodos de GKE Sandbox.
Despliega una aplicación de Knative "Hello World" ejecutando el siguiente comando:
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 de tiempo de ejecución de Kubernetes está habilitada, el comando debería completarse sin errores.
Para obtener los pods de tu servicio en ejecución y su clase de tiempo de ejecución configurada, ejecuta el siguiente comando:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
La salida debería ser similar a la siguiente:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
Siguientes pasos
Después de verificar que puedes implementar aplicaciones no fiables en el nuevo grupo de nodos de GKE Sandbox que has creado, puedes añadir runtimeClassName: gvisor
a las especificaciones de Kubernetes de otros servicios no fiables que quieras ejecutar en grupos de nodos de GKE Sandbox.
Lecturas complementarias:
- Consulta la documentación de GKE Sandbox para conocer las limitaciones que pueden romper la compatibilidad con algunos servicios.
- Consulta la documentación de gVisor sobre el despliegue de servicios de Knative para obtener una guía más detallada sobre el despliegue de aplicaciones de Knative en gVisor (también llamado GKE Sandbox).