Kubernetes 1.12: Ein Überblick über die wichtigsten Innovationen



Heute ist der 27. September, was bedeutet, dass wir während der Arbeitszeit (gemäß der US-Zeitzone) mit der nächsten Veröffentlichung von Kubernetes rechnen können - 1.12 (die offizielle Ankündigung wird jedoch manchmal verzögert). Im Allgemeinen ist es an der Zeit, die glorreiche Tradition fortzusetzen und über die wichtigsten Änderungen zu berichten, die wir auf der Grundlage öffentlicher Informationen aus dem Projekt vornehmen werden : Kubernetes bietet Tracking-Tabelle , CHANGELOG-1.12 , zahlreiche Probleme, Pull-Anfragen und Designvorschläge. Was ist neu in K8s 1.12?

Lagereinrichtungen


Wenn Sie eine Sache herausgreifen, die unter allen Problemen im Zusammenhang mit der Veröffentlichung von Kubernetes 1.12 häufiger als jede andere erwähnt wird, ist dies möglicherweise die Container Storage Interface (CSI) , über die wir bereits neulich geschrieben haben . Beginnen wir aus diesem Grund mit den Änderungen an der Speicherunterstützung.

Daher haben CSI-Plugins den Beta-Status beibehalten und werden voraussichtlich für die nächste Version von Kubernetes (1.13) stabil sein. Was ist dann neu in der CSI-Unterstützung?

Im Februar dieses Jahres begannen die Arbeiten am Topologiekonzept in der CSI-Spezifikation. Kurz gesagt, Topologie sind Informationen zur Clustersegmentierung (z. B. nach „Racks“ für lokale Installationen oder nach „Regionen“ und „Zonen“ für Cloud-Umgebungen), die Orchestrierungssysteme kennen und berücksichtigen müssen. Warum? Von Speicheranbietern zugewiesene Volumes sind nicht unbedingt im gesamten Cluster gleichermaßen zugänglich. Daher sind Kenntnisse der Topologie erforderlich, um Ressourcen effizient zu planen und Bereitstellungsentscheidungen zu treffen.

Das Ergebnis der Entstehung von Topologien in CSI ( angenommen in der Spezifikation am 1. Juni) war ihre Unterstützung in Kubernetes 1.12:


Dies endet jedoch nicht mit CSI-bezogenen Updates. Eine weitere wichtige Neuerung in der Version Kubernetes 1.12 ist die Unterstützung von Snapshots für CSI (im Alpha-Status). Schnappschüsse für Volumes als solche wurden in der Version von K8s 1.8 veröffentlicht . Die Hauptimplementierung, zu der der Controller und der Provisioner (zwei separate Binärdateien) gehören, wurde beschlossen, in ein externes Repository übertragen zu werden . Seitdem wurden Volumes von GCE PD, AWS EBS, OpenStack Cinder, GlusterFS und Kubernetes hostPath .

Der neue Entwurfsvorschlag zielt darauf ab, „diese Initiative fortzusetzen, indem Snapshot-Unterstützung für CSI-Volume-Treiber hinzugefügt wird“ (Snapshot-Unterstützung in der CSI-Spezifikation wird hier beschrieben). Da Kubernetes das Prinzip einhält, einen Mindestsatz an Funktionen in die Kern-API aufzunehmen, verwendet diese Implementierung (wie bei Snapshots im Volume Snapshot Controller) CRD ( CustomResourceDefinitions ).

Und ein paar neue Funktionen für CSI-Treiber:

  • Die Alpha-Version der Fähigkeit des Treibers, sich in der Kubernetes-API zu registrieren (um Benutzern das Auffinden der im Cluster installierten Treiber zu erleichtern und es den Treibern zu ermöglichen, die Interaktionsprozesse von Kubernetes mit ihnen zu beeinflussen);
  • Die Alpha-Version der Fähigkeit des Treibers , Informationen über das Laufwerk zu erhalten , das das Volume über NodePublish

In der letzten Version von Kubernetes wurde der Mechanismus zur dynamischen Begrenzung von Volumes auf Knoten eingeführt, der von Alpha auf Beta verschoben wurde. Sie haben es erraten, Unterstützung für CSI sowie Azure.

Schließlich wird die Funktion zur Weitergabe des Mount-Namespace , mit der Sie das Volume als rshared (sodass alle gemounteten Containerverzeichnisse auf dem Host sichtbar sind) und in der Version 1.10 von K8s einen Beta-Status hat, als stabil deklariert.

Planer


Im Scheduler verbessert Kubernetes 1.12 die Leistung dank der Alpha-Version des Suchbeschränkungsmechanismus in einem Knotencluster, der zum Planen von Herden geeignet ist (mögliche Knoten) . Früher überprüfte der Kube-Scheduler bei jedem Versuch, jeden Pod zu planen, die Verfügbarkeit aller Knoten und übergab sie zur Auswertung. Jetzt findet der Scheduler nur eine bestimmte Anzahl von ihnen und beendet dann seine Arbeit. Gleichzeitig sieht der Mechanismus die obligatorische Auswahl von Knoten aus verschiedenen Regionen und Zonen sowie die Notwendigkeit vor, verschiedene Knoten in verschiedenen Planungszyklen anzuzeigen (wählen Sie nicht die ersten 100 Knoten bei jedem Start aus). Die Entscheidung zur Implementierung dieses Mechanismus wurde unter Berücksichtigung der Ergebnisse der Analyse der Daten zur Leistung des Schedulers getroffen (wenn das 90. Perzentil eine Zeit von 30 ms für einen Herd zeigte, dann das 99. Perzentil bereits 60 ms).

Darüber hinaus sind die folgenden Funktionen des Schedulers zur Beta-Version gereift:

  • Taint-Knoten nach Bedingung , der in K8s 1.8 angezeigt wurde und das Markieren eines Knotens mit einem bestimmten Status (für weitere Aktionen) ermöglicht, wenn bestimmte Ereignisse auftreten: Jetzt erstellt der Lebenszyklus-Controller des Knotens automatisch Taints, und der Scheduler überprüft sie (anstelle von Bedingungen ).
  • DaemonSet in DaemonSet mit dem Kube-Scheduler (anstelle des DaemonSet Controllers): Standardmäßig wurde sie ebenfalls aktiviert.
  • Angeben einer Prioritätsklasse in ResourceQuota .

Clusterknoten


Eine interessante Neuerung war das Erscheinungsbild (im Status der Alpha-Version) von RuntimeClass - einer neuen Ressource auf Cluster-Ebene, die die Parameter der Container-Laufzeit (Container-Laufzeit) RuntimeClass . RuntimeClasses werden den Pods über dasselbe Feld in PodSpec und implementieren die Unterstützung für die Verwendung mehrerer ausführbarer Umgebungen innerhalb eines Clusters oder Knotens. Warum?

„Das Interesse an der Verwendung unterschiedlicher Laufzeiten in einem Cluster wächst. Hauptmotiv dafür sind derzeit die Sandkästen und der Wunsch der Kata- und gVisor-Container, sich in Kubernetes zu integrieren. Andere Laufzeitmodelle wie Windows-Container oder sogar Remote-Laufzeitumgebungen werden in Zukunft ebenfalls Unterstützung benötigen. RuntimeClass bietet eine Möglichkeit, zwischen verschiedenen in einem Cluster konfigurierten Laufzeiten zu wählen und deren Eigenschaften zu ändern (sowohl vom Cluster als auch vom Benutzer). “

Um zwischen den vordefinierten Konfigurationen zu wählen, wird der RuntimeHandler an das CRI (Container Runtime Interface) übergeben, das die aktuellen Anmerkungen des Herdes ersetzen soll:



Und die Konfiguration in Containerd für Kata-Runtime sieht ungefähr so ​​aus:

 [plugins.cri.containerd.kata-runtime] runtime_type = "io.containerd.runtime.v1.linux" runtime_engine = "/opt/kata/bin/kata-runtime" runtime_root = "" 

Das RuntimeClass Kriterium für die Alpha-Version ist eine erfolgreiche CRI-Validierung .

Darüber hinaus ist der Mechanismus zum Registrieren lokaler Plug-Ins (einschließlich CSI) in Kubelet und shareProcessNamespace (die Funktion ist standardmäßig aktiviert) auf den Status einer Beta-Version angewachsen.

Netzwerke


Die Hauptnachricht im Netzwerkteil von Kubernetes ist die Alpha-Version der SCTP- Unterstützung (Stream Control Transmission Protocol). Dieses Telekommunikationsprotokoll wurde in den Bereichen Pod , Service , Endpoint und NetworkPolicy unterstützt und gehört nun zu TCP und UDP. Mit der neuen Funktion „Anwendungen, die SCTP als L4-Protokoll für ihre Schnittstellen benötigen, wird die Bereitstellung auf Kubernetes-Clustern einfacher. Beispielsweise können sie die auf kube-dns basierende Diensterkennung verwenden , und ihre Interaktion wird über NetworkPolicy gesteuert. " Implementierungsdetails finden Sie in diesem Dokument .

Zwei in K8s 1.8 eingeführte Netzwerkfunktionen haben ebenfalls einen stabilen Status erreicht: Unterstützung für Richtlinien für ausgehenden EgressRules Verkehr in der NetworkPolicy-API und Anwendung von CIDR- Regeln für Quelle / Ziel über ipBlockRule .

Skalieren


Zu den Verbesserungen des Horizontal Pod Autoscaler gehören:


Die vertikale Skalierung der Herde , bei der vor Erreichen der Beta-Version keine Benutzertests durchgeführt wurden, steht nicht still. Die Autoren hielten es für ausreichend für die Veröffentlichung von K8s 1.12 und erinnern daran, dass diese Funktion eher eine Ergänzung zu Kubernetes ist (nicht im Kernel enthalten). Die gesamte Entwicklung wird in einem separaten Repository durchgeführt, in dem die Beta-Version zeitlich auf die Veröffentlichung von Kubernetes abgestimmt wird.


VPA-Workflow (Vertical Pod Autoscaler) für Kubernetes

Schließlich enthält K8s 1.12 (in Alpha-Form) die Ergebnisse der Arbeiten zur "Vereinfachung der Installation mit ComponentConfig " (als Teil des Sig-Cluster-Lebenszyklus), die seit fast zwei Jahren durchgeführt werden. Leider ist der Zugriff auf das Dokument mit den Entwurfsvorschlägen mit Details aus irgendeinem Grund (ein einfaches Versehen?) Für anonyme Benutzer gesperrt.

Andere Änderungen


API


In der API-Maschinengruppe sind zwei neue Funktionen implementiert:

  • dry-run für Apiserver (Alpha-Version), der die Validierung und Verarbeitung von Anforderungen imitiert;
  • Ressourcenkontingent-API (sofort Beta), die standardmäßig begrenzte Ressourcen definiert (anstelle des aktuellen Verhaltens, wenn der Ressourcenverbrauch unbegrenzt ist, wenn kein Kontingent festgelegt ist).

Azure


Für stabil erklärt:


Die ersten Implementierungen (Alpha-Versionen) werden hinzugefügt:


Kubectl


  • Es wurde eine Alpha-Version des aktualisierten Plug-In-Mechanismus implementiert, mit der Sie neue Befehle hinzufügen oder vorhandene Unterbefehle einer beliebigen Verschachtelungsebene neu schreiben können. Es ähnelt Git und betrachtet ausführbare Dateien, die mit kubectl- im $PATH des Benutzers beginnen. Weitere Einzelheiten finden Sie im Entwurfsvorschlag .
  • Eine Beta-Version der Idee, das pkg/kubectl/genericclioptions von kubectl in ein unabhängiges Repository zu isolieren, wurde implementiert.
  • Die serverseitige Druckfunktion wurde für stabil erklärt.

Andere


  • Die Alpha-Version des neuen TTL-After-Finish- Mechanismus, mit dem die Lebensdauer von Jobs und Pods begrenzt werden soll, deren Ausführung abgeschlossen ist, wird vorgestellt . Nach Ablauf der angegebenen TTL werden Objekte automatisch bereinigt, ohne dass ein Benutzereingriff erforderlich ist.
  • Die Generierung eines privaten Schlüssels und eines CSR (TLS Bootstrap) zum Signieren eines Zertifikats auf Clusterebene in Kubelet wird als stabil deklariert.
  • Die Rotation des Server-TLS-Zertifikats in Kubelet ging in den Beta-Status über.

PS


Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de424331/


All Articles