Configurare la pianificazione

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:

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

  1. 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: rack2
    
  2. Applica la configurazione del cluster aggiornata.

    bmctl update cluster -c CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del tuo cluster.

  3. Attendi che l'etichetta topology.k8s.io/rack venga propagata a tutti i nodi del cluster.

Attiva i vincoli di distribuzione dei pod predefiniti

  1. Aggiungi l'annotazione preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable al file YAML del cluster.

  2. Aggiungi la sezione schedulerConfiguration sotto cluster.spec.controlPlane nel 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: List
    
  3. Applica la configurazione del cluster aggiornata.

    bmctl update cluster -c CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del tuo cluster.

  4. Attendi il completamento della riconciliazione del cluster. Monitora cluster.status.clusterState finché non viene visualizzato Running. Durante questa procedura viene eseguito un job control-plane-update per ogni nodo del control plane.

Verifica la configurazione della distribuzione dei pod

  1. Crea un deployment di test con cinque repliche.

  2. Osserva la distribuzione dei pod. La differenza nel numero di pod su nodepool-rack1 e nodepool-rack2 deve essere esattamente pari a uno.

  3. Verifica il file kube-scheduler-profile.config su 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 da cluster.spec.

Risoluzione dei problemi

Per diagnosticare e risolvere i problemi relativi alla diffusione predefinita dei pod, controlla quanto segue:

  1. Controlla BareMetalMachine.Status.ControlPlaneComponents per lo stato della funzionalità.
  2. Esamina i log di cluster-operator e cap-controller-manager per trovare gli eventi pertinenti.
  3. Se i pod statici kube-scheduler si arrestano in modo anomalo, verifica che la configurazione dello scheduler sia corretta nel file YAML del cluster.

Passaggi successivi