Questa pagina descrive le opzioni dello scheduler e come configurare i vincoli di pianificazione dei pod predefiniti nei cluster Google Distributed Cloud solo software per bare metal.
Google Distributed Cloud fornisce una serie di funzionalità Kubernetes standard che puoi utilizzare per controllare la pianificazione dei pod, ad esempio:
kube-scheduler- Vincoli di distribuzione della topologia
- Utilità di pianificazione personalizzata predefinita
Per informazioni sui vincoli di distribuzione della topologia dei pod in Kubernetes, consulta Kubernetes Scheduler nella documentazione di Kubernetes.
Prima di iniziare
Prima di configurare la distribuzione predefinita dei pod, assicurati che ogni nodo del cluster abbia le
etichette di topologia corrette. Puoi utilizzare l'API Nodepool.Spec.TaintsAndLabels
per applicare le etichette. L'etichettatura manuale dei nodi con kubectl label offre maggiore
flessibilità, ma richiede l'etichettatura manuale quando aggiungi un nuovo nodo al
cluster.
Configura lo scheduler personalizzato predefinito {#:config-default}
Nodi etichetta
Aggiungi etichette di topologia ai file YAML del cluster e del pool di nodi. L'esempio seguente presuppone che due nodepool worker si trovino in rack diversi e che i nodi del control plane si trovino in
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: rack2Applica la configurazione del cluster aggiornata.
bmctl update cluster -c CLUSTER_NAMESostituisci
CLUSTER_NAMEcon il nome del tuo cluster.Attendi che l'etichetta
topology.k8s.io/rackvenga propagata a tutti i nodi del cluster.
Attiva i vincoli di distribuzione dei pod predefiniti
Aggiungi l'annotazione
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enableal file YAML del cluster.Aggiungi la sezione
schedulerConfigurationsottocluster.spec.controlPlanenel file YAML del 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: ListApplica la configurazione del cluster aggiornata.
bmctl update cluster -c CLUSTER_NAMESostituisci
CLUSTER_NAMEcon il nome del tuo cluster.Attendi il completamento della riconciliazione del cluster. Monitora
cluster.status.clusterStatefinché non viene visualizzatoRunning. Durante questa procedura viene eseguito un jobcontrol-plane-updateper ogni nodo del control plane.
Verifica la configurazione della distribuzione dei pod
Crea un deployment di test con cinque repliche.
Osserva la distribuzione dei pod. La differenza nel numero di pod su
nodepool-rack1enodepool-rack2deve essere esattamente pari a uno.Verifica il file
kube-scheduler-profile.configsu ogni nodo del control plane. Il file, che si trova in/etc/kubernetes/kube-scheduler-profile.config, deve contenere la configurazione di distribuzione della topologia dacluster.spec.
Risoluzione dei problemi
Per diagnosticare e risolvere i problemi relativi alla diffusione predefinita dei pod, controlla quanto segue:
- Controlla
BareMetalMachine.Status.ControlPlaneComponentsper lo stato della funzionalità. - Esamina i log di
cluster-operatorecap-controller-managerper trovare gli eventi pertinenti. - Se i pod statici
kube-schedulersi arrestano in modo anomalo, verifica che la configurazione dello scheduler sia corretta nel file YAML del cluster.
Passaggi successivi
- Scopri di più sui vincoli di distribuzione della topologia dei pod nella documentazione di Kubernetes.
- Consulta l'articolo Risolvere i problemi dello scheduler Kubernetes se riscontri problemi.