Den Mechanismus der CPU-Ressourcenzuweisung in Kubernetes verstehen

Kubernetes (k8s) ist eine beliebte Container-Orchestrierungsplattform, mit der Entwickler containerisierte Anwendungen in einer Cloud-Umgebung bereitstellen, verwalten und automatisieren können. In Kubernetes ist die Zuweisung von CPU-Ressourcen ein kritischer Punkt, der sich direkt auf die Leistung und Zuverlässigkeit von Anwendungen auswirkt. In diesem Artikel stellen wir Ihnen den Mechanismus der CPU-Ressourcenzuweisung in Kubernetes vor, einschließlich der CPU-Anforderungen und -Limits, des CPU-Share-Mechanismus und der CPU-Scheduler sowie anderer damit zusammenhängender Konzepte, um Entwicklern zu helfen, die CPU-Zuweisung von Containern besser zu kontrollieren und die Leistung und Zuverlässigkeit von Anwendungen zu verbessern.

CPU-Zuweisungseinheiten

In Kubernetes wird die CPU in Millicpu zugewiesen, wobei eine CPU-Ressource 1000 Millicores entspricht. Ein Pod, der 0,5 CPU-Ressourcen anfordert, kann beispielsweise als 500 Millicores ausgedrückt werden. Das System basiert auf dem CPU-Zuweisungsmechanismus im Linux-Kernel. Im Linux-Kernel wird die CPU-Zeit in Zeitscheiben zugeteilt, von denen jede typischerweise einige Millisekunden beträgt. Kubernetes macht sich dies zunutze, indem es die CPU-Zeitscheiben-Zuweisung in Millicores umwandelt.

Mechanismus für die Zuweisung von CPU-Ressourcen

In Kubernetes werden CPU-Ressourcen auf zwei Arten zugewiesen: CPU-Anforderungen, die dem Kubernetes-Scheduler mitteilen, wie viele CPU-Ressourcen der Pod benötigt, um ordnungsgemäß zu laufen, und CPU-Limits, die Kubernetes mitteilen, wie viele CPU-Ressourcen der Pod verwenden kann. Wenn auf einem Knoten nicht genügend CPU-Ressourcen verfügbar sind, um die CPU-Anforderungen eines Pods zu erfüllen, kann der Pod nicht auf diesem Knoten geplant werden. Wenn die auf einem Knoten verfügbaren CPU-Ressourcen nicht ausreichen, um das CPU-Limit des Pods zu erfüllen, kann der Pod zwar noch ausgeführt werden, ist aber möglicherweise durch seine CPU-Ressourcen eingeschränkt, was zu einem langsamen Betrieb oder anderen Problemen führt.

Beachten Sie, dass CPU-Anforderungen und Limits in Kubernetes zwei unterschiedliche Konzepte sind. Im Allgemeinen sollten CPU-Anforderungen und -Limits entsprechend dem tatsächlichen Bedarf der Anwendung festgelegt werden. Wenn die CPU-Anforderung zu niedrig eingestellt ist, läuft der Pod möglicherweise nicht richtig oder nur langsam; wenn das CPU-Limit zu hoch eingestellt ist, haben andere Pods auf dem Knoten möglicherweise nicht genügend CPU-Ressourcen, was die Leistung und Verfügbarkeit des Clusters beeinträchtigt.

CPU-Freigabemechanismus

Darüber hinaus ist CPU Share in Kubernetes ein Mechanismus zur Steuerung der Zuweisung von Container-CPU-Ressourcen. Der CPU-Share-Mechanismus ist eine Funktion des Linux-Kernels, mit der die Zuweisung von CPU-Zeit zwischen Prozessen gesteuert wird, und Kubernetes verwendet diese Funktion, um Containern CPU-Ressourcen zuzuweisen.

CPU Share ist ein ganzzahliger Wert, der die CPU-Nutzung im Verhältnis zu anderen Containern darstellt. Wenn beispielsweise ein Container einen CPU-Anteil von 1024 und ein anderer Container einen CPU-Anteil von 512 hat, erhält der erste Container mehr CPU-Zeit, etwa doppelt so viel wie der zweite. Wenn zwei Container den gleichen CPU-Anteil haben, teilen sie sich die CPU-Ressourcen in einer Zeitscheibenrotation.

In Kubernetes können Sie den CPU-Share-Wert eines Containers steuern, indem Sie die CPU-Anforderung und das CPU-Limit des Containers festlegen. Mit der CPU-Anforderung eines Containers teilen Sie dem Kubernetes-Scheduler mit, wie viele CPU-Ressourcen der Container mindestens benötigt, und mit dem CPU-Limit eines Containers teilen Sie Kubernetes mit, wie viele CPU-Ressourcen der Container maximal nutzen kann.Der Kubernetes-Scheduler berechnet den CPU Share-Wert. Wenn mehrere Container die gleichen CPU-Anforderungen und -Limits haben, erhalten sie die gleichen CPU-Share-Werte, d.h. sie teilen sich die CPU-Ressourcen in einer zeitscheibenbasierten Rotation.

CPU-Scheduler

In Kubernetes ist der CPU Scheduler eine der Komponenten, die für die Planung von Pods auf den Knoten zuständig sind. Er trifft Planungsentscheidungen auf der Grundlage der auf dem Knoten verfügbaren CPU-Ressourcen und der CPU-Anforderungen des Pods. Der CPU-Scheduler berücksichtigt auch andere Faktoren auf dem Knoten, wie die Nutzung von Ressourcen wie Arbeitsspeicher, Festplatte, Netzwerk usw.

Wenn ein Pod auf einem Knoten geplant wird, weist Kubernetes dem Pod eine CPU Cgroup zu, eine Funktion des Linux-Kernels, die Prozesse (oder Container) gruppiert und ihre Ressourcennutzung begrenzt. In Kubernetes hat jeder Pod seine eigene CPU Cgroup, die die vom Pod verwendeten CPU-Ressourcen begrenzt.

Kurz gesagt, die Zuweisung von CPU-Ressourcen ist ein zentrales Thema in Kubernetes. Durch die Festlegung von CPU-Anforderungen und -Grenzwerten, die Verwendung des CPU-Share-Mechanismus und Funktionen wie den CPU-Scheduler können Sie die CPU-Zuweisung von Containern besser kontrollieren und die Leistung und Zuverlässigkeit von Anwendungen verbessern.