|
Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar. |
Virtuelle Maschine Auto-Balance (Experimentell)
|
virtual-machine-auto-balance ist ein experimentelles Add-on. Für weitere Informationen zu experimentellen Funktionen siehe Feature Labels. |
Das virtual-machine-auto-balance Add-on ermöglicht SUSE Virtualization die Nutzung des Kubernetes Descheduler zur Neugewichtung von Arbeitslasten virtueller Maschinen. Der Kubernetes Descheduler optimiert die Arbeitslastplanung, indem er Pods entfernt, die nicht optimal gemäß den von den Administratoren definierten Richtlinien platziert sind. Diese entscheidende Funktion verbessert die Ressourcennutzung, balanciert die Arbeitslasten über die Knoten hinweg und steigert die Gesamtleistung des Clusters.
Aktivierung des Add-ons
Wenn aktiviert, stellt das Add-on den Descheduler im kube-system Namespace bereit und eine zugehörige Konfiguration in der kube-system/descheduler ConfigMap. Sie können das Add-on nur aktivieren, wenn der Cluster mehr als einen Knoten hat.
-
Gehen Sie in der SUSE Virtualization Benutzeroberfläche zu Erweiterte → Add-ons.
-
Wählen Sie descheduler (Experimentell) und dann ⋮ → Aktivieren aus.
Descheduler-Richtlinien
Die Konfiguration enthält die folgenden Plugins:
-
DefaultEvictor: Bietet eine allgemeine Konfiguration für die Entfernung auf oberster Ebene. -
LowNodeUtilization: Überwacht die Ressourcennutzung der Knoten und entfernt Pods von überlasteten Knoten zu unterausgelasteten Knoten basierend auf definierten Schwellenwerten.
Mit der Standardkonfiguration entfernt der Descheduler nur Pods virtueller Maschinen.
Anpassung der Descheduler-Richtlinien
Wählen Sie ⋮ → YAML bearbeiten, um die Descheduler-Richtlinien gemäß Ihren Anforderungen anzupassen. Die Konfiguration ist im YAML-Format definiert.
- apiVersion: harvesterhci.io/v1beta1
kind: Addon
metadata:
name: descheduler
namespace: kube-system
labels:
addon.harvesterhci.io/displayName: "virtual-machine-auto-balance"
addon.harvesterhci.io/experimental: "true"
spec:
repo: http://harvester-cluster-repo.cattle-system.svc/charts
version: << .DESCHEDULER_CHART_VERSION >>
chart: descheduler
{{- if and .Addons .Addons.descheduler }}
enabled: {{ .Addons.descheduler.Enabled }}
{{- else }}
enabled: false
{{- end }}
valuesContent: |
kind: Deployment
image:
repository: registry.k8s.io/descheduler/descheduler
pullPolicy: IfNotPresent
deschedulingInterval: 5m
replicas: 1
cmdOptions:
v: 3
feature-gates: EvictionsInBackground=true
deschedulerPolicy:
maxNoOfPodsToEvictPerNode: 5
profiles:
- name: default
pluginConfig:
- name: DefaultEvictor
args:
nodeFit: true
ignorePvcPods: false
evictLocalStoragePods: true
labelSelector:
matchExpressions:
- key: "kubevirt.io"
operator: "In"
values:
- "virt-launcher"
- name: LowNodeUtilization
args:
evictableNamespaces:
exclude:
- cattle-dashboards
- cattle-fleet-clusters-system
- cattle-fleet-local-system
- cattle-fleet-system
- cattle-logging-system
- cattle-monitoring-system
- cattle-provisioning-capi-system
- cattle-system
- fleet-local
- harvester-system
- kube-system
- local
- longhorn-system
thresholds:
cpu: 30
memory: 30
targetThresholds:
cpu: 50
memory: 50
plugins:
balance:
enabled:
- LowNodeUtilization
-
deschedulingInterval: Wie oft der Descheduler ausgeführt wird. Der Standardwert ist5m(5 Minuten). -
maxNoOfPodsToEvictPerNode: Maximale Anzahl von Pods, die während eines einzelnen Descheduling-Zyklus entfernt werden können. Der Standardwert ist5. -
evictableNamespaces.exclude: Namespaces, die von der Evakuierung ausgeschlossen werden sollen. Standardmäßig sind die System-Namespaces ausgeschlossen, um kritische Systemkomponenten zu schützen. -
targetThresholds: Obere Auslastungsgrenze für überwachte Ressourcen. Knoten, deren Nutzung diesen Schwellenwert überschreitet, werden als überlastet markiert, was die Evakuierung von Pods auslöst, um ihre Last zu reduzieren. Standardwerte werden automatisch für CPU (50) und Speicher (50) angewendet, aber Sie können Werte für andere überwachte Ressourcen definieren. -
thresholds: Untere Auslastungsgrenze für überwachte Ressourcen. Pods, die von überlasteten Knoten entfernt wurden, werden nur auf Knoten neu geplant, deren Nutzung derzeit unter diesem Schwellenwert liegt. Standardwerte werden automatisch für CPU (30) und Speicher (30) angewendet, aber Sie können Werte für andere überwachte Ressourcen definieren.
Deaktivierung des Add-ons
-
Gehen Sie in der SUSE Virtualization Benutzeroberfläche zu Erweiterte → Add-ons.
-
Wählen Sie descheduler (Experimentell) und dann ⋮ → Deaktivieren aus.
Knotennutzung
Überprüfen Sie die Descheduler-Protokolle für Informationen zur Knotennutzung.
> kubectl logs -n kube-system -l app.kubernetes.io/name=descheduler -f
I1209 02:06:21.067225 1 lownodeutilization.go:210] "Node has been classified" category="underutilized" node="hp-131-tink-system" usage={"cpu":"4583m","memory":"3075Mi","pods":"25"} usagePercentage={"cpu":20,"memory":2,"pods":13}
I1209 02:06:21.067328 1 lownodeutilization.go:210] "Node has been classified" category="underutilized" node="hp-121-tink-system" usage={"cpu":"5198m","memory":"4023Mi","pods":"30"} usagePercentage={"cpu":23,"memory":3,"pods":15}
I1209 02:06:21.067355 1 lownodeutilization.go:210] "Node has been classified" category="overutilized" node="hp-119-tink-system" usage={"cpu":"10490m","memory":"109333705514","pods":"81"} usagePercentage={"cpu":46,"memory":81,"pods":41}
Fehlerbehebung
Der Descheduler arbeitet mit Pods anstelle von virtuellen Maschinen. Wenn eine virtuelle Maschine, von der Sie erwarten, dass sie entfernt wird, dies nicht tut, überprüfen Sie die Descheduler-Protokolle.
Beispiel:
> kubectl logs -n kube-system -l app.kubernetes.io/name=descheduler -f
I1209 02:06:21.068059 1 defaultevictor.go:228] "pod does not fit on any other node because of nodeSelector(s), Taint(s), or nodes marked as unschedulable" pod="default/virt-launcher-vm-3-w866s"
In diesem Beispiel wurde die virtuelle Maschine manuell migriert, sodass die zugehörige Pod-Spezifikation einen restriktiven Knotenauswähler enthält. Der Descheduler kann diesen Pod nicht evakuieren, da der Knotenauswähler verhindern würde, dass der Pod erfolgreich auf einem anderen verfügbaren Knoten im Cluster ausgeführt wird.