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!

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.