Überlegen Sie zweimal, bevor Sie Helm verwenden.

Helm ohne Hype. NĂŒchterner Blick


Helm ist Paketmanager fĂŒr Kubernetes.


Auf den ersten Blick nicht schlecht. Dieses Tool vereinfacht den Veröffentlichungsprozess erheblich, aber manchmal kann es problematisch sein, dass Sie nichts erledigen können!
Bild


KĂŒrzlich wurde Helm offiziell als das Top-Projekt @CloudNativeFdn anerkannt , das von der Community weit verbreitet ist. Das sagt viel aus, aber ich möchte kurz auf die unangenehmen Momente eingehen, die mit diesem Paketmanager verbunden sind.


Was ist der wahre Wert von Helm?


Ich kann diese Frage immer noch nicht mit Zuversicht beantworten. Helm bietet keine Besonderheiten. Welche Vorteile bringt Tiller (Server-Seite)?


Viele Helm-Diagramme sind alles andere als perfekt, und die Verwendung im Kubernetes-Cluster erfordert zusĂ€tzlichen Aufwand. Beispielsweise fehlen ihnen RBAC, Ressourcenlimits und Netzwerkrichtlinien. Das Helm-Diagramm einfach in binĂ€rer Form zu greifen und zu installieren - ohne darĂŒber nachzudenken, wie es funktionieren wird - funktioniert nicht.


Es reicht nicht aus, Helm mit den einfachsten Beispielen zu loben. Sie werden erklÀren, warum es so gut ist - insbesondere im Hinblick auf eine sichere mandantenfÀhige Arbeitsumgebung.


Worte sind leer. Zeig mir den Code!
- Linus Torvalds

Eine zusÀtzliche Ebene der Autorisierung und Zugriffskontrolle


Ich erinnere mich an jemanden, der Tiller mit einem "riesigen Sudo-Server" verglichen hat. Meiner Meinung nach ist dies nur die nĂ€chste Berechtigungsstufe, fĂŒr die gleichzeitig zusĂ€tzliche TLS-Zertifikate erforderlich sind, die jedoch keine Zugriffssteuerungsfunktionen bietet. Warum nicht die Kubernetes-API und das vorhandene Sicherheitsmodell verwenden, das Auditing und RBAC unterstĂŒtzt?


Ein ĂŒberbewertetes Tool zur Vorlagenverarbeitung?


Tatsache ist, dass fĂŒr die Verarbeitung und statische Analyse von Go-Vorlagendateien die Konfiguration aus der Datei values.yaml wird und anschließend das verarbeitete Kubernetes-Manifest mit den entsprechenden in ConfigMap gespeicherten Metadaten verwendet wird.


Und Sie können ein paar einfache Befehle verwenden:


 $ # render go-template files using golang or python script $ kubectl apply --dry-run -f . $ kubectl apply -f . 

Ich habe festgestellt, dass Entwickler normalerweise eine Datei values.yaml pro Umgebung verwendet haben oder diese vor der Verwendung sogar aus values.yaml.tmpl haben.


Dies ist nicht sinnvoll, wenn Sie mit Kubernetes-Geheimnissen arbeiten, die hĂ€ufig verschlĂŒsselt sind und mehrere Versionen im Repository haben. Um diese EinschrĂ€nkung zu --set key=value , mĂŒssen Sie das Plugin fĂŒr --set key=value oder den --set key=value . In jedem Fall wird eine weitere KomplexitĂ€tsstufe hinzugefĂŒgt.


Helm als Tool fĂŒr das Management des Infrastrukturlebenszyklus


Vergiss es. Dies ist nicht möglich, insbesondere wenn es sich um die Hauptkomponenten von Kubernetes handelt, wie z. B. kube-dns, den CNI-Anbieter, Cluster-Autoscaler usw. Die Lebenszyklen dieser Komponenten variieren und Helm passt nicht in sie.


Meine Erfahrung mit Helm zeigt, dass dieses Tool sich hervorragend fĂŒr einfache Bereitstellungen auf den Kernressourcen von Kubernetes eignet, die einfach von Grund auf neu implementiert werden können und keinen komplizierten Release-Prozess erfordern.


Leider kann Helm bei komplexeren und hĂ€ufigeren Bereitstellungen, einschließlich Namespace, RBAC, NetworkPolicy, ResourceQuota und PodSecurityPolicy, nicht damit umgehen.


Ich verstehe, dass Helm-Fans meine Worte vielleicht nicht mögen, aber das ist die RealitÀt.


Staatshelm


Der Tiller-Server speichert Informationen in ConfigMap-Dateien in Kubernetes. Er braucht keine eigene Datenbank.

Leider darf die GrĂ¶ĂŸe von ConfigMap aufgrund von etcd-EinschrĂ€nkungen 1 MB nicht ĂŒberschreiten.


Hoffentlich hat jemand eine Möglichkeit gefunden, den ConfigMap-Speichertreiber zu verbessern, um die serialisierte Version zu komprimieren, bevor er in den Speicher wechselt. Ich denke jedoch, dass das eigentliche Problem immer noch nicht gelöst werden kann.


ZufĂ€llige AbstĂŒrze und Fehlerbehandlung


FĂŒr mich ist Helms grĂ¶ĂŸtes Problem die Unsicherheit.


Fehler: UPGRADE FEHLGESCHLAGEN: "foo" hat keine bereitgestellten Releases


Dies ist meiner Meinung nach eines der nervigsten Probleme von Helm.


Wenn es nicht möglich war, die erste Version zu erstellen, schlÀgt jeder nachfolgende Versuch mit einem Fehler fehl, der darauf hinweist, dass eine Aktualisierung von einem unbekannten Status unmöglich ist.


Die folgende Anforderung zum Einbeziehen von Änderungen behebt den Fehler durch HinzufĂŒgen des --force , das das Problem nur durch AusfĂŒhren des Befehls helm delete & helm install —replace .


In den meisten FĂ€llen mĂŒssen Sie die Version jedoch vollstĂ€ndig reinigen.


 helm delete --purge $RELEASE_NAME 

Fehler: Release foo fehlgeschlagen: ZeitĂŒberschreitung beim Warten auf die Bedingung


Wenn ServiceAccount fehlt oder RBAC die Erstellung einer bestimmten Ressource nicht zulĂ€sst, gibt Helm die folgende Fehlermeldung zurĂŒck:


 Error: release foo failed: timed out waiting for the condition 

Leider kann die Hauptursache fĂŒr diesen Fehler nicht erkannt werden:


 kubectl -n foo get events --sort-by='{.lastTimestamp}' 

 Error creating: pods "foo-5467744958" is forbidden: error looking up service account foo/foo: serviceaccount "foo" not found 

Aus heiterem Himmel scheitern


In den fortgeschrittensten FĂ€llen gibt Helm einen Fehler aus, ohne ĂŒberhaupt eine Aktion auszufĂŒhren. Beispielsweise werden manchmal keine Ressourcenlimits aktualisiert.


helm init fĂŒhrt die Pinne mit einer Kopie aus, nicht in der HA-Konfiguration


Pinne bedeutet standardmĂ€ĂŸig keine hohe VerfĂŒgbarkeit, und die Anforderung, Änderungen per Referenz zu aktivieren, ist noch offen.


Eines Tages wird es zu Ausfallzeiten kommen ...


Helm 3? Betreiber? Die Zukunft?


Die nĂ€chste Version von Helm wird einige vielversprechende Funktionen hinzufĂŒgen:


  • Single-Service-Architektur ohne Trennung zwischen Client und Server. Keine Pinne mehr;
  • eingebaute Lua Scripting Engine;
  • DevOps-Workflow basierend auf Einschlussanforderungen und dem neuen Helm Controller-Projekt.

Weitere Informationen finden Sie unter Helm 3-ProjektvorschlÀge .


Ich mag die Idee der Architektur ohne Tiller sehr, aber die auf Lua basierenden Skripte sind zweifelhaft, weil sie die Diagramme komplizieren können.


Ich habe festgestellt, dass in letzter Zeit Betreiber , die fĂŒr Kubernetes viel besser geeignet sind als Helm-Charts, an PopularitĂ€t gewonnen haben.


Ich hoffe wirklich, dass sich die Community bald mit Helmproblemen befasst (natĂŒrlich mit unserer Hilfe), aber im Moment werde ich selbst versuchen, dieses Tool so wenig wie möglich zu verwenden.


Verstehen Sie dies: Dieser Artikel ist meine persönliche Meinung, zu der ich beim Erstellen einer Hybrid-Cloud-Plattform fĂŒr Bereitstellungen auf der Basis von Kubernetes gekommen bin.

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


All Articles