Kubernetes 1.14: Überblick über die wichtigsten Neuerungen

Kubernetes 1.14: Überblick über die wichtigsten Neuerungen

In dieser Nacht stattfinden ist das nächste Release von Kubernetes — 1.14. In Übereinstimmung mit der Tradition unseres Blogs berichten wir über die wichtigsten Änderungen in der neuen Version dieses bemerkenswerten Open Source-Produkts.

Die Informationen, die zur Erstellung dieses Materials verwendet wurden, stammen aus der Tabelle zur Verfolgung von Kubernetes-Verbesserungen, CHANGELOG-1.14 und zugehörige Issues, Pull Requests, Kubernetes Enhancement Proposals (KEP).

Beginnen wir mit einer wichtigen Einführung von SIG cluster-lifecycle: dynamische, ausfallsichere Cluster Kubernetes (oder, um genauer zu sein, selbstgehostete HA-Deployments) können jetzt mit den gewohnten (im Kontext von Einzelnutzern-Clustern) Befehlen ). Kurz gesagt: kubeadm zu wechseln. (init und beitretendie vom Cluster verwendeten Zertifikate werden in Secrets übertragen;

Kubernetes 1.14: Überblick über die wichtigsten Neuerungen
Die Einzelheiten zur Implementierung sind in

design proposal design proposal. Dieses Feature wurde wirklich lang erwartet: Die Alpha-Version wurde bereits für K8s 1.9 angekündigt, ist aber erst jetzt verfügbar.

API

Der Befehl apply und allgemein deklarative Verwaltung von Objekten ausgelagert von kubectl in den apiserver. Die Entwickler erläutern kurz ihre Entscheidung damit, dass kubectl apply — ein grundlegender Teil der Arbeit mit Konfigurationen in Kubernetes, jedoch voller Bugs und schwer zu reparieren ist, weshalb diese Funktionalität in einen funktionierenden Zustand gebracht und in den Control Plane verlagert werden muss. Hier sind einige einfache und anschauliche Beispiele für bestehende Probleme:

Kubernetes 1.14: Überblick über die wichtigsten Neuerungen

Details zur Implementierung finden Sie in KEP. Der aktuelle Status ist Alpha-Version (das Upgrade auf Beta ist für die nächste Kubernetes-Version geplant).

In der Alpha-Version wurde die Möglichkeit die Verwendung des OpenAPI v3-Schemas für die Erstellung und Veröffentlichung von OpenAPI-Dokumentation für CustomResources (CR), die zur Validierung (auf Serverseite) von K8s-Ressourcen dienen, die vom Benutzer definiert sind (CustomResourceDefinition, CRD). Die Veröffentlichung von OpenAPI für CRD ermöglicht es den Clients (zum Beispiel, kubectl) die Validation auf ihrer Seite (im Rahmen von kubectl create und kubectl apply) durchzuführen und Schemadokumentation bereitzustellen (kubectl explain). Weitere Details finden Sie in KEP.

Frühere Protokolle werden jetzt geöffnet das Flag O_APPEND (und nicht O_TRUNC) um den Verlust von Logs in bestimmten Situationen zu vermeiden und um das Truncieren von Logs mit externen Tools zur Rotation zu erleichtern.

Im Kontext der Kubernetes-API ist zudem zu erwähnen, dass in PodSandbox und PodSandboxStatus wurde hinzugefügt das Feld runtime_handler zur Erfassung von Informationen über RuntimeClass in einem Pod (näheres dazu erfahren Sie im Text über Kubernetes Version 1.12, wo diese Klasse als Alpha-Version eingeführt wurde), sowie in den Admission Webhooks wurde die Möglichkeit besteht, welche Versionen AdmissionReview sie unterstützen. Schließlich können in den Regeln für Admission Webhooks nun die Anwendung auf Namespaces und Clustergrenzen beschränkt werden.

Speicherlösungen

PersistenteLokaleVolumes, die mit dem Status Beta seit der Veröffentlichung K8s 1.10, deklariert wurden sind jetzt stabil (GA): dieses Feature-Gate wird nicht mehr deaktiviert und wird in Kubernetes 1.17 entfernt.

Möglichkeit die Verwendung von Umgebungsvariablen bekannt als Downward API (zum Beispiel den Namen des Pods) für die Benennung von Verzeichnissen, die als subPathgemountet werden, hat sich weiterentwickelt – in Form eines neuen Feldes subPathExpr, welches nun zur Bestimmung des erforderlichen Verzeichnisnamens verwendet wird. Dieses Feature erschien ursprünglich in Kubernetes 1.11, blieb jedoch auch für 1.14 im Alpha-Status.

Wie in der vorherigen Version von Kubernetes wurden viele bedeutende Änderungen für das aktiv weiterentwickelte CSI (Container Storage Interface) vorgestellt:

CSI

Wurde in der Alpha-Version verfügbar gemacht Unterstützung für Änderung der Größe für CSI-Volumes. Um es zu nutzen, müssen Sie das Feature-Gate mit dem Namen ExpandCSIVolumesaktivieren und die Unterstützung dieser Operation im spezifischen CSI-Treiber vorhanden sein.

Eine weitere Funktion für CSI in der Alpha-Version ist die Möglichkeit die direkte Referenzierung (d.h. ohne Verwendung von PV/PVC) auf CSI-Volumes innerhalb der Pod-Spezifikation. Dies aufhebt die Einschränkung, CSI ausschließlich als entfernte Datenspeicher zu verwenden, und öffnet ihnen die Türen zur Welt lokaler ephemerer Volumes. Für die Nutzung (aus der Dokumentation) muss das CSIInlineVolume Feature-Gate aktiviert werden.

Es gibt Fortschritte in den „Innereien“ von Kubernetes in Bezug auf CSI, die den Endbenutzern (Systemadministratoren) nicht so offensichtlich sind... Momentan sind die Entwickler gezwungen, zwei Versionen jedes Storage-Plugins zu pflegen: eine „alte“ Version innerhalb der K8s-Codebasis (in-tree) und eine zweite im Rahmen des neuen CSI. (näheres dazu lesen Sie zum Beispiel in hier). Dies verursacht verständliche Unannehmlichkeiten, die beseitigt werden müssen, während sich CSI als solches stabilisiert. Einfach die in den internen (in-tree) Plugins verwendeten APIs als veraltet zu erklären, ist aufgrund von entsprechenden Kubernetes-Richtlinien.

All dies führte dazu, dass die Alpha-Versionen erreicht wurden Migrationsprozess internen Plugin-Code, die als in-tree und in CSI-Plugins implementiert werden, wodurch die Sorgen der Entwickler auf die Unterstützung einer Version ihrer Plugins reduziert werden und die Kompatibilität mit älteren APIs erhalten bleibt, sodass sie im üblichen Szenario als veraltet deklariert werden können. Es wird erwartet, dass bis zur nächsten Kubernetes-Version (1.15) alle Plugins von Cloud-Anbietern migriert, die Implementierung den Status einer Beta-Version erhalten und in K8s-Installationen standardmäßig aktiviert wird. Weitere Informationen finden Sie in design proposal. Die Folge dieser Migration war auch der Verzicht auf von Einschränkungen für Volumes, die von bestimmten Cloud-Anbietern (AWS, Azure, GCE, Cinder) definiert werden.

Darüber hinaus wird die Unterstützung von Blockgeräten mit CSI (CSIBlockVolume) in die Beta-Version überführt .

Knoten / Kubelet

Die Alpha-Version wurde eingeführt neuer Endpunkt in Kubelet, der für die Bereitstellung von Metriken zu den grundlegenden Ressourcen gedacht ist. Generell erhält Kubelet, anstatt die Container-Nutzungsstatistiken von cAdvisor zu beziehen, nun diese Daten aus der Ausführungsumgebung des Containers über die CRI (Container Runtime Interface). Allerdings bleibt die Kompatibilität zu älteren Docker-Versionen erhalten. Früher wurde die in Kubelet gesammelte Statistik über die REST API bereitgestellt, jetzt wird dafür ein Endpoint verwendet, der unter folgender Adresse zu finden ist. /metrics/resource/v1alpha1. Die langfristige Strategie der Entwickler besteht darin, die Anzahl der von Kubelet bereitgestellten Metriken zu minimieren. Übrigens werden diese Metriken nun als nicht mehr «Core-Metriken», sondern «Ressourcen-Metriken» bezeichnet, die als «erstklassige Ressourcen, wie CPU und Arbeitsspeicher» beschrieben werden.

Ein interessanter Punkt: Trotz der offensichtlichen Leistungsvorteile des gRPC-Endpunkts im Vergleich zu verschiedenen Verwendungsszenarien des Prometheus-Formats (das Ergebnis eines der Benchmarks, siehe unten), bevorzugten die Autoren das textbasierte Format von Prometheus aufgrund der klaren Führungsposition dieses Überwachungssystems in der Community.

gRPC ist nicht mit den wichtigsten Monitoring-Pipelines kompatibel. Der Endpoint wird jedoch nur nützlich sein, um Metriken an den Metrics Server oder Monitoring-Komponenten zu liefern, die direkt mit ihm integriert sind. Bei Verwendung von Caching im Metrics Server ist die Leistung des textbasierten Formats von Prometheus ausreichend gut für uns, um Prometheus gegenüber gRPC zu bevorzugen, aufgrund der weitreichenden Verbreitung von Prometheus in der Community. Wenn das OpenMetrics-Format stabiler wird, können wir die Leistung von gRPC mit einem auf Proto basierenden Format annähern.

Kubernetes 1.14: Überblick über die wichtigsten Neuerungen
Einer der Vergleichstests zur Leistung von gRPC- und Prometheus-Formaten im neuen Kubelet-Endpoint für Metriken. Mehr Grafiken und weitere Details finden Sie in KEP.

Unter den weiteren Änderungen:

  • Kubelet versucht jetzt (einmalig) Container in unbekanntem Zustand (unknown) vor den Neustart- und Löschoperationen zu stoppen. PodPresets
  • Bei der Nutzung PodPresets jetzt dem Init-Container hinzugefügt wird die gleichen Informationen wie dem regulären Container.
  • Kubelet hat begonnen, usageNanoCores vom CRI-Statistikanbieter zu verwenden, und für Knoten und Container in Windows hinzugefügt Netzwerkstatistiken.
  • Informationen über das Betriebssystem und die Architektur werden jetzt in Labels aufgezeichnet. kubernetes.io/os und kubernetes.io/arch Node-Objekte (von Beta in GA überführt).
  • Die Möglichkeit, eine bestimmte Benutzergruppe für Container im Pod anzugeben (RunAsGroup, wurde eingeführt in K8s 1.11) weiterentwickelt bis zur Beta-Version (standardmäßig aktiviert).
  • du und find, die in cAdvisor verwendet werden, wurden durch Go-Implementierungen ersetzt.

CLI

Im cli-runtime und kubectl ein das -k-Flag zur Integration mit kustomize (übrigens wird dessen Entwicklung jetzt in einem separaten Repository durchgeführt), d.h. zur Verarbeitung zusätzlicher YAML-Dateien aus speziellen Verzeichnissen der kustomization (weiterführende Informationen zur Verwendung finden Sie in KEP):

Kubernetes 1.14: Überblick über die wichtigsten Neuerungen
Beispiel für die einfache Verwendung der Datei kustomization (kompliziertere Anwendungen von kustomize sind ebenfalls möglich im Rahmen von overlays)

Darüber hinaus:

  • Hinzugefügt neuer Befehl kubectl create cronjob, dessen Name für sich spricht.
  • In kubectl logs ist jetzt möglich kombinieren Flags -f (--follow zum Streaming von Logs) und -l (--selector für die Label-Abfrage).
  • kubectl gelernt Dateien auszuwählen, die mit Wildcards kopiert werden.
  • Im Befehl kubectl wait wurde erweitert Das Flag --all um alle Ressourcen eines spezifizierten Ressourcentyps im Namespace auszuwählen.

Andere

Folgende Funktionen haben den stabilen (GA) Status erreicht:

Weitere Änderungen, die in Kubernetes 1.14 eingeführt wurden:

  • Die Standard-RBAC-Policy gewährt keinen Zugriff mehr auf die API discovery und access-review Benutzern ohne Authentifizierung (unauthenticated).
  • Offizielle Unterstützung für CoreDNS wird ausschließlich für Linux bereitgestellt, daher müssen bei der Verwendung von kubeadm zur Bereitstellung von CoreDNS im Cluster die Knoten nur unter Linux laufen (für diese Einschränkung werden nodeSelectors verwendet).
  • Die Standardkonfiguration von CoreDNS ist jetzt nutzt das Forward-Plugin anstelle von Proxy. Darüber hinaus gibt es in CoreDNS hinzugefügt eine readinessProbe, die das Load Balancing für die entsprechenden (nicht einsatzbereiten) Pods verhindert.
  • In kubeadm, während der Phasen init oder upload-certs, wurde es möglich die erforderlichen Zertifikate für den Anschluss eines neuen control-plane an das Secret kubeadm-certs hochzuladen (das Flag --experimental-upload-certs).
  • Für Windows-Installationen gibt es eine Alpha-Version von Unterstützung gMSA (Group Managed Service Account) — spezielle Konten in Active Directory, die auch von Containern verwendet werden können.
  • Für GCE wurde aktiviert mTLS-Verschlüsselung zwischen etcd und kube-apiserver.
  • Updates in the used/dependent software: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09 support in kubeadm, with the minimum supported version of Docker API being 1.26.

P.S.

Lesen Sie auch in unserem Blog:

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster