Planung konfigurieren

Auf dieser Seite werden Scheduler-Optionen und die Konfiguration von Standardeinschränkungen für die Pod-Planung in Ihren Google Distributed Cloud-Clustern (nur Software) für Bare Metal beschrieben.

Google Distributed Cloud bietet eine Reihe von Standard-Kubernetes-Funktionen, mit denen Sie die Planung von Pods steuern können, z. B.:

Informationen zu Pod-Topologie-Verteilungsbeschränkungen in Kubernetes finden Sie in der Kubernetes-Dokumentation unter Kubernetes Scheduler.

Hinweis

Bevor Sie die Standard-Pod-Verteilung konfigurieren, müssen Sie dafür sorgen, dass jeder Knoten in Ihrem Cluster die richtigen Topologielabels hat. Sie können die Nodepool.Spec.TaintsAndLabels API verwenden, um Labels anzuwenden. Das manuelle Labeln von Knoten mit kubectl label bietet mehr Flexibilität, erfordert aber manuelles Labeln, wenn Sie dem Cluster einen neuen Knoten hinzufügen.

Standardmäßigen benutzerdefinierten Scheduler konfigurieren {#:config-default}

Knoten labeln

  1. Fügen Sie Ihren Cluster- und Nodepool-YAML-Dateien Topologie-Labels hinzu. Im folgenden Beispiel wird davon ausgegangen, dass sich zwei Worker-Knotenpools in verschiedenen Racks befinden und sich die Knoten der Steuerungsebene in rack1 befinden.

    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. Wenden Sie die aktualisierte Clusterkonfiguration an.

    bmctl update cluster -c CLUSTER_NAME
    

    Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.

  3. Warten Sie, bis das Label topology.k8s.io/rack auf alle Knoten im Cluster übertragen wurde.

Standardmäßige Einschränkungen für die Pod-Verteilung aktivieren

  1. Fügen Sie der YAML-Datei für Ihren Cluster die Annotation preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable hinzu.

  2. Fügen Sie in der YAML-Datei für den Cluster den Abschnitt schedulerConfiguration unter cluster.spec.controlPlane hinzu.

    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. Wenden Sie die aktualisierte Clusterkonfiguration an.

    bmctl update cluster -c CLUSTER_NAME
    

    Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.

  4. Warten Sie, bis die Clusterabstimmung abgeschlossen ist. Beobachten Sie cluster.status.clusterState, bis Running angezeigt wird. Während dieses Vorgangs wird für jeden Knoten der Steuerungsebene ein control-plane-update-Job ausgeführt.

Konfiguration für die Verteilung von Pods prüfen

  1. Erstellen Sie ein Test-Deployment mit fünf Replikaten.

  2. Beobachten Sie die Pod-Verteilung. Die Anzahl der Pods auf nodepool-rack1 und nodepool-rack2 sollte sich um genau eins unterscheiden.

  3. Prüfen Sie die Datei kube-scheduler-profile.config auf jedem Knoten der Steuerungsebene. Die Datei unter /etc/kubernetes/kube-scheduler-profile.config muss die Konfiguration für die Topologieverteilung aus cluster.spec enthalten.

Fehlerbehebung

So diagnostizieren und beheben Sie Probleme mit der Standard-Pod-Verteilung:

  1. Sehen Sie im BareMetalMachine.Status.ControlPlaneComponents nach, welchen Status die Funktion hat.
  2. Prüfen Sie die Logs von cluster-operator und cap-controller-manager auf relevante Ereignisse.
  3. Wenn kube-scheduler-Pods abstürzen, prüfen Sie, ob die Scheduler-Konfiguration in der YAML-Datei des Clusters korrekt ist.

Nächste Schritte