Cette page décrit les options de l'ordonnanceur et explique comment configurer les contraintes d'ordonnancement de pods par défaut dans votre logiciel Google Distributed Cloud uniquement pour les clusters bare metal.
Google Distributed Cloud fournit un certain nombre de fonctionnalités Kubernetes standards que vous pouvez utiliser pour contrôler l'ordonnancement des pods, telles que :
Pour en savoir plus sur les contraintes de répartition de la topologie des pods dans Kubernetes, consultez Kubernetes Scheduler dans la documentation Kubernetes.
Avant de commencer
Avant de configurer la répartition des pods par défaut, assurez-vous que chaque nœud de votre cluster comporte les étiquettes de topologie appropriées. Vous pouvez utiliser l'API Nodepool.Spec.TaintsAndLabels pour appliquer des étiquettes. L'étiquetage manuel des nœuds avec kubectl label offre plus de flexibilité, mais nécessite un étiquetage manuel lorsque vous ajoutez un nœud au cluster.
Configurer l'ordonnanceur personnalisé par défaut {#:config-default}
Étiqueter les nœuds
Ajoutez des étiquettes de topologie à vos fichiers YAML de cluster et de pool de nœuds. L'exemple suivant suppose que deux pools de nœuds de calcul se trouvent dans des racks différents et que les nœuds du plan de contrôle se trouvent dans
rack1.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster spec: controlPlane: nodePoolSpec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack1 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack2 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack2Appliquez la configuration de cluster mise à jour.
bmctl update cluster -c CLUSTER_NAMERemplacez
CLUSTER_NAMEpar le nom de votre cluster.Attendez que l'étiquette
topology.k8s.io/racksoit propagée à tous les nœuds du cluster.
Activer les contraintes de répartition des pods par défaut
Ajoutez l'annotation
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enableà votre fichier YAML de cluster.Ajoutez la section
schedulerConfigurationsouscluster.spec.controlPlanedans votre fichier YAML de cluster.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster annotations: preview.baremetal.cluster.gke.io/custom-scheduler-configuration: enable spec: controlPlane: schedulerConfiguration: defaultTopologySpreadConstraint: defaultConstraints: - topologyKey: topology.k8s.io/rack whenUnsatisfiable: DoNotSchedule maxSkew: 1 defaultingType: ListAppliquez la configuration de cluster mise à jour.
bmctl update cluster -c CLUSTER_NAMERemplacez
CLUSTER_NAMEpar le nom de votre cluster.Attendez la fin de la réconciliation du cluster. Surveillez
cluster.status.clusterStatejusqu'à ce qu'il afficheRunning. Une tâchecontrol-plane-updates'exécute pour chaque nœud du plan de contrôle au cours de ce processus.
Vérifier la configuration de la répartition des pods
Créez un déploiement de test avec cinq répliques.
Observez la distribution des pods. La différence entre le nombre de pods sur
nodepool-rack1etnodepool-rack2doit être exactement de un.Vérifiez le fichier
kube-scheduler-profile.configsur chaque nœud du plan de contrôle. Le fichier, situé dans/etc/kubernetes/kube-scheduler-profile.config, doit contenir la configuration de répartition de la topologie decluster.spec.
Résoudre les problèmes
Pour diagnostiquer et résoudre les problèmes liés à la répartition des pods par défaut, vérifiez les points suivants :
- Consultez
BareMetalMachine.Status.ControlPlaneComponentspour connaître l'état de la fonctionnalité. - Examinez les journaux de
cluster-operatoretcap-controller-managerpour trouver les événements pertinents. - Si les pods statiques
kube-schedulerplantent, vérifiez que la configuration de l'ordonnanceur est correcte dans le fichier YAML du cluster.
Étape suivante
- Pour en savoir plus sur les contraintes de répartition de la topologie des pods dans la documentation Kubernetes.
- Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés à l'ordonnanceur Kubernetes.