Ce document explique comment configurer la diffusion Knative s'exécutant sur Google Kubernetes Engine (GKE) pour utiliser GKE Sandbox afin d'améliorer l'isolation de la charge de travail par rapport au noyau hôte.
Objectifs
- Découvrez comment activer GKE Sandbox sur votre cluster de diffusion Knative.
- Déployer un service spécifié pour s'exécuter sur des nœuds en bac à sable
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Dans ce tutoriel, nous partons du principe que la diffusion Knative est installée et configurée sur votre cluster.
- Assurez-vous que votre environnement de ligne de commande est configuré et que les outils sont à jour :
Ajouter un pool de nœuds GKE Sandbox à un cluster de diffusion Knative existant
Suivez les étapes pour ajouter un pool de nœuds activé pour utiliser GKE Sandbox à votre cluster de diffusion Knative existant. C'est là que les charges de travail pour lesquelles vous choisissez d'utiliser GKE Sandbox s'exécutent.
Déployer une charge de travail sur le pool de nœuds GKE Sandbox
Une fois que vous disposez d'un cluster GKE avec un pool de nœuds compatible avec GKE Sandbox, mettez à jour votre configuration de diffusion Knative. Mettez également à jour chaque spécification de service pour utiliser les nouveaux nœuds. Ces mises à jour ne sont requises qu'une seule fois.
Activer le flag de fonctionnalité de classe d'exécution
Dans cette section, vous activez la classe d'exécution Kubernetes à l'aide des options de fonctionnalité et d'extension Knative dans le fichier ConfigMap config-features
de l'espace de noms knative-serving
. Pour activer la classe d'exécution, définissez l'option ConfigMap kubernetes.podspec-runtimeclassname
sur enabled
. Pour en savoir plus, consultez les pages Classe d'exécution Kubernetes et Configurer des options dans la documentation Fonctionnalités et extensions de Knative.
Ouvrez le fichier ConfigMap
config-features
pour le modifier :kubectl edit configmap config-features -n knative-serving
Ajoutez le flag de fonctionnalité
kubernetes.podspec-runtimeclassname: enabled
au champdata
.Au lieu des étapes précédentes, vous pouvez exécuter la commande suivante pour appliquer un correctif à cet indicateur à vos fonctionnalités Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Pour vérifier vos modifications, exécutez la commande suivante pour afficher le ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
Le ConfigMap doit se présenter comme suit:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Déployer un service configuré pour s'exécuter dans GKE Sandbox
Après avoir activé le flag de fonctionnalité de classe d'exécution, vous pouvez créer des services qui spécifient un runtimeClassName
dans la spécification. Définissez runtimeClassName
sur gvisor
pour indiquer qu'un service doit s'exécuter sur le pool de nœuds GKE Sandbox.
Déployez une application Knative "Hello World" en exécutant la commande suivante:
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 fonctionnalité de nom de classe d'exécution Kubernetes est activée, la commande devrait se terminer sans erreur.
Exécutez la commande suivante pour exécuter les pods de votre service et leur classe d'exécution configurée:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
La sortie doit ressembler à ceci :
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
Étapes suivantes
Après avoir vérifié que vous pouvez déployer des applications non approuvées sur le pool de nœuds GKE Sandbox que vous venez de créer, vous pouvez ajouter runtimeClassName: gvisor
aux spécifications Kubernetes pour les autres services non approuvés que vous souhaitez exécuter sur des pools de nœuds GKE Sandbox.
Autres ressources:
- La documentation de GKE Sandbox permet de comprendre les limites susceptibles d'affecter la compatibilité avec certains services.
- Documentation gVisor sur le déploiement des services Knative pour obtenir un guide plus détaillé sur le déploiement d'applications Knative sur gVisor (également appelé GKE Sandbox).