Kubernetes 1.14: Highlights der Neuerungen

Kubernetes 1.14: Highlights der Neuerungen

Diese Nacht gehalten nächste Version von Kubernetes - 1.14. Gemäß der Tradition, die sich für unseren Blog entwickelt hat, sprechen wir über die wichtigsten Änderungen in der neuen Version dieses wunderbaren Open-Source-Produkts.

Die zur Erstellung dieses Materials verwendeten Informationen stammen aus Tabellen zur Nachverfolgung von Kubernetes-Erweiterungen, CHANGELOG-1.14 und verwandte Probleme, Pull Requests, Kubernetes Enhancement Proposals (KEP).

Beginnen wir mit einer wichtigen Einführung aus dem SIG-Cluster-Lebenszyklus: dynamische Failover-Cluster Kubernetes (oder genauer gesagt selbst gehostete HA-Bereitstellungen) ist jetzt verfügbar kann erstellen Verwendung bekannter Befehle (im Kontext von Einzelknoten-Clustern). kubeadm (init и join). Kurz gesagt, dazu:

  • vom Cluster verwendete Zertifikate werden in Geheimnisse übertragen;
  • für die Möglichkeit, den etcd-Cluster innerhalb des K8s-Clusters zu verwenden (d. h. die zuvor bestehende externe Abhängigkeit zu beseitigen) etcd-Operator;
  • Dokumentiert die empfohlenen Einstellungen für einen externen Load Balancer, der eine fehlertolerante Konfiguration bereitstellt (es ist geplant, diese Abhängigkeit in Zukunft zu beseitigen, jedoch noch nicht).

Kubernetes 1.14: Highlights der Neuerungen
Architektur eines mit kubeadm erstellten Kubernetes HA-Clusters

Details zur Umsetzung finden Sie in Designvorschlag. Dieses Feature wurde wirklich lange erwartet: Die Alpha-Version wurde bereits in K8s 1.9 erwartet, erschien aber erst jetzt.

API

Team apply und überhaupt deklarative Objektverwaltung bestanden von kubectl im Apiserver. Damit begründen die Entwickler selbst kurz ihre Entscheidung kubectl apply - ein grundlegender Bestandteil der Arbeit mit Konfigurationen in Kubernetes, jedoch „ist es voller Fehler und schwer zu beheben“ und daher muss diese Funktionalität wieder normalisiert und auf die Steuerungsebene übertragen werden. Einfache und klare Beispiele für Probleme, die heute bestehen:

Kubernetes 1.14: Highlights der Neuerungen

Details zur Umsetzung finden Sie in KEP. Die aktuelle Bereitschaft ist Alpha (die Weiterentwicklung zur Beta ist für die nächste Kubernetes-Version geplant).

Verfügbar in der Alpha-Version Gelegenheit Verwenden des OpenAPI v3-Schemas für Erstellen und Veröffentlichen der OpenAPI-Dokumentation für CustomResources (CR) wird zur (serverseitigen) Validierung benutzerdefinierter K8-Ressourcen (CustomResourceDefinition, CRD) verwendet. Durch die Veröffentlichung von OpenAPI für CRD können Clients (z. B. kubectl) Führen Sie eine Validierung auf Ihrer Seite durch (innerhalb von kubectl create и kubectl apply) und Dokumentation gemäß dem Schema ausstellen (kubectl explain). Details - in KEP.

Vorhandene Protokolle eröffnen jetzt mit Fahne O_APPEND (und nicht O_TRUNC), um den Verlust von Protokollen in manchen Situationen zu vermeiden und um das Abschneiden von Protokollen mit externen Dienstprogrammen für die Rotation zu vereinfachen.

Auch im Kontext der Kubernetes API lässt sich feststellen, dass in PodSandbox и PodSandboxStatus hinzugefügt Bereich runtime_handler Informationen darüber aufzeichnen RuntimeClass im Pod (lesen Sie mehr darüber im Text über Kubernetes 1.12-Version, wo diese Klasse als Alpha-Version erschien) und in Admission Webhooks umgesetzt Möglichkeit, die Versionen zu bestimmen AdmissionReview Sie unterstützen. Schließlich gelten nun die Admission Webhooks-Regeln kann begrenzt werden das Ausmaß ihrer Nutzung durch Namespaces und Cluster-Frameworks.

Tresore

PersistentLocalVolumes, das seit der Veröffentlichung Beta-Status hatte K8s 1.10, angekündigt stabil (GA): Dieses Feature-Gate ist nicht mehr deaktiviert und wird in Kubernetes 1.17 entfernt.

Gelegenheit unter Verwendung von Umgebungsvariablen namens Abwärts-API (z. B. der Pod-Name) für die Namen der Verzeichnisse, die als gemountet sind subPath, wurde entwickelt – in Form eines neuen Feldes subPathExpr, mit der nun der gewünschte Verzeichnisname ermittelt wird. Die Funktion erschien ursprünglich in Kubernetes 1.11, blieb aber für 1.14 im Alpha-Versionsstatus.

Wie bei der vorherigen Kubernetes-Version werden viele wichtige Änderungen für das sich aktiv entwickelnde CSI (Container Storage Interface) eingeführt:

CSI

Wurde verfügbar (als Teil der Alpha-Version) unterstützen Größenänderung für CSI-Volumes. Um es zu verwenden, müssen Sie das sogenannte Feature-Gate aktivieren ExpandCSIVolumessowie das Vorhandensein einer Unterstützung für diesen Vorgang in einem bestimmten CSI-Treiber.

Ein weiteres Feature für CSI in der Alpha-Version - Gelegenheit Verweisen Sie direkt (d. h. ohne Verwendung von PV/PVC) auf CSI-Volumes innerhalb der Pod-Spezifikation. Das hebt die Einschränkung der Nutzung von CSI als ausschließlich Remote-Datenspeicher aufund öffnete ihnen Türen zur Welt lokale, vergängliche Volumina. Für den Einsatz (Beispiel aus der Dokumentation) muss aktiviert sein CSIInlineVolume Feature-Tor.

Es gab auch Fortschritte bei den „Interna“ von Kubernetes im Zusammenhang mit CSI, die für Endbenutzer (Systemadministratoren) nicht so sichtbar sind ... Derzeit sind Entwickler gezwungen, zwei Versionen jedes Speicher-Plugins zu unterstützen: eine – „im old way“, innerhalb der K8s-Codebasis (in -tree) und der zweite – als Teil des neuen CSI (Lesen Sie mehr darüber zum Beispiel in hier). Dies verursacht verständliche Unannehmlichkeiten, die behoben werden müssen, wenn sich CSI selbst stabilisiert. Aus diesem Grund ist es nicht möglich, die API interner (in-tree) Plugins einfach abzulehnen relevante Kubernetes-Richtlinie.

All dies führte dazu, dass die Alpha-Version erreicht wurde Migrationsprozess interner Plugin-Code, implementiert als In-Tree, in CSI-Plugins, wodurch die Sorgen der Entwickler auf die Unterstützung einer Version ihrer Plugins reduziert werden, die Kompatibilität mit alten APIs erhalten bleibt und sie im üblichen Szenario für veraltet erklärt werden können. Es wird erwartet, dass bis zum nächsten Release von Kubernetes (1.15) alle Cloud-Provider-Plugins migriert werden, die Implementierung Beta-Status erhält und in K8s-Installationen standardmäßig aktiviert wird. Einzelheiten finden Sie unter Designvorschlag. Diese Migration führte auch dazu Ausfall von Volumengrenzen, die von bestimmten Cloud-Anbietern (AWS, Azure, GCE, Cinder) definiert werden.

Darüber hinaus Unterstützung für Blockgeräte mit CSI (CSIBlockVolume) übertragen zur Beta-Version.

Knoten/Kubelet

Alpha-Version vorgestellt neuer Endpunkt in Kubelet, entworfen für Rückgabemetriken für wichtige Ressourcen. Generell gilt: Während Kubelet früher Statistiken zur Containernutzung von cAdvisor erhielt, stammen diese Daten nun über CRI (Container Runtime Interface) aus der Container-Laufzeitumgebung, aber auch die Kompatibilität für die Arbeit mit älteren Docker-Versionen bleibt erhalten. Früher wurden in Kubelet gesammelte Statistiken über die REST-API gesendet, jetzt befindet sich ein Endpunkt unter /metrics/resource/v1alpha1. Langfristige Strategie der Entwickler besteht besteht darin, die von Kubelet bereitgestellten Metriken zu minimieren. Übrigens, diese Metriken selbst Jetzt rufen sie an nicht „Kernmetriken“, sondern „Ressourcenmetriken“ und werden als „erstklassige Ressourcen wie CPU und Speicher“ beschrieben.

Eine sehr interessante Nuance: Trotz des deutlichen Leistungsvorteils des gRPC-Endpunkts im Vergleich zu verschiedenen Fällen der Verwendung des Prometheus-Formats (siehe das Ergebnis eines der Benchmarks unten)Aufgrund der klaren Führung dieses Überwachungssystems in der Community bevorzugten die Autoren das Textformat von Prometheus.

„gRPC ist nicht mit den großen Überwachungspipelines kompatibel. Endpoint ist nur für die Bereitstellung von Metriken an Metrics Server oder die Überwachung von Komponenten nützlich, die direkt darin integriert sind. Leistung des Prometheus-Textformats bei Verwendung von Caching in Metrics Server gut genug Angesichts der weit verbreiteten Akzeptanz von Prometheus in der Community empfehlen wir Prometheus gegenüber gRPC. Sobald das OpenMetrics-Format stabiler wird, können wir die gRPC-Leistung mit einem protobasierten Format erreichen.“

Kubernetes 1.14: Highlights der Neuerungen
Einer der vergleichenden Leistungstests zur Verwendung der Formate gRPC und Prometheus im neuen Kubelet-Endpunkt für Metriken. Weitere Grafiken und andere Details finden Sie in KEP.

Unter anderem:

  • Kubelet jetzt (einmalig) versuche aufzuhören Container in einem unbekannten Zustand vor Neustart- und Löschvorgängen.
  • Wenn Sie PodPresets Nun zum Init-Container hinzugefügt wird die gleichen Informationen wie für einen normalen Container.
  • kubelet begann zu verwenden usageNanoCores vom CRI-Statistikanbieter und für Knoten und Container unter Windows hinzugefügt Netzwerkstatistiken.
  • Betriebssystem- und Architekturinformationen werden jetzt in Etiketten aufgezeichnet kubernetes.io/os и kubernetes.io/arch Knotenobjekte (von Beta auf GA übertragen).
  • Möglichkeit, eine bestimmte Systembenutzergruppe für Container in einem Pod anzugeben (RunAsGroup, erschien in K8s 1.11) fortschrittlich vor der Betaversion (standardmäßig aktiviert).
  • du und find werden in cAdvisor verwendet, ersetzt durch On-Go-Implementierung.

CLI

In CLI-Runtime und Kubectl hinzugefügt -k Flag für die Integration mit anpassen (Übrigens wird seine Entwicklung jetzt in einem separaten Repository durchgeführt), d. h. um zusätzliche YAML-Dateien aus speziellen Anpassungsverzeichnissen zu verarbeiten (Einzelheiten zu deren Verwendung finden Sie unter KEP):

Kubernetes 1.14: Highlights der Neuerungen
Beispiel für eine einfache Dateinutzung Anpassung (Eine komplexere Anwendung von kustomize ist innerhalb möglich Overlays)

Außerdem:

  • Hinzugefügt von neues Team kubectl create cronjob, dessen Name für sich spricht.
  • В kubectl logs kann jetzt kombinieren Fahnen -f (--follow für Streaming-Protokolle) und -l (--selector für Etikettenabfrage).
  • kubectl gelernt Mit Platzhalter ausgewählte Dateien kopieren.
  • Zum Team kubectl wait hinzugefügt Flagge --all um alle Ressourcen im Namespace des angegebenen Ressourcentyps auszuwählen.

Andere

Die folgenden Funktionen haben den Status „Stabil“ (GA) erhalten:

Weitere in Kubernetes 1.14 eingeführte Änderungen:

  • Die Standard-RBAC-Richtlinie erlaubt keinen API-Zugriff mehr discovery и access-review Benutzer ohne Authentifizierung (nicht authentifiziert).
  • Offizielle CoreDNS-Unterstützung zur Verfügung gestellt von Nur Linux. Wenn Sie also kubeadm zum Bereitstellen (CoreDNS) in einem Cluster verwenden, dürfen Knoten nur unter Linux ausgeführt werden (für diese Einschränkung werden nodeSelectors verwendet).
  • Die Standard-CoreDNS-Konfiguration ist jetzt verwendet Forward-Plugin statt Proxy. Auch in CoreDNS hinzugefügt readinessProbe, das den Lastausgleich auf geeigneten (nicht betriebsbereiten) Pods verhindert.
  • In kubeadm, auf Phasen init oder upload-certs, möglich wurde Laden Sie die Zertifikate, die erforderlich sind, um die neue Steuerungsebene mit dem kubeadm-certs-Geheimnis zu verbinden (verwenden Sie das Flag --experimental-upload-certs).
  • Für Windows-Installationen ist eine Alpha-Version erschienen Unterstützung gMSA (Group Managed Service Account) – spezielle Konten im Active Directory, die auch von Containern genutzt werden können.
  • Für G.C.E. aktiviert mTLS-Verschlüsselung zwischen etcd und kube-apiserver.
  • Updates in verwendeter/abhängiger Software: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09-Unterstützung in kubeadm und die minimal unterstützte Docker-API-Version ist jetzt 1.26.

PS

Lesen Sie auch auf unserem Blog:

Source: habr.com

Kommentar hinzufügen