Kubernetes 1.15: Highlights Übersicht



Der Montag sollte offiziell stattfinden ( aber bisher ist dies nicht geschehen ... AKTUALISIERT am 20.06 .: Die Ankündigung erschien im K8s-Blog). Kubernetes nächste Veröffentlichung ist 1.15 . Gemäß der Tradition, die sich für unseren Blog entwickelt hat, sprechen wir über die wichtigsten Änderungen in der neuen Version.

Die zur Vorbereitung dieses Materials verwendeten Informationen stammen aus der Kubernetes-Erweiterungsverfolgungstabelle , CHANGELOG-1.15 und verwandten Problemen, Pull-Anforderungen sowie Kubernetes-Verbesserungsvorschlägen (KEP). Da die KubeCon-Konferenz in Shanghai nächste Woche stattfinden wird, hatte diese Veröffentlichung einen verkürzten 11-Wochen-Zyklus (anstelle von 12 Wochen), der jedoch die Anzahl der signifikanten Änderungen nicht wesentlich beeinflusste. Also lass uns gehen! ..

Data Warehouses


Einführung eines neuen API ExecutionHook , mit dem Sie Benutzerbefehle in einem Pod / Container oder einer Gruppe von Pods / Containern dynamisch ausführen können, und damit des entsprechenden Controllers ( ExecutionHookController ), der die Verwaltung des Hook-Lebenszyklus implementiert. Die Motivation für das Erscheinen dieser Funktion war der Wunsch, Benutzern die Möglichkeit zu geben, Schnappschüsse gemäß der Logik der Anwendung zu erstellen / löschen, d. H. Führen Sie vor und nach dem Erstellen des Snapshots alle anwendungsspezifischen Befehle aus. Es wird davon ausgegangen, dass solche Hooks auch in anderen Situationen nützlich sein können - beispielsweise beim Durchführen von Updates, beim Debuggen, beim Aktualisieren von Konfigurationsdateien, beim Neustarten des Containers und beim Vorbereiten auf andere Ereignisse wie die Datenbankmigration. Aktueller Status - Alpha-Version (voraussichtlich für die nächste Version in Beta übersetzt), Details - in KEP .

Im kurzlebigen Speicher , mit dem Sie für bestimmte Pods / Container die Menge des gemeinsam genutzten gemeinsam genutzten Speicherplatzes (gemeinsam genutzten Speicher) unterscheiden können , wurde die Unterstützung für Dateisystemkontingente hinzugefügt . Dieser neue Mechanismus verwendet Projektquoten ( Projektquoten ), die in XFS und ext4 verfügbar sind, und ermöglicht die Überwachung des Ressourcenverbrauchs und die optionale Auferlegung von Grenzwerten. Aktueller Status - Alpha-Version; Pläne für zukünftige Versionen wurden noch nicht spezifiziert.

Eine weitere neue Funktion von sig-storage ist die Verwendung vorhandener PVCs als DataSource zum Erstellen neuer PVCs. Mit anderen Worten ist dies eine Implementierung der Volume-Klonfunktion . Klone sollten von Snapshots unterschieden werden, da jeder Klon ein neues und „vollwertiges“ Volume ist: Er wird als Kopie eines vorhandenen Volumes erstellt, folgt jedoch vollständig dem Lebenszyklus normaler Volumes (im Gegensatz zu Snapshots, obwohl es sich um Kopien von Volumes zu einem bestimmten Zeitpunkt handelt, jedoch nicht unabhängig Bände). Gelegenheitsillustration:

 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-2 namespace: myns spec: capacity: storage: 10Gi dataSource: kind: PersistentVolumeClaim name: pvc-1 

In diesem Fall wird ein neues eigenständiges PV / PVC ( pvc-2 ) erstellt, das dieselben Daten wie auf pvc-1 . Es wird angegeben, dass das neue PVC den gleichen Namespace wie das Original haben sollte.

Die vorhandenen Einschränkungen werden nur für Dynamic Provisioner und nur für CSI-Plugins unterstützt (sie müssen über die Funktion CLONE_VOLUME ). Lesen Sie mehr bei KEP .

Die folgenden Funktionen sind auf den Status der Beta-Version (und damit auf die Aktivierung in Kubernetes Standardinstallationen) "angewachsen":

  • Persistente Volumengrößenerweiterungsfunktion "online", d.h. ohne dass der Pod mit dem entsprechenden PVC neu gestartet werden muss. Zum ersten Mal (im Alpha-Status) erschien es in K8s 1.11.
  • Unterstützung für Umgebungsvariablen für als subPath gemountete subPath , die erstmals in K8s 1.11 eingeführt und in der Vergangenheit 1.14 entwickelt wurden.

Der Prozess der Migration der Interna der alten Plug-Ins für Repositorys, die in der Kubernetes-Codebasis (In-Tree) implementiert sind, hat sich jedoch zugunsten der Plug-Ins für die neue CSI-Schnittstelle verschoben. Es wurde erwartet, dass die Version 1.15 die Migration aller Plug-Ins von Cloud-Anbietern abschließen wird. Es wurde jedoch beschlossen , den Status der Alpha-Version beizubehalten, da die Funktion von den in K8s 1.15 eingeführten und bislang nur in der Alpha-Version implementierten APIs abhängt (insbesondere handelt es sich um Verbesserungen in Azure-Unterstützung: Azure-Datei- und Azure-Festplatten- Plugins in csi-translation-lib).

Planer


Zwei bemerkenswerte Neuerungen - beide bisher in Alpha-Form - sind im Kubernetes Scheduler verfügbar.

Das erste ist das Scheduling Framework ( Kubernetes Scheduling Framework ), ein neuer Satz von APIs für Plugins, die die Funktionen eines vorhandenen Schedulers erweitern. Plugins werden außerhalb des Hauptrepositorys (außerhalb des Baums) erstellt, aber während der Kompilierung in den Scheduler aufgenommen. Somit bleibt der Funktionskern des Schedulers so einfach und bequem wie möglich zu unterstützen, und zusätzliche Funktionen werden separat implementiert, ohne die vielen Einschränkungen, die die derzeitige Art der Erweiterung der Funktionen des Schedulers mithilfe von Webhooks "erlitten" hat.

In dem neuen Framework ist jeder Pod-Planungsversuch in zwei Phasen unterteilt:

  • Planungszyklus - wo der Knoten für den Pod ausgewählt ist,
  • und Bindung (Bindungszyklus) - wobei die ausgewählte Lösung innerhalb des Clusters implementiert ist.

In jeder dieser Phasen (zusammen werden sie auch als Planungskontext bezeichnet ) gibt es viele Erweiterungspunkte , an denen jeweils Framework-Plugins aufgerufen werden können.


(Lebenszyklus zum Aufrufen von Plugins im Scheduling Framework.)

Als Teil der Alpha-Version des Frameworks werden nur Reserve- , Unreserve- und Prebind-Punkte implementiert . Lesen Sie mehr über diese massive Innovation bei KEP .

Die zweite Option ist die Non-Preempting- Option für PriorityClasses .

Prioritätsklassen erhielten in der letzten Version von Kubernetes einen stabilen Status (GA), was sich auf die Planung und Auswahl von Pods auswirkte: Pods werden nach Priorität geplant. Wenn Pods aufgrund fehlender Ressourcen nicht erstellt werden können, werden Pods erstellt Eine niedrigere Priorität kann verdrängt werden, um den erforderlichen Speicherplatz freizugeben.

Die neue Option - Preempting , die in der PriorityClass Struktur als Boolescher Preempting definiert ist, bedeutet: Wenn ein Pod auf seine Planung wartet und Preempting=false , werden beim Erstellen anderer Pods keine anderen Pods vorbelegt. Dieses Feld wird in PodSpec während des Pod-Zulassungsprozesses PodSpec (ähnlich dem PriorityClass Wert). Details zur Implementierung finden Sie in KEP .

API-Maschinen


Für CustomResources werden Verbesserungen vorgestellt, die für auf diese Weise gespeicherte Daten (im Rahmen von JSON in CRD) ein Verhalten implementieren sollen, das besser mit der allgemein akzeptierten Kubernetes-API übereinstimmt (für "native" K8s-Objekte):

  • Automatisches Löschen von Feldern, die nicht in OpenAPI-Validierungsschemata angegeben sind - Einzelheiten finden Sie in KEP „ Bereinigen für benutzerdefinierte Ressourcen “.
  • Die Möglichkeit, Standardwerte für Felder in OpenAPI v3-Validierungsschemata festzulegen. Dies ist besonders wichtig, um die API-Kompatibilität beim Hinzufügen neuer Felder zu Objekten aufrechtzuerhalten. Weitere Informationen finden Sie unter KEP „ Standard für benutzerdefinierte Ressourcen “.

Beide Funktionen sollten ursprünglich in der Version von K8s 1.12 enthalten sein, werden jedoch erst jetzt in Alpha-Versionen angeboten.

Die Änderungen der CRD waren nicht darauf beschränkt:

  • CRD OpenAPI- Funktion veröffentlichen - d. H. Die serverseitige CustomResources-Validierung (unter Verwendung des OpenAPI v3-Schemas), die in der letzten Kubernetes-Version eingeführt wurde, hat die Beta erreicht und ist jetzt standardmäßig aktiviert.
  • Der Versionskonvertierungsmechanismus für CRD-Ressourcen, die auf externen Webhooks basieren, wurde ebenfalls auf Beta konvertiert.

Eine weitere interessante Neuerung heißt Watch bookmark . Seine Essenz besteht darin, der Watch API - Bookmark einen neuen Ereignistyp hinzuzufügen. Dieser Typ bedeutet eine Bezeichnung, dass alle Objekte bis zu einer bestimmten resourceVersion bereits von der Uhr verarbeitet wurden. Ein solcher Mechanismus verringert die Belastung des Kube-Apiservers, verringert die Anzahl der Ereignisse, die bei jedem Neustart der Uhr verarbeitet werden müssen, und verringert die Anzahl unerwünschter Fehler wie "Ressourcenversion zu alt" . In Kubernetes 1.15 hat die Funktion den Status der Alpha-Version, und ihre Erhöhung auf Beta wird für die nächste Version erwartet.

  Added EventType = "ADDED" Modified EventType = "MODIFIED" Deleted EventType = "DELETED" Error EventType = "ERROR" Bookmark EventType = "BOOKMARK" 

(Mögliche Ereignistypen in der Watch-API.)

In Admission Webhooks:

  • Unterstützung für einen Objektselektor zusätzlich zu vorhandenen Namespace-Selektoren hinzugefügt
  • die Möglichkeit implementiert , eine bestimmte Version einer Ressource zu registrieren und aufzurufen, wenn eine ältere Version dieser Ressource geändert wird;
  • Das Feld Option wurde der AdmissionReview-API hinzugefügt und enthält Berichtsoptionen für den ausgeführten Vorgang.

Netzwerk


Eine bedeutende Neuerung im Netzwerkteil von Kubernetes ist der sogenannte " Finalizer Protection" für Load Balancer. Bevor Sie die Ressourcen des LoadBalancer löschen, wird überprüft, ob die entsprechende Serviceressource nicht vollständig gelöscht wurde. Zu diesem type=LoadBalancer wird jedem Dienst ein sogenannter Finalizer mit dem type=LoadBalancer : Wenn ein solcher Dienst gelöscht wird, wird das tatsächliche Löschen der Ressource blockiert, bis der Finalizer gelöscht wird, und der Finalizer wird nicht gelöscht, bis das "Löschen" der Ressourcen des entsprechenden Load Balancers abgeschlossen ist ( service.kubernetes.io/load-balancer-cleanup ). Die aktuelle Version der Implementierung ist die Alpha-Version. Details dazu finden Sie in KEP .

Außerdem:

  • Das in Kubernetes 1.13 eingeführte NodeLocal DNS Cache- Plugin zur Verbesserung der DNS-Leistung hat die Beta erreicht.
  • Kube-Proxy entfernt Netzwerkregeln, die aufgrund seines Betriebs in anderen Modi erstellt wurden, nicht mehr automatisch (dies erfordert den expliziten Start von kube-proxy --cleanup ).

CLI


Wie immer gab es in Konsolenbefehlen einige nette Kleinigkeiten für die Arbeit mit Kubernetes-Clustern:

  • Die Übertragung von kubectl get , um Daten vom Server (und nicht vom Client) zu empfangen, um die Erweiterungen vollständig zu unterstützen, wird als abgeschlossen (stabil) erklärt.
  • In kubectl top die Option --sort-by hinzugefügt :

     $ kubectl --kubeconfig=kubectl.kubeconfig top pod --sort=memory NAME CPU(cores) MEMORY(bytes) elasticsearch-logging-v1-psc43 2m 2406Mi hadoop-journalnode-2 13m 362Mi hodor-v0.0.5-3204531036-fqb0q 23m 64Mi kubernetes-admin-mongo-... 5m 44Mi cauth-v0.0.5-2463911897-165m8 34m 10Mi test-1440672787-kvx8h 0m 1Mi 
  • Beim kubectl rollout restart Unterstützung für DaemonSets und StatefulSets hinzugefügt .
  • Zum Aktualisieren von Clusterknoten wurde ein neuer Befehl für den kubeadm upgrade node , der die kubeadm upgrade node config kubeadm upgrade node experimental-control-plane kubeadm upgrade node config ersetzt (jetzt für veraltet erklärt).
  • Neue kubeadm alpha certs certificate-key (zum Generieren eines zufälligen Schlüssels, der dann an kubeadm init --experimental-upload-certs ) und kubeadm alpha certs check-expiration (um die Gültigkeitsdauer lokaler PKI-Zertifikate zu überprüfen) werden kubeadm alpha certs check-expiration .
  • Der kubeadm config upload veraltet, da seine Ersetzung ( kubeadm init phase upload-config ) ausgereift ist.

Andere


Unter anderen bemerkenswerten Änderungen in Kubernetes 1.15:

  • Die Unterstützung für das Pod Disruption Budget (PDB) wurde für CRD-basierte Ressourcen / Controller von Drittanbietern (z. B. EtcdCluster, MySQLReplicaSet ...) mithilfe der Scale-Unterressource hinzugefügt . Bisher ist dies eine Beta-Version, die in der nächsten Version stabilisiert wird. Details finden Sie im KEP .
  • Zwei Funktionen für Knoten / Kubelet haben die Beta-Version erreicht: Unterstützung für Geräteüberwachungs-Plug-Ins von Drittanbietern (um alle gerätespezifischen Kenntnisse aus Kubelet zu entfernen, d. H. Außerhalb des Baums) und SupportNodePidsLimit (Isolierung von PIDs von Knoten zu Schoten).
  • Die Unterstützung für Go-Module wurde hinzugefügt und standardmäßig für die Kubernetes-Codebasis aktiviert (anstelle von Godep und dem veralteten GOPATH-Modus).
  • Die Unterstützung für AWS NLB (Network Load Balancer), die erstmals in K8s 1.9 eingeführt wurde, hat das Beta-Level erreicht. Insbesondere konnte sie accessLogs konfigurieren, TLS beenden und LoadBalancerSourceRanges .
  • Die Möglichkeit zum Konfigurieren des Azure-Cloud-Anbieters cloudConfigType von Kubernetes-Geheimnissen wurde cloudConfigType (hierfür wurde eine neue cloudConfigType Option cloudConfigType , von der eine möglicherweise secret ). Außerdem kann Kubelet in Azure jetzt auch ohne Azure-Identität arbeiten ( useInstanceMetadata muss dafür aktiviert sein).
  • Im Cluster-Lebenszyklus wurde die Möglichkeit zum Erstellen von HA-Clustern mit kubeadm in die Beta-Phase gebracht und der nächste Schritt (v1beta2) zur Neuorganisation des Formats der kubeadm-Konfigurationsdatei abgeschlossen.
  • Die Anzahl der Pods im Status " Ausstehend " in verschiedenen Warteschlangen wird zu den Metriken des Schedulers hinzugefügt , und Statistiken zu Volumes über Kubelet-Volume-Metriken von CSI werden hinzugefügt.
  • Aktualisierungen in der verwendeten / abhängigen Software: Go 1.12.5, cri-tools 1.14.0 usw. 3.3.10 (die Version wurde für den Server nicht geändert, aber für den Client aktualisiert) . Die Versionen von CNI, CSI, CoreDNS haben sich nicht geändert (in einer der Alpha-Versionen von Kubernetes 1.15 wurde es auf 1.5.0 aktualisiert, dann aber auf 1.3.1 zurückgesetzt) , unterstützte Versionen von Docker.

PS


Lesen Sie auch in unserem Blog:

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


All Articles