Ce document explique comment configurer Knative serving 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écouvrir comment activer GKE Sandbox sur votre cluster Knative serving.
- 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 Knative serving est installé et configuré 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 Knative serving existant
Suivez la procédure pour ajouter un pool de nœuds permettant d'utiliser GKE Sandbox à votre cluster Knative serving existant. C'est là que les charges de travail pour lesquelles vous activez l'utilisation de 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 Knative serving. 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 ConfigMap config-features
de l'espace de noms knative-serving
. Pour activer la classe d'exécution, vous définissez l'option ConfigMap kubernetes.podspec-runtimeclassname
sur enabled
. Pour en savoir plus, consultez les sections Classe d'exécution Kubernetes et Configurer les options dans la documentation décrivant les 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 corriger cette option dans 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
Une fois que vous avez 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 l'option de nom de classe d'exécution Kubernetes est activée, l'exécution de la commande devrait se terminer sans erreur.
Obtenez les pods de votre service en cours d'exécution et leur classe d'exécution configurée en exécutant la commande suivante :
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
Étape suivante
Après avoir vérifié que vous pouvez déployer des applications non approuvées sur votre pool de nœuds GKE Sandbox nouvellement créé, vous êtes prêt à 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 :
- Consultez la documentation de GKE Sandbox pour comprendre les limites pouvant entraîner une incompatibilité avec certains services.
- Consultez la Documentation de gVisor sur le déploiement des services Knative pour un guide plus détaillé concernant le déploiement d'applications Knative sur gVisor (également appelé GKE Sandbox).