Verwenden von werf zum Ausrollen komplexer Helmdiagramme



Der Artikel widmet sich der Entwicklung von Helm-Diagrammen für Kubernetes unter Verwendung vorgefertigter Lösungen aus Diagramm-Repositorys. Bei diesem Ansatz wendet der Benutzer Community-Rezepte oder seine eigenen an, um eine zeitnahe Aktualisierung der Standardkomponenten aller seiner Projekte und die Bequemlichkeit der Wartung von Lösungen im Allgemeinen sicherzustellen.

Eine solche praktische Funktion ist jetzt in unser werf GitOps-Dienstprogramm integriert, das den gesamten Prozess des Betriebs der Infrastruktur für Anwendungen vereinfachen soll, die zusammengestellt und in Kubernetes eingeführt wurden.

Eingebauter Helm


Vielleicht hängt der Haupterfolg von Helm - dem "Paketmanager für Kubernetes" - weniger mit seiner Funktionalität als vielmehr mit dem offiziellen Chart-Repository und der Unterstützung für Repositorys im Allgemeinen zusammen. Rezepte und Diagrammeinstellungen werden von einer riesigen Community begleitet. Spezialisten unterstützen aktuelle Lösungen, die von Endbenutzern benötigt werden. Jedes Diagramm des offiziellen Repositorys ist standardisiert und gut dokumentiert.

In trivialen Fällen muss der Benutzer nicht einmal ein Diagramm erstellen, um die Anwendung auszurollen: Er findet nur eine vorgefertigte Lösung, liest die Dokumentation, bereitet die Einstellungen vor und verwendet das offizielle Diagramm.

Seit langem nutzen wir Helm inside werf aktiv, um die Anwendungsinfrastruktur auszurollen, und jetzt gehen wir weiter. Ab Version v1.0.4-alpha.10 wurden werf Befehle zum Arbeiten mit Abhängigkeiten und Diagramm-Repositorys hinzugefügt, um den Helm-Client vollständig zu verlassen.

Die Hauptbefehle dafür:

  • werf helm repo

     add Add a chart repository fetch Download a chart from a repository and (optionally) unpack it in local directory init Init default chart repositories configuration list List chart repositories remove Remove a chart repository search Search for a keyword in charts update Update information of available charts locally from chart repositories 
  • werf helm dependency

     build Rebuild the charts/ directory based on the requirements.lock file list List the dependencies update Update charts/ based on the contents of requirements.yaml 

Außerdem wurde dem werf helm deploy-chart Unterstützung für Diagrammreferenzen hinzugefügt.

Und so sieht all diese Magie in Aktion aus - genauer gesagt, hier zeigen wir einen Vergleich des Rollouts desselben Diagramms in werf (links) und in Helm (rechts):

Bild

Mehr Übung


Zurück zum Komfort der Verwendung vorgefertigter Lösungen für die Einführung ganzer Anwendungen - ein gängiges Beispiel für WordPress . Das Rollout seines Helm-Diagramms mit werf im Kubernetes-Cluster könnte folgendermaßen aussehen:

 $ cat << EOF > values.yaml wordpressBlogName: flant wordpressUsername: admin wordpressPassword: password mariadb: mariadbRootPassword: password EOF $ werf helm deploy-chart --values values.yaml stable/wordpress my-web-app 

Demonstration im Asciicinema .

Da Repositorys viele Lösungen enthalten, können Sie daraus eigene Anwendungen als Cubes erstellen, wobei die Cubes die verschiedenen Helm-Diagramme sind, von denen das gesamte System abhängt. Höchstwahrscheinlich müssen Sie die Komponenten nur entsprechend Ihren Anforderungen konfigurieren.

Beispielsweise erfordert eine Webanwendung eine Warteschlange, einen Cache und einen Datenspeicher. Wie stellen wir diese Komponenten über werf bereit?

Um zu beginnen, beschleunigen wir die Suche nach allem, was Sie über die CLI benötigen:

 $ werf helm repo search queue NAME CHART VERSION APP VERSION DESCRIPTION stable/rabbitmq 6.4.1 3.7.17 Open source message broker software that implements the A... stable/rabbitmq-ha 1.31.0 3.7.15 Highly available RabbitMQ cluster, the open source messag... 

In Analogie finden wir die verbleibenden Komponenten für alle registrierten Diagramm-Repositorys (die Liste der verwendeten Repositorys kann durch Ausführen des werf helm repo list ).

Nachdem alles gefunden wurde, müssen sie nur noch zum Diagramm hinzugefügt werden. Es gibt verschiedene Möglichkeiten, dies zu tun: werf helm dependency build|list|update dem Diagrammverzeichnis Komponentendiagramme hinzu oder erstellen Sie eine Datei " werf helm dependency build|list|update beschreiben Sie die Abhängigkeiten und interagieren Sie dann mit ihnen, indem Sie spezielle werf helm dependency build|list|update .

Abbildung des zweiten Weges:

 $ cat << EOF > .helm/requirements.yaml dependencies: - name: mysql version: 0.3.4 repository: "@stable" - name: redis version: 1.1.11 repository: "@stable" - name: rabbitmq version: 0.6.16 repository: "@stable" EOF $ werf helm dependency build $ werf deploy --env test 

Demonstration im Asciicinema .

Während des Rollout-Prozesses erstellt werf alle Abhängigkeiten und verfolgt sie zusammen mit den restlichen Ressourcen. Es sind keine zusätzlichen Aktionen erforderlich.

Auf diese Weise sparen Sie unter Berücksichtigung des Fachwissens der erfahrenen Community erheblich Zeit bei der Entwicklung und Pflege von Diagrammen. Niemand beschränkt Sie jedoch auf die Verwendung öffentlicher Diagramme: Sie können Ihre Diagramme mit gleichem Erfolg ausrollen, deren Konfiguration unter Berücksichtigung der erforderlichen Besonderheiten vorbereitet wird.

Die Dokumentation zu Repository- und Abhängigkeitsbefehlen in werf finden Sie hier . Möglicherweise möchten Sie auch die Dokumentation lesen, um weitere Informationen zur Einführung in werf und zu den Hauptunterschieden von Helm zu erhalten .

Fazit


Das Fehlen von Funktionen, die für uns in den vorhandenen Open Source-Lösungen von entscheidender Bedeutung sind, zwingt uns, die entsprechenden Funktionen, Bindungen und Integrationen zu erstellen. Das werf-Projekt wurde erstellt und vor allem unterstützt, um die alltäglichen Aufgaben unserer DevOps-Ingenieure zu lösen.

Zum Beispiel haben wir lange gearbeitet (zweites Jahr!), Damit unser Vorschlag zur Nachverfolgung von Ressourcen in Helm als alternativer Modus in der Hauptcodebasis des Projekts (Upstream) akzeptiert wird. Die Community akzeptierte und unterstützte die Idee als Viele brauchen diese Gelegenheit. Fortschritte in diese Richtung begannen jedoch in Helm 3 und erst jetzt ...

Bisher wurde die Umsetzung dieser Idee in Helm von Entwicklern praktisch blockiert. In dieser Zeit haben wir jedoch die entsprechenden Funktionen zum Verfolgen von Ressourcen in einer separaten Open Source-Bibliothek - kubedog - entwickelt und verwenden diese bereits in werf. Und nach der Aktivität auf GitHub zu urteilen, fand die Bibliothek Interesse bei anderen Kubernetes / Helm-Benutzern, was sehr erfreulich ist.

Sie können unsere Idee (und Implementierung) unterstützen, indem Sie einen Stern auf das Kubedog-Projekt auf GitHub setzen und / oder in der Originalausgabe in Helm Daumen hoch. Vielen Dank!

PS


Lesen Sie auch in unserem Blog:

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


All Articles