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
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
rack1befinden.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: rack2Wenden Sie die aktualisierte Clusterkonfiguration an.
bmctl update cluster -c CLUSTER_NAMEErsetzen Sie
CLUSTER_NAMEdurch den Namen Ihres Clusters.Warten Sie, bis das Label
topology.k8s.io/rackauf alle Knoten im Cluster übertragen wurde.
Standardmäßige Einschränkungen für die Pod-Verteilung aktivieren
Fügen Sie der YAML-Datei für Ihren Cluster die Annotation
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enablehinzu.Fügen Sie in der YAML-Datei für den Cluster den Abschnitt
schedulerConfigurationuntercluster.spec.controlPlanehinzu.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: ListWenden Sie die aktualisierte Clusterkonfiguration an.
bmctl update cluster -c CLUSTER_NAMEErsetzen Sie
CLUSTER_NAMEdurch den Namen Ihres Clusters.Warten Sie, bis die Clusterabstimmung abgeschlossen ist. Beobachten Sie
cluster.status.clusterState, bisRunningangezeigt wird. Während dieses Vorgangs wird für jeden Knoten der Steuerungsebene eincontrol-plane-update-Job ausgeführt.
Konfiguration für die Verteilung von Pods prüfen
Erstellen Sie ein Test-Deployment mit fünf Replikaten.
Beobachten Sie die Pod-Verteilung. Die Anzahl der Pods auf
nodepool-rack1undnodepool-rack2sollte sich um genau eins unterscheiden.Prüfen Sie die Datei
kube-scheduler-profile.configauf jedem Knoten der Steuerungsebene. Die Datei unter/etc/kubernetes/kube-scheduler-profile.configmuss die Konfiguration für die Topologieverteilung auscluster.specenthalten.
Fehlerbehebung
So diagnostizieren und beheben Sie Probleme mit der Standard-Pod-Verteilung:
- Sehen Sie im
BareMetalMachine.Status.ControlPlaneComponentsnach, welchen Status die Funktion hat. - Prüfen Sie die Logs von
cluster-operatorundcap-controller-managerauf relevante Ereignisse. - Wenn
kube-scheduler-Pods abstürzen, prüfen Sie, ob die Scheduler-Konfiguration in der YAML-Datei des Clusters korrekt ist.
Nächste Schritte
- Weitere Informationen zu Einschränkungen für die Verteilung der Pod-Topologie finden Sie in der Kubernetes-Dokumentation.
- Wenn Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung für den Kubernetes-Scheduler.