Kubernetes 1.11: Ein Überblick über die wichtigsten Innovationen


Kubernetes 1.11 wurde am Mittwoch veröffentlicht . Wir setzen unsere Tradition fort und sprechen über die wichtigsten Änderungen, basierend auf Daten aus CHANGELOG-1.11 und zahlreichen Themen, Pull-Anfragen und Designvorschlägen. Was ist neu in K8s 1.11?

Netzwerke


Beginnen wir mit den Netzwerken, da die Ankündigung von Kubernetes 1.11 die offizielle Stabilisierung (d. H. Die Übertragung auf den Status "Allgemeine Verfügbarkeit") von zwei wichtigen Innovationen markierte , die in früheren Versionen vorgestellt wurden. Die erste davon ist der Lastausgleich von Diensten innerhalb des Clusters basierend auf IPVS (IP Virtual Server). Diese Gelegenheit kam von Huawei , das im vergangenen Frühjahr der Community die Ergebnisse seiner Arbeit zur Verbesserung des Lastausgleichs für mehr als 50.000 Dienste mit IPVS anstelle von iptables vorstellte. Diese Auswahl wurde ganz logisch erklärt : „Wenn iptables für Firewalls erstellt werden und auf Regellisten im Kernel basieren, ist IPVS für den Lastausgleich ausgelegt und basiert auf Hash-Tabellen im Kernel. Darüber hinaus unterstützt IPVS erweiterte Algorithmen für den Lastausgleich als iptables sowie eine Reihe weiterer nützlicher Funktionen (z. B. Statusprüfung, Wiederholungsversuche usw.). "


Schieben Sie von Huaweis Scaling Kubernetes zur Unterstützung der Präsentation von 50.000 Diensten auf der KubeCon Europe 2017

Was hat es in die Praxis gebracht? „Bessere Netzwerkbandbreite, geringere Softwarelatenz [über die Zeit, die benötigt wird, um neue Endpunkte zu Diensten hinzuzufügen - ca. perev. ] und bessere Skalierbarkeit für den Load Balancer im Cluster. " Die Alpha-Version des IPVS-Modus für kube-proxy wurde in Kubernetes 1.8 veröffentlicht und ist mit der aktuellen Version 1.11 stabil geworden: Obwohl sie standardmäßig noch nicht aktiviert ist, ist sie bereits offiziell bereit, den Datenverkehr in Produktionsclustern zu bedienen.

Die zweite ausgereifte Funktion ist CoreDNS als DNS-Server, der vom Kubernetes-Cluster verwendet wird. Wir haben in einem separaten Test mehr über diese Lösung geschrieben. Kurz gesagt, es handelt sich um einen flexiblen und leicht erweiterbaren DNS-Server, der ursprünglich auf dem Caddy- Webserver basiert und zum Nachfolger von SkyDNS wurde (übrigens basiert auch kube-dns selbst darauf ersetzt durch CoreDNS) , geschrieben in Go und konzentriert sich auf die Welt der Cloud-Anwendungen (Cloud Native). Ein weiteres bemerkenswertes CoreDNS ist die Tatsache, dass es die einzige ausführbare Datei und der einzige Prozess im System zu sein scheint. Dies ist nicht nur eine weitere DNS-Option für den Kubernetes-Cluster, sondern auch die Standardoption für kubeadm . Anweisungen zur Verwendung von CoreDNS in Kubernetes finden Sie hier (und für Cluster Federation hier ).

Unter anderen Updates im Kubernetes-Netzwerk "Welt":

  • In NetworkPolicies ist es jetzt möglich, bestimmte Subas in anderen Namespaces mit namespaceSelector und podSelector .
  • Dienste können jetzt dieselben Host-Ports auf verschiedenen Schnittstellen --nodeport-addresses (angegeben in --nodeport-addresses ).
  • Es wurde ein Fehler behoben, aufgrund dessen Kubelet bei Verwendung von --node-ip die Meldung von ExternalDNS , InternalDNS und ExternalIP .

Lagereinrichtungen


In Kubernetes 1.9 eingeführt, wird die Funktion zum Schutz vor dem Entfernen von PVCs ( PersistentVolumeClaims ), die von Pods und PVs ( PersistentVolumes ) verwendet werden, die an PVCs gebunden sind, später (in K8s 1.10) als StorageProtection bezeichnet , als stabil deklariert.

Die Möglichkeit , die Größe des Volumens (PVs) nach dem Neustart des Herdes zu ändern, wurde in den Beta-Status übersetzt, und innerhalb der Alpha-Version ist die Größenänderung des Volumens in Echtzeit verfügbar geworden, d. H. ohne dass der Herd neu gestartet werden muss.

Zur Unterstützung von AWS EBS und GCE PD wurde das Limit für die maximal mögliche Anzahl von mit dem Host verbundenen Volumes erhöht, und in den Plug-Ins AWS EBS, Azure Disk, GCE PD und Ceph RBD wurde die Unterstützung für dynamische Bereitstellungsvolumes von Block-Raw-Geräten implementiert. Für AWS EBS-Volumes wurde auch die Möglichkeit hinzugefügt, Pods im ReadOnly Modus zu verwenden.

Darüber hinaus führte Kubernetes 1.11 eine Alpha-Version der Unterstützung für dynamische Begrenzungen von Volumes in Abhängigkeit vom Knotentyp sowie API-Unterstützung für Block-Volumes in externen Speichertreibern CSI ( Container Storage Interface - in Kubernetes 1.9 veröffentlicht ) ein. Darüber hinaus implementierte CSI die Integration in die neue Kubelet- Plugin-Registrierungs- Engine .

Clusterknoten


Zu den fünf wichtigsten Änderungen an der Version Kubernetes 1.11 gehört auch der Übergang zum Status einer Beta-Version der dynamischen Kubelet- Konfiguration , die erstmals in K8s 1.8 veröffentlicht wurde und mehrere Änderungen erfordert (Sie können sie im ursprünglichen Ticket für die dynamische Kubelet-Konfiguration nachverfolgen ). Mit dieser Funktion können neue Kubelet- Konfigurationen in aktiven , funktionierenden Clustern eingeführt werden (im Gegensatz zur vorherigen Situation, in der Einstellungen für Kubelet über Befehlszeilenflags übergeben wurden). Um es zu verwenden, müssen Sie die Option --dynamic-config-dir festlegen (wenn Kubelet startet).

Das Cri-Tools- Projekt wurde für stabil erklärt. Es bietet Tools für Systemadministratoren, mit denen Sie den Betrieb von Knoten in der Produktion unabhängig von der verwendeten Containerlaufzeit analysieren und debuggen können. Pakete damit ( crictl ) werden jetzt mit den restlichen kubeadm- Dienstprogrammen (in den Formaten DEB und RPM) ausgeliefert. Wir crictl in einem kürzlich erschienenen Artikel über die Integration von Containerd in Kubernetes mehr über den Zweck und die Fähigkeiten von crictl und damit den "traditionellen" Docker ersetzt.


Beispiele für die Verwendung von crictl aus der Projektdokumentation

Die experimentelle Unterstützung für sysctls unter Linux wurde in den Beta-Status konvertiert (standardmäßig mithilfe des Sysctls Feature-Flags Sysctls ). PodSecurityPolicy und Pod Objekte verfügen über spezielle Felder zum Angeben / Steuern von Systemen .

Auch in ResourceQuota möglich, eine Prioritätsklasse anzugeben (in diesem Fall gilt das Kontingent nur für Pods mit dieser Klasse - Details siehe Designvorschläge ), und die ContainersReady Bedingung wurde dem Status des Pods hinzugefügt .

Rechte und Sicherheit


Die in K8s 1.9 eingeführte ClusterRole-Aggregationsfunktion , mit der Sie vorhandenen (einschließlich automatisch erstellten) Rollen Berechtigungen hinzufügen können, wird ohne Änderungen als stabil deklariert. Eine separate Rolle für Cluster-Autoscaler ( ClusterRole ) wurde ebenfalls hinzugefügt - sie wird anstelle des Systems ( Cluster-Administrator ) verwendet.

Eine Reihe von Arbeiten wurde in Richtung Transparenz darüber durchgeführt, was (und warum) innerhalb des Clusters geschieht. Insbesondere enthalten RBAC-Informationen in Überwachungsprotokollen jetzt zusätzliche Anmerkungen für Ereignisse :

  • authorization.k8s.io/decision - allow oder forbid ;
  • authorization.k8s.io/reason - lesbarer Grund für die Entscheidung.

Außerdem wurden in den PodSecurityPolicy Informationen zum Zugriff von PodSecurityPolicy in Form von Anmerkungen podsecuritypolicy.admission.k8s.io/admit-policy und podsecuritypolicy.admission.k8s.io/validate-policy (welche Richtlinie ist zulässig?).

Konsolendienstprogramme


Viele (wenn auch nicht so wichtige, aber nützliche!) Verbesserungen werden in den Kubernetes CLI-Tools vorgestellt:

  • Neuer kubectl wait Befehl kubectl wait auf den Moment kubectl wait in dem die angegebenen Ressourcen gelöscht werden oder eine bestimmte Bedingung erreicht ist.
  • Neuer kubectl api-resources zum Anzeigen von Ressourcen:

  • Unterstützung für die kubectl cp Vervollständigung von kubectl cp .
  • Die base64decode- Funktion ist in base64decode Go-Vorlagen verfügbar geworden, deren Name für sich selbst spricht.
  • Unterstützung für das --dry-run im kubectl patch .
  • Das --match-server-version global geworden - die kubectl version wird es ebenfalls berücksichtigen.
  • Die kubectl config view --minify berücksichtigt jetzt das globale context .
  • kubectl apply --prune Ressourcenunterstützung zu kubectl apply --prune CronJob .

Andere Änderungen


  • Der Scheduler ( kube-scheduler ) hat gelernt, wie Pods in DaemonSet (Alpha-Version) geplant werden.
  • Es ist möglich, eine bestimmte Systembenutzergruppe ( RunAsGroup ) für Container im Herd anzugeben (Alpha-Version).
  • Möglichkeit zum Entfernen von Waisen ( Orphan Delete ) für CustomResources .
  • Verbesserungen in der Kubernetes-API-Unterstützung für Herde und Container unter Windows - Metriken für Herde, Container und ein Dateisystem mit Protokollen, Sicherheitskontexten run_as_user , lokalen konstanten Volumes und fstype für ein Azure-Laufwerk hinzugefügt.
  • Azure bietet Unterstützung für den Standard-SKU-Load-Balancer und die öffentliche IP.

Kompatibilität


  • Die unterstützte Version von etcd ist 3.2.18 (Kubernetes 1.10 war 3.1.12).
  • Verifizierte Versionen von Docker - von 1.11.2 auf 1.13.1 und 17.03.x (wurden seit der Veröffentlichung von K8s 1.10 nicht geändert).
  • Die Go- Version ist 1.10.2 (anstelle von 1.9.3), das unterstützte Minimum ist 1.9.1.
  • Die CNI- Version ist 0.6.0.
  • Die CSI- Version ist 0.3.0 (anstelle von 0.2.0).

PS


Lesen Sie auch in unserem Blog:

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


All Articles