GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Helm vs. Kustomize:Kopf-an-Kopf-Vergleich

Einführung

Kubernetes bietet nativ die wichtigsten Tools, die für die Verwaltung der Anwendungsbereitstellung erforderlich sind. Während das Anwenden von rohen YAML-Manifesten ein unkomplizierter Prozess ist, gerät die Entwicklung in einer Microservice-Umgebung schnell außer Kontrolle, da die Anzahl der Bereitstellungen erforderlich ist, um ein gesamtes System zu unterstützen.

In diesem Artikel werden zwei beliebte Tools verglichen, die darauf abzielen, die Verwaltung der Anwendungsbereitstellung zu vereinfachen:Helm und Kustomize.

Helm:Hauptmerkmale

Helm ist ein Paketmanager für Kubernetes. Es hilft bei der Installation und Verwaltung von Kubernetes-Anwendungen, indem es Helm-Diagramme, Pakete mit YAML-Dateien enthält, die mit der Go-Vorlagensprache modifiziert wurden, und Vorlagenfunktionen aus der Sprig-Bibliothek.

Durch die Verwendung von Templating- und dynamischen Werten bietet Helm die Möglichkeit, eine Konfiguration während des gesamten Softwareentwicklungslebenszyklus zu optimieren.

Mit der Einführung von Helm 3 beendete Helm die Abhängigkeit von Tiller für die dynamische Generierung von Konfigurationsdateien. Dadurch wird eines der wichtigsten Sicherheitsprobleme von Helm 2 beseitigt – die weitreichenden Berechtigungen, die standardmäßig für jeden mit Zugriff auf Tiller gewährt werden. Helm verfügt jetzt über privilegierte Zugriffsverwaltungskomponenten mit rollenbasierter Zugriffskontrolle (RBAC) und benutzerdefinierten Ressourcendefinitionen (CRD).

Eine weitere nützliche Eigenschaft von Helm-Templating ist die Kapselung. Die YAML-Definitionen von Kubernetes-Objekten wie Deployment, Service, ConfigMap oder ein Kubernetes-Secret können in einer einzigen Vorlage gekapselt werden. Diese Eigenschaft ist hilfreich für die Konfiguration zur Bereitstellungszeit.

Ein einfaches Steuerdiagramm besteht aus:

  • Eine Chart.yaml Datei, die das Diagramm deklariert.
  • Eine values.yaml Datei, die Diagrammparameter enthält, die mit Vorlagen verwendet werden sollen.
  • Ein Vorlagenverzeichnis, das Vorlagendateien zum Erstellen der Inhalte des Diagramms enthält.

Eine Vorlagendatei hat die Struktur einer YAML-Datei, enthält aber auch Vorlagenvariablen, die bei der Bereitstellung durch die in values.yaml bereitgestellten Werte ersetzt werden Datei.

Dies ist der Inhalt einer typischen deployment.yaml so aussehen:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.test }}
  labels:
    app: {{ .Values.test }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.test }}
  template:
    metadata:
      labels:
        app: {{ .Values.test }}
        tier: web
    spec:
      containers:
      - name: {{ .Values.test }}
        image: {{ .Values.test }}     
        ports:
        - containerPort: 8080

Im obigen Beispiel schaut Helm in die values.yaml Datei für den Wert von test Variable. Die relevante values.yaml Datei enthält die Variablendefinition:

test: default

Basierend auf values.yaml Definition erstellt Helm die folgende deployment.yaml Datei:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: default
  labels:
    app: default
spec:
  selector:
    matchLabels:
      app: default
  template:
    metadata:
      labels:
        app: default
        tier: web
    spec:
      containers:
      - name: default
        image: default     
        ports:
        - containerPort: 8080

Helm bietet die Möglichkeit, die Werte in values.yaml zu überschreiben mit --set Flag beim Ausgeben von Build-Befehlen in der CLI.

Es enthält auch den helm lint Befehl, der ein Diagramm auf Probleme untersucht und überprüft, ob es gemäß den Standards entworfen wurde.

Anpassen:Schlüsselfunktionen

Kustomize ist ein Tool, das Ebenen und Patches anstelle von Vorlagen verwendet, um Kubernetes-Objekte anzupassen. Es führt die kustomization.yaml ein manifest-Datei, in der Benutzer bereitstellungsspezifische Konfigurationen speichern.

Das Tool ist ab Version 1.14 in kubectl eingebaut, was bedeutet, dass es jetzt nativ in Kubernetes ist. Sie können es jedoch auch unabhängig installieren.

Mit Kustomize können Benutzer mithilfe des deklarativen Ansatzes eine beliebige Anzahl von Kubernetes-Konfigurationen verwalten, jede mit ihrer eigenen Anpassung. Es ermöglicht Entwicklern, mehrere Versionen einer Anwendung zu definieren und sie in Unterverzeichnissen zu verwalten. Das Basisverzeichnis enthält die allgemeinen Konfigurationen, während Unterverzeichnisse versionsspezifische Patches enthalten.

Jedes Verzeichnis enthält seine kustomization.yaml Datei, die angibt, welche Änderungen an der Konfiguration vorgenommen werden müssen und welche Ressourcen verwendet werden sollen. Zum Beispiel die folgende kustomization.yaml Datei fügt ein gemeinsames Label app:test hinzu zu beiden deployment.yaml und service.yaml im Basisverzeichnis:

commonLabels:  
  app: my-wordpress
resources:
- deployment.yaml
- service.yaml

Die Änderungen werden dann angewendet, indem Sie den folgenden Befehl in die Befehlszeile eingeben:

kubectl apply -k base

Der Befehl ist anders, wenn Kustomize als eigenständiges Tool verwendet wird:

kustomize build base | kubectl apply -f -

Helm und Kubernetes:Vor- und Nachteile

Vorteile

  • Helm bietet viele Funktionen, die über die einfache Konfigurationsverwaltung der App-Bereitstellung hinausgehen, wie Paketierung, Hooks und Rollbacks.
  • Es vereinfacht die App-Installation, indem es Benutzern ermöglicht, Standardwerte festzulegen, die sie bei Bedarf mit den Werten weiter konfigurieren können.
  • Helm ist Entwicklern bekannt, es hat viele Benutzer und einen großartigen Online-Support.
  • Die Helm-Template-Funktionen ermöglichen es, Bedingungen und Schleifen einzuführen, Helfer zu definieren und auf die Sprig-Funktionsbibliothek zuzugreifen.
  • Die Helm-Charts der am häufigsten verwendeten Anwendungen sind online verfügbar, was Zeit spart und die Produktivität steigert.

Nachteile

  • Helm fügt mehr Abstraktionsebenen hinzu und hat eine steile Lernkurve.
  • Es beschränkt die Anpassung von Anwendungen auf bereits vorhandene Konfigurationsoptionen.
  • Vorlagen sind fehleranfällig, insbesondere in Bezug auf die richtige Ausrichtung von YAML.
  • Helm wird in Kubernetes nicht nativ unterstützt, wodurch eine externe Abhängigkeit entsteht.
  • Es ist oft zwingend erforderlich. Helm fügt zur Laufzeit Werte in Vorlagen ein. Wenn sich also die Vorlage ändert, kann das System von den Erwartungen des Benutzers abweichen.
  • Diagramme erfordern immer noch Laufzeitanpassungen, was ihre Verwaltung bei der Implementierung der CI/CD-Pipeline erschwert.
  • Schlechter lesbare Vorlagen führen mit der Zeit unweigerlich zu weniger Anpassbarkeit.
  • Es leidet unter Sicherheitsproblemen, die sich aus der mangelnden Sichtbarkeit und Transparenz während der Installation von Apps ergeben.

Kustomize und Kubernetes:Vor- und Nachteile

Vorteile

  • Kustomize ist einfach zu bedienen.
  • Es ist deklarativ und entspricht der Kubernetes-Philosophie.
  • Kustomize unterstützt ein vererbtes Basismodell, wodurch es besser skaliert als Helm.
  • Durch die Verwendung der in kubectl integrierten nativen Version werden externe Abhängigkeiten eliminiert.
  • Erleichtert die Verwendung von Standard-Apps.
  • Es verwendet nur einfache YAML-Dateien.

Nachteile

  • Kustomize bietet nicht viele Funktionen.
  • Es ist nicht darauf ausgelegt, dem DRY-Prinzip (Don’t Repeat Yourself) zu folgen.
  • Benutzer müssen Ressourcen und Patches manuell in kustomization.yaml deklarieren , und die Datei muss manuell aktualisiert werden, wenn eine neue Datei hinzugefügt wird.
  • Die in kubectl eingebettete native Version ist viel älter als die aktuelle Standalone-Version.
  • Online-Support für Kustomize ist schwer zu finden.

Kustomize vs. Helm:Vergleichstabelle

Funktion Helm Anpassen
Vorlagen Ja Nein
Überlagerungen Nein Ja
Verpackung Ja Nein
Validierungs-Hooks Ja Nein
Rollbacks Ja Nein
Native K8s-Integration Nein Ja
deklarativer Charakter meistens zwingend Ja
Sichtbarkeit und Transparenz Schwach Stark

Wie wählen?

Berücksichtigen Sie Folgendes, um zu entscheiden, ob Sie sich für Helm oder Kustomize entscheiden:

  • Wählen Sie Kustomize, wenn Sie vorhaben, alle Konfigurationen selbst zu schreiben, und Sie über gute Kenntnisse der Funktionsweise von YAML verfügen. Während Kustomize es Ihnen ermöglicht, komplizierte Anpassungen schnell vorzunehmen, müssen Sie in der Lage sein, zu visualisieren, wie die Patches und Ebenen zusammenpassen.
  • Wenn Sie andererseits möchten, dass Ihre Entwickler neue Apps und Dienste auf sichere und einfache Weise hinzufügen können, ist das Erstellen von Helm-Diagrammen die bessere Lösung.
  • Ein weiterer Grund, sich für Helm zu entscheiden, ist die Notwendigkeit, die Zeit zu reduzieren, die Sie mit YAML-Dateien verbringen. Helm-Vorlagen haben Argumente, die es einfacher machen, zu verstehen, wie Dienste funktionieren, ohne zu tief in YAML einzutauchen.

Da sowohl Helm als auch Kustomize toolspezifische Vorteile bieten und sich gut ergänzen, wäre die beste Vorgehensweise, die beiden Tools nebeneinander zu verwenden. Helm ist besonders nützlich zum Packen, Freigeben und Installieren von wohldefinierten Apps, während Kustomize am besten für Last-Minute-Änderungen an bestehenden Kubernetes-Apps geeignet ist.


Cent OS
  1. PostgreSQL vs. MySQL:Ein detaillierter Vergleich

  2. YAML für Ansible verstehen

  3. YAML für Anfänger

  4. Medienserver-Vergleich

  5. Datumsvergleich in Bash

So beheben Sie den Fehler „Helm hat keine bereitgestellten Versionen“.

So verwenden Sie den Befehl helm install

OLTP vs. OLAP:Ein umfassender Vergleich

SOAP vs. REST API:Kopf-an-Kopf-Vergleich

So stellen Sie PostgreSQL auf Kubernetes bereit

So installieren Sie Helm unter Linux