Cgroups v2 auf OL8-Worker-Knoten mit benutzerdefinierten Images aktivieren
Erfahren Sie, wie Sie cgroups v2 auf Worker-Knoten aktivieren, auf denen Oracle Linux 8 (OL8) in Clustern ausgeführt wird, die mit Kubernetes Engine (OKE) erstellt wurden, und benutzerdefinierte Images verwenden.
In OKE-OL8-Images mit der Build-Nummer 1367 oder höher ist cgroups v2 standardmäßig aktiviert. In OKE-OL8-Images, die eine Build-Nummer kleiner als 1367 (und in OL8-Plattformimages) aufweisen, ist cgroups v1 standardmäßig aktiviert. In diesem Thema wird beschrieben, wie Sie cgroups v2 im Linux-Kernel von Instanzen aktivieren, die Worker-Knoten hosten, die OKE-OL8-Images verwenden, deren Build-Nummer kleiner als 1367 ist oder die OL8-Plattformimages verwenden.
Control Groups (cgroups) ist ein Linux-Kernelfeature, das einen Mechanismus zum Verwalten und Steuern der Ressourcenzuweisung für Prozesse oder Prozessgruppen bietet. Mit der cgroups-Funktion können Systemadministratoren und Entwickler verschiedene Systemressourcen (wie CPU, Speicher, I/O, Netzwerkbandbreite) bestimmten Prozessen oder Prozessgruppen zuweisen und begrenzen. Cgroups bietet eine leistungsstarke und flexible Möglichkeit, die Ressourcennutzung zu verwalten, um sicherzustellen, dass Prozesse die erforderlichen Ressourcen erhalten und gleichzeitig verhindern, dass sie übermäßige Mengen verbrauchen und die Leistung anderer Prozesse oder des Systems insgesamt beeinträchtigen. Durch das Erstellen und Organisieren von Prozessen in Kontrollgruppen können Administratoren Ressourcen-Constraints durchsetzen, Aufgaben priorisieren und die Systemstabilität aufrechterhalten.
Oracle Linux bietet zwei Arten von Kontrollgruppen:
- Kontrollgruppen Version 1 (cgroups v1): Diese Gruppen stellen eine Controllerhierarchie pro Ressource bereit. Jede Ressource, wie CPU, Arbeitsspeicher, I/O usw., verfügt über eine eigene Kontrollgruppenhierarchie. Ein Nachteil von cgroups v1 ist die Schwierigkeit, die Ressourcennutzung zwischen Gruppen zu koordinieren, die zu verschiedenen Prozesshierarchien gehören können.
- Kontrollgruppen Version 2 (cgroups v2): Diese Gruppen stellen eine einzelne Kontrollgruppenhierarchie bereit, für die alle Ressourcencontroller gemountet sind. In dieser Hierarchie können Sie die Ressourcennutzung über verschiedene Resource Controller hinweg koordinieren.
Weitere Informationen zu Kontrollgruppen und Oracle Linux finden Sie unter Ressourcen mit Kontrollgruppen verwalten in der Oracle Linux-Dokumentation.
Sowohl die Cgroups v1 als auch die Cgroups v2 sind in Oracle Linux 8 (und späteren Versionen) vorhanden.
In OKE OL8-Images, die eine Build-Nummer von 1367 oder höher haben, ist cgroups v2 standardmäßig aktiviert. In OKE-OL8-Images, die eine Build-Nummer kleiner als 1367 (und in OL8-Plattformimages) haben, ist cgroups v1 standardmäßig aktiviert. Wenn Sie also ein OKE-OL8-Image mit einer Build-Nummer kleiner als 1367 (oder einem OL8-Plattformimage) für einen Knotenpool angeben, ist cgroups v1 standardmäßig in den Linux-Kerneln von Compute-Instanzen aktiviert, auf denen die Knoten im Knotenpool gehostet werden.
Sie können jedoch cgroups v2 aktivieren, wenn Sie OKE-OL8-Images mit einer Build-Nummer kleiner als 1367 (und OL8-Plattformimages) verwenden.
Auf einer allgemeinen Ebene ist der Prozess zum Aktivieren von cgroups v2 wie folgt:
- Schritt 1: Erstellen Sie eine Compute-Instanz, auf der das erforderliche Image OL8 ausgeführt wird, und aktivieren Sie cgroups v2.
- Schritt 2: Aktivieren Sie cgroups v2 auf der Compute-Instanz.
- Schritt 3: Benutzerdefiniertes Image basierend auf der Compute-Instanz erstellen, in der cgroups v2 aktiviert ist.
- Schritt 4: Worker-Knoten hinzufügen, auf denen OL8 ausgeführt wird und die cgroups v2 für ein Cluster aktiviert sind. Wie Sie einem Cluster v2-fähige cgroups-Knoten hinzufügen, hängt davon ab, ob Sie die Knoten als verwaltete Knoten oder als selbstverwaltete Knoten hinzufügen möchten. Für verwaltete Knoten definieren Sie einen verwalteten Knotenpool. Bei selbstverwalteten Knoten fügen Sie Compute-Instanzen als Worker-Knoten hinzu.
Schritt 1: Erstellen Sie eine Compute-Instanz, auf der das erforderliche Image OL8 ausgeführt wird, und aktivieren Sie cgroups v2
In diesem Schritt erstellen Sie mit dem Compute-Service eine Compute-Instanz, auf der das gewünschte Release OL8 auf Worker-Knoten im Kubernetes-Cluster ausgeführt wird.
- Entscheiden Sie, welches OL8-Release (und ob Sie ein OKE-Image auswählen, welche Kubernetes-Version) Sie auf Worker-Knoten auswählen möchten.
Oracle stellt eine Reihe verschiedener OL8-OKE-Images und Plattformimages bereit.
-
Befolgen Sie die Anweisungen unter Instanz erstellen in der Compute-Servicedokumentation, um eine neue Compute-Instanz zu erstellen, und wählen Sie ein geeignetes Plattformimage aus (entweder durch Auswahl eines Plattformimages oder durch Angabe der OCID eines OKE-Images).
Dies ist die Compute-Instanz, die Sie als Basis für ein neues benutzerdefiniertes Image verwenden.
Schritt 2: Aktivieren Sie cgroups v2 auf der Compute-Instanz
In diesem Schritt aktivieren Sie cgroups v2 auf der Compute-Instanz, die Sie im vorherigen Schritt erstellt haben. Die Anweisungen hier sind als praktische Zusammenfassung von Aktivieren von cgroups v2 in der OL8-Dokumentation gedacht.
- Stellen Sie in einem Terminalfenster eine Verbindung zur Compute-Instanz her, und konfigurieren Sie alle Kernel-Boot-Einträge so, dass cgroups v2 standardmäßig gemountet werden, indem Sie Folgendes eingeben:
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1" - Starten Sie die Instanz neu, indem Sie Folgendes eingeben:
sudo reboot - Vergewissern Sie sich, dass die cgroups v2 jetzt gemountet sind, indem Sie Folgendes eingeben:
sudo mount -l | grep cgroup - Prüfen Sie optional den Inhalt des Verzeichnisses
/sys/fs/cgroup(der Root-Kontrollgruppe), indem Sie Folgendes eingeben:ls -l /sys/fs/cgroup/Bei den cgroups v2 müssen die Dateien im Verzeichnis am Anfang ihrer Dateinamen Präfixe aufweisen (z.B.
cgroup.*,cpu.*,memory.*).
Schritt 3: Benutzerdefiniertes Image basierend auf der Compute-Instanz erstellen, in der cgroups v2 aktiviert ist
In diesem Schritt erstellen Sie mit dem Compute-Service ein benutzerdefiniertes Image aus der Compute-Instanz, die Sie im vorherigen Schritt für cgroups v2 aktiviert haben.
- Fahren Sie die Instanz herunter, die Sie für cgroups v2 aktiviert haben, indem Sie Folgendes eingeben:
sudo shutdown -h now - Befolgen Sie die Anweisungen unter Benutzerdefinierte Images verwalten in der Dokumentation zum Compute-Service, um ein benutzerdefiniertes Image basierend auf der Compute-Instanz zu erstellen.
- Notieren Sie sich die OCID des von Ihnen erstellten benutzerdefinierten Images.
Schritt 4: Worker-Knoten hinzufügen, auf denen OL8 ausgeführt wird und die cgroups v2 für ein Cluster aktiviert sind
In diesem Schritt fügen Sie mit dem benutzerdefinierten Image, das Sie im vorherigen Schritt erstellt haben, Worker-Knoten hinzu, auf denen OL8 ausgeführt wird und die cgroups v2 für ein Kubernetes-Cluster aktiviert sind.
Beachten Sie, dass verschiedene Anweisungen befolgt werden müssen, je nachdem, ob Sie cgroups v2 auf verwalteten Knoten oder auf selbstverwalteten Knoten aktivieren möchten. Für verwaltete Knoten definieren Sie einen verwalteten Knotenpool. Bei selbstverwalteten Knoten fügen Sie Compute-Instanzen als Worker-Knoten hinzu.
Beachten Sie, dass Sie die CLI verwenden müssen, um verwaltete Knoten basierend auf benutzerdefinierten Images zu erstellen.
Verwaltete Knoten hinzufügen, auf denen OL8 mit aktivierten cgroups v2 ausgeführt wird
So fügen Sie verwaltete Knoten hinzu, auf denen OL8 ausgeführt wird und die cgroups v2 für ein vorhandenes Cluster aktiviert sind:
- Öffnen Sie eine Eingabeaufforderung, und verwenden Sie den Befehl oci ce node-pool create, um einen neuen Knotenpool zu erstellen.
- Nehmen Sie neben den obligatorischen Parametern, die für den Befehl erforderlich sind, den Parameter
--node-image-idauf, und geben Sie die OCID des benutzerdefinierten Images an, das Sie in Schritt 3: Benutzerdefiniertes Image basierend auf der Compute-Instanz erstellen, in der cgroups v2 aktiviert ist.Beispiel: Sie können den folgenden Befehl eingeben:
oci ce node-pool create \ --cluster-id ocid1.cluster.oc1.iad.aaaa______m4w \ --name my-nodepool \ --node-image-id ocid1.image.oc1.iad.aaaa______zpq \ --compartment-id ocid1.tenancy.oc1..aaa______q4a \ --kubernetes-version v1.29.1 \ --node-shape VM.Standard2.1 \ --placement-configs "[{\"availabilityDomain\":\"PKGK:US-ASHBURN-AD-1\", \"subnetId\":\"ocid1.subnet.oc1.iad.aaaa______kfa\"}]" \ --size 3 \ --region us-ashburn-1
Selbstverwaltete Knoten hinzufügen, auf denen OL8 mit aktivierten cgroups v2 ausgeführt wird
Bevor Sie einen selbstverwalteten Knoten erstellen:
- Vergewissern Sie sich, dass das Cluster, dem Sie den selbstverwalteten Knoten hinzufügen möchten, für selbstverwaltete Knoten entsprechend konfiguriert ist. Siehe Clusteranforderungen.
- Vergewissern Sie sich, dass bereits eine dynamische Gruppe und eine IAM-Policy vorhanden sind, damit die Compute-Instanz, die den selbstverwalteten Knoten hostet, einem erweiterten Cluster beitreten kann, das mit Kubernetes Engine erstellt wurde. Siehe Dynamische Gruppe und Policy für selbstverwaltete Knoten erstellen.
- Erstellen Sie ein Cloud-Init-Skript, das den privaten Kubernetes-API-Endpunkt und das base64-codierte CA-Zertifikat des erweiterten Clusters enthält, dem Sie den selbstverwalteten Knoten hinzufügen möchten. Siehe Cloud-init-Skripte für selbstverwaltete Knoten erstellen.
Konsole verwenden
- Erstellen Sie eine neue Compute-Instanz, um den selbstverwalteten Knoten zu hosten:
- Rufen Sie das Navigationsmenü auf, und wählen Sie Compute aus. Wählen Sie unter Compute die Option Instanzen aus.
- Befolgen Sie die Anweisungen in der Compute-Servicedokumentation, um eine neue Compute-Instanz zu erstellen. Beachten Sie, dass geeignete Policys vorhanden sein müssen, damit die neue Compute-Instanz dem erweiterten Cluster beitreten kann. Siehe Dynamische Gruppe und Policy für selbstverwaltete Knoten erstellen.
- Klicken Sie im Abschnitt Image und Ausprägungs auf Image ändern.
- Wählen Sie Meine Images aus, wählen Sie die Option Image-OCID aus, und geben Sie dann die OCID des benutzerdefinierten Images ein, das Sie in Schritt 3: Benutzerdefiniertes Image basierend auf der Compute-Instanz erstellen, in der Cgroups v2 aktiviert ist.
- Wählen Sie Erweiterte Optionen aus, und wählen Sie im Abschnitt Management die Option Cloud-Init-Skript einfügen aus.
- Kopieren Sie das cloud-init-Skript für selbstverwaltete Knoten, die Sie zuvor erstellt haben, und fügen Sie es in das Feld Cloud-init-Skript ein.
- Wählen Sie Erstellen aus, um die Compute-Instanz zum Hosten des selbstverwalteten Knotens zu erstellen.
Wenn die Compute-Instanz erstellt wird, wird sie mit dem Kubernetes-API-Endpunkt, den Sie im Cloud-Init-Skript angegeben haben, als selbstverwalteter Knoten zum Cluster hinzugefügt.
- (Optional) Prüfen Sie, ob der selbstverwaltete Knoten dem Kubernetes-Cluster hinzugefügt wurde und ob dem Knoten Labels hinzugefügt und wie erwartet festgelegt wurden, indem Sie die Anweisungen unter Selbstverwaltete Knoten erstellen befolgen.
CLI verwenden
- Öffnen Sie eine Eingabeaufforderung, und geben Sie den Befehl
oci Compute instance launchund die erforderlichen Parameter ein, um einen selbstverwalteten Knoten zu erstellen. - Zusätzlich zu den obligatorischen Parametern, die vom Befehl benötigt werden:
- Nehmen Sie den Parameter
--image-idauf, und geben Sie die OCID des benutzerdefinierten Images an, das Sie in Schritt 3: Benutzerdefiniertes Image basierend auf der Compute-Instanz erstellen, in der die Cgroups v2 aktiviert sind erstellt haben. - Nehmen Sie den Parameter
--user-data-fileauf, und geben Sie das cloud-init-Skript für selbstverwaltete Knoten an, die Sie zuvor erstellt haben.
Beispiel: Sie können den folgenden Befehl eingeben:
oci compute instance launch \ --availability-domain zkJl:PHX-AD-1 \ --compartment-id ocid1.compartment.oc1..aaaaaaa______neoq \ --shape VM.Standard2.2 \ --subnet-id ocid1.subnet.oc1.phx.aaaaaaa______hzia \ --user-data-file my-selfmgd-cgroupsv2-cloud-init.yaml \ --image-id ocid1.image.oc1.phx.aaaaaaa______slcrWenn die Compute-Instanz erstellt wird, wird sie mit dem Kubernetes-API-Endpunkt, den Sie im Cloud-Init-Skript angegeben haben, als selbstverwalteter Knoten zum Cluster hinzugefügt.
- Nehmen Sie den Parameter