Cette page explique comment appliquer des classes de calcul par défaut aux pods Google Kubernetes Engine (GKE) qui ne sélectionnent pas explicitement de classe de calcul. Cette page explique comment définir une classe de calcul par défaut dans un espace de noms et pour un cluster entier. Ces instructions s'adressent aux administrateurs de cluster qui souhaitent réduire les frais généraux manuels causés par la configuration individuelle des charges de travail et des nœuds.
Avant de lire cette page, familiarisez-vous avec les classes de calcul personnalisées.
À propos des classes de calcul par défaut
Vous pouvez configurer des clusters GKE ou des espaces de noms spécifiques pour qu'ils disposent d'une classe de calcul par défaut. La classe par défaut que vous configurez s'applique à tous les pods de ce cluster ou de cet espace de noms qui ne sélectionnent pas une autre classe de calcul. Lorsque vous déployez un pod qui ne sélectionne pas de classe de calcul, GKE applique les classes de calcul par défaut dans l'ordre suivant :
- Si l'espace de noms possède une classe de calcul par défaut, GKE modifie la spécification du pod pour sélectionner cette classe de calcul.
- Si l'espace de noms ne dispose pas de classe de calcul par défaut, la classe par défaut au niveau du cluster s'applique. GKE ne modifie pas la spécification du pod.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Disposer d'un cluster GKE Autopilot ou Standard exécutant une version qui permet de définir une classe de calcul par défaut au niveau du cluster ou de l'espace de noms. Pour en savoir plus, consultez la section Exigences.
Pour les clusters standards, activez le provisionnement automatique des nœuds ou l'autoscaler de cluster.
Si vous souhaitez définir une classe de calcul personnalisée comme classe par défaut pour un espace de noms, déployez une classe de calcul personnalisée.
Conditions requises
- Pour définir une classe de calcul comme classe par défaut au niveau du cluster, celui-ci doit exécuter GKE version 1.33.1-gke.1744000 ou ultérieure.
- Pour définir une classe de calcul comme classe par défaut au niveau de l'espace de noms uniquement pour les pods non-DaemonSet, le cluster doit exécuter GKE version 1.33.1-gke.1788000 ou ultérieure.
Rôles et autorisations requis
Pour obtenir les autorisations nécessaires pour configurer des classes de calcul par défaut au niveau du cluster ou de l'espace de noms, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet Google Cloud :
-
Développeur Kubernetes Engine (
roles/container.developer
) -
Mettre à jour la classe de calcul par défaut au niveau du cluster :
Administrateur de cluster Kubernetes Engine (
roles/container.clusterAdmin
)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ces rôles prédéfinis contiennent les autorisations requises pour configurer les classes de calcul par défaut au niveau du cluster ou de l'espace de noms. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Vous devez disposer des autorisations suivantes pour configurer des classes de calcul par défaut au niveau du cluster ou de l'espace de noms :
-
container.customResourceDefinitions.create
-
container.customResourceDefinitions.update
-
container.customResourceDefinitions.get
-
container.customResourceDefinitions.list
-
container.namespaces.get
-
container.namespaces.list
-
container.pods.get
-
container.nodes.get
-
container.nodes.list
-
container.deployments.create
-
container.deployments.get
-
Ajoutez des libellés aux espaces de noms :
container.namespaces.update
-
Activez la classe de calcul par défaut au niveau du cluster :
container.clusters.update
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer une classe de calcul par défaut pour un espace de noms
Vous pouvez annoter n'importe quel espace de noms Kubernetes de votre cluster avec le nom d'une classe de calcul à utiliser par défaut. Si un pod déployé dans cet espace de noms ne sélectionne pas déjà une classe de calcul, GKE modifie la spécification du pod pour sélectionner la classe par défaut dans l'espace de noms. Vous pouvez définir n'importe quelle classe de calcul personnalisée ou intégrée comme classe par défaut.
Pour appliquer une classe de calcul à tous les pods d'un espace de noms par défaut, ajoutez le libellé
cloud.google.com/default-compute-class
à cet espace de noms :kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
Remplacez les éléments suivants :
NAMESPACE_NAME
: nom de l'espace de noms à mettre à jour.COMPUTECLASS_NAME
: nom de la classe de calcul à définir par défaut pour l'espace de noms.
Si la commande échoue et affiche le message d'erreur suivant, cela signifie que l'espace de noms possède déjà une classe de calcul par défaut :
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
Pour résoudre cette erreur, mettez à jour la classe de calcul par défaut pour l'espace de noms.
Pour appliquer une classe de calcul par défaut à tous les pods non DaemonSet d'un espace de noms, ajoutez le libellé
cloud.google.com/default-compute-class-non-daemonset
à cet espace de noms :kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
Si la commande échoue avec le message d'erreur suivant, cela signifie que l'espace de noms dispose déjà d'une classe de calcul par défaut pour les pods non DaemonSet :
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
Pour résoudre cette erreur, mettez à jour la classe de calcul par défaut pour l'espace de noms.
Mettre à jour la classe de calcul par défaut existante dans un espace de noms
Pour remplacer la classe de calcul par défaut existante pour un espace de noms, exécutez l'une des commandes suivantes :
Mettez à jour la classe de calcul par défaut pour tous les pods de l'espace de noms :
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
Remplacez les éléments suivants :
NAMESPACE_NAME
: nom de l'espace de noms à mettre à jour.COMPUTECLASS_NAME
: nom de la classe de calcul à définir comme nouvelle valeur par défaut pour l'espace de noms.
Remplacez la classe de calcul par défaut pour les pods non DaemonSet de l'espace de noms :
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
Configurer une classe de calcul par défaut pour un cluster
Cette section vous explique comment définir une classe de calcul par défaut pour votre cluster. Pour les classes de calcul par défaut au niveau du cluster, ne spécifiez pas manuellement les rejets et les libellés de nœuds pour les pools de nœuds existants dans le cluster.
GKE ne met pas à l'échelle les pools de nœuds qui présentent des rejets de nœuds pour les classes de calcul. Si vous ajoutez manuellement un libellé pour la classe de calcul default
, GKE peut mettre à l'échelle ce pool de nœuds. Toutefois, cette configuration manuelle n'est pas nécessaire pour utiliser une classe de calcul par défaut au niveau du cluster.
Pour activer la définition d'une classe de calcul par défaut au niveau du cluster, exécutez la commande
gcloud container clusters update
avec l'option--enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterCONTROL_PLANE_LOCATION
: emplacement du plan de contrôle de votre cluster, par exempleus-central1
.
Vous pouvez également spécifier cet indicateur lorsque vous créez un cluster Autopilot ou Standard.
Enregistrez le fichier manifeste suivant, qui définit un
ComputeClass
nommédefault
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: true
Cet exemple de fichier manifeste demande des nœuds qui utilisent des instances N4. Si les instances N4 ne sont pas disponibles, la classe de calcul demande des instances N2 à la place. Vous pouvez configurer la classe de calcul
default
avec l'un des champs disponibles dans la définition de ressource personnalisée ComputeClass.Appliquez le fichier manifeste à votre cluster :
kubectl apply -f PATH_TO_MANIFEST
Remplacez
PATH_TO_MANIFEST
par le chemin d'accès au fichier manifeste de la classe de calcul.
Une fois que vous avez défini une classe de calcul par défaut au niveau du cluster, GKE met à l'échelle les pools de nœuds qui répondent aux deux exigences suivantes :
- La configuration des nœuds est identique à celle de la classe de calcul
default
. - Le pool de nœuds ne comporte aucun taint ni aucune étiquette pour une autre classe de calcul.
GKE peut mettre à l'échelle les pools de nœuds qui comportent un rejet et une étiquette pour la classe de calcul
default
.
Par exemple, si la classe de calcul default
spécifie la série de machines N4, GKE peut mettre à l'échelle un pool de nœuds existant qui utilise des instances N4 et ne comporte pas de taints ni de libellés pour une autre classe de calcul.
Vérifier le comportement de la classe de calcul par défaut
Pour vérifier que la classe de calcul par défaut que vous avez définie pour un espace de noms ou pour un cluster fonctionne comme prévu, procédez comme suit :
Consultez l'exemple de déploiement suivant :
Ce déploiement ne demande pas explicitement de classe de calcul.
Créez le déploiement :
kubectl apply --namespace=NAMESPACE_NAME \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
Remplacez
NAMESPACE_NAME
par l'un des éléments suivants, selon ce que vous souhaitez vérifier :- Nom d'un espace de noms qui possède une classe de calcul par défaut.
- Nom d'un espace de noms qui n'a pas de classe de calcul par défaut.
GKE peut mettre un certain temps à créer des nœuds pour exécuter les pods.
Identifiez les nœuds qui exécutent les pods à partir de l'exemple de déploiement :
kubectl get pods --namespace=NAMESPACE_NAME \ --selector=app=hello -o=wide
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-7795fbf856-58n5l 1/1 Running 0 9m21s 10.52.2.3 gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d <none> <none>
Obtenez les libellés de nœuds :
kubectl get node NODE_NAME --show-labels \ | grep "cloud.google.com/compute-class"
Remplacez
NODE_NAME
par le nom du nœud obtenu à l'étape précédente.Le résultat ressemble à ce qui suit :
NODE_NAME Ready <none> 22m v1.32.4-gke.1236007 # lines are omitted from this output cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
La valeur de
COMPUTECLASS_NAME
est l'une des suivantes :- Classe de calcul par défaut au niveau du cluster :
default
pour les nœuds créés par GKE Autopilot ou par le provisionnement automatique des nœuds. Il est possible que les nœuds des pools de nœuds existants créés manuellement ne comportent pas le libellécloud.google.com/compute-class
. - Classe de calcul par défaut au niveau de l'espace de noms : nom de la classe de calcul que vous avez configurée comme classe par défaut de l'espace de noms.
- Classe de calcul par défaut au niveau du cluster :
Désactiver la classe de calcul par défaut
Pour désactiver la classe de calcul par défaut dans un espace de noms ou un cluster, procédez comme suit :
Pour désactiver la classe de calcul par défaut au niveau de l'espace de noms pour tous les pods, supprimez l'étiquette
cloud.google.com/default-compute-class
de l'espace de noms :kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
Le caractère
-
à la fin de la clé de libellé supprime tous les libellés associés à cette clé de l'objetNamespace
dans l'API Kubernetes.Pour désactiver la classe de calcul par défaut au niveau de l'espace de noms pour les pods non DaemonSet, supprimez l'étiquette
cloud.google.com/default-compute-class-non-daemonset
de l'espace de noms :kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
Pour désactiver la classe de calcul par défaut au niveau du cluster, utilisez la commande
gcloud container clusters update
avec l'option--no-enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
Étapes suivantes
- En savoir plus sur les classes de calcul personnalisées dans GKE