Auf einen Blick: Best Practices für die Architektur von Anwendungen auf Kubernetes umfassen das Containerisieren von Anwendungen, die Nutzung von Helm für die Bereitstellung sowie die Implementierung von Gesundheitschecks mit Liveness- und Readiness-Probes. Die Befolgung der 12-Faktor-Anwendungsmethodik verbessert die cloud-nativen Kompatibilität, während die Nutzung von Kubernetes-Operatoren Verwaltungsaufgaben automatisiert.
- Anwendungen müssen als Container-Abbildungen verpackt werden.
- Nutzen Sie Helm, um Anwendungen effektiv bereitzustellen.
- Implementiere Liveness- und Readiness Probes für Gesundheitschecks der Anwendung.
Eine produktionsfähige Anwendung für Kubernetes zu gestalten ist keine leichte Aufgabe, aber Richtlinien und Best Practices stehen zur Verfügung, um sicherzustellen, dass Ihre Anwendung alle notwendigen Anforderungen einer Produktionsumgebung erfüllt.
Das Microservice-Muster hat dazu beigetragen, die Art und Weise zu entwickeln, wie Anwendungen gebaut werden. Aufgrund dieser Veränderung sollten die Plattformen, die Ihre App ausführen können, bei der Entwicklung berücksichtigt werden. Tatsächlich hat Kubernetes selbst – eine äußerst beliebte Plattform zur Container-Orchestrierung – die Art und Weise, wie wir Apps bauen und bereitstellen, drastisch verändert. Hier sind also einige Tipps, die Sie beachten sollten, bevor Sie Ihre Anwendung auf Kubernetes ausführen.
Deine App muss ein Container-Image sein
Da K8s eine Container-Orchestrierungs-Engine ist, muss Ihre Anwendung in einem Container-Image verpackt werden, damit sie in einem K8s-Cluster ausgeführt werden kann. Dies gehört zu den grundlegendsten Anforderungen für den Aufbau von Microservices, da es direkt mit der Funktionsweise von Kubernetes als Plattform verknüpft ist.
Idealerweise solltest du dein Anwendungsimage in einem privaten Repository für sichere Speicherung aufbewahren. Zum Beispiel kannst du ein Docker-Image erstellen und dieses Image in ein privates Docker-Repository pushen, von dem Kubernetes dann dein Image abrufen kann.
Standardmäßig unterstützt Kubernetes Container-Runtimes in:
Befolge Best Practices für die Laufzeit, die du verwendest. Die für Docker findest du hier.
Helm ist dein Freund
Wenn Sie noch nie Helm-Diagramme verwendet haben, verpassen Sie etwas. Helm ist die de-facto-Methode, um Anwendungen in Produktionsqualität in Kubernetes einzuführen. Es ermöglicht Ihnen, Ihre Anwendung in Diagrammen zu beschreiben – sodass Sie versionen, veröffentlichen, teilen und andere nützliche Dinge mit Ihrer Anwendung tun können. Es ist Kubernetes yum oder apt-get der Einfachheit halber.
Ein typisches Helmdiagramm sieht ungefähr so aus:
YOUR-CHART-NAME/
|
|- .helmignore [Files to ignore]
|
|- Chart.yaml [Data about the chart. E.g Version etc]
|
|- values.yaml [This is the variable file.]
|
|- charts/ [Specify other needed charts]
|
|- templates/ [This hold all the manifests for the application. E.g yaml files]
Hinweis: Die Verwendung eines CLI-Tools wie kubectl sollte nur in der Entwicklung oder zum Debugging verwendet werden – niemals für die Bereitstellung in der Produktion.
Verwenden Sie Liveness- und Readiness-Sonden
Eine ungesunde Anwendung kann zu Umsatzverlusten führen. Glücklicherweise bietet Kubernetes zwei zentrale Konzepte, um die Gesundheit (oder den Ausfall) Ihrer Anwendungen zu überprüfen:
- Liveness-Proben. Du sagst dem Kubelet, dass er den Container beenden soll, auf dem deine Anwendung läuft, falls die Sonde fehlschlägt.
- Readiness Probes. Du sagst dem Kubelet, dass er sicherstellen soll, dass der Service-Load Balancer, der die Anwendung anbietet, den Datenverkehr nicht an diese Anwendung weiterleitet, falls die Probe fehlschlägt.
Liveness- und Readiness-Probes in Ihrem Manifest zu verwenden, ist eine großartige Möglichkeit, die Gesundheit Ihrer Anwendung vor und nach dem Start in einem Cluster zu kontrollieren und zu wissen. Sobald Ihre App die Probe besteht, sendet der Dienst den Datenverkehr an die Anwendung.
12-Faktor, falls nicht.
Die Bereitstellung deiner Anwendung in einem Kubernetes-Cluster ist großartig. Wenn deine Anwendung jedoch nicht cloud-native ist, ist die Wahrscheinlichkeit groß, dass sie mit Kubernetes nicht gut funktioniert. Eine gute Faustregel ist, die 12-Faktor-Anwendungsmethodik zu befolgen.
Einige Vorteile der Befolgung der 12 Faktoren:
- Das Hochskalieren ist einfach, mit begrenzten Änderungen an Werkzeugen oder Architektur.
- Dev, Stage und Produktion sind so nah wie möglich, weil keine Konfigurationswerte fest in den Konfigurationsdateien verankert sind.
- Stellt sicher, dass der Dienst einen sauberen Vertrag mit dem Betriebssystem hat. (Das heißt, es ist ihm egal, auf welchem Betriebssystem er läuft.)
- Dienste lassen sich problemlos in jede öffentliche oder private Cloud einsetzen.
Der Bediener nutzt Ihr Fachwissen
Ein Hauptgrund, warum Kubernetes so mächtig ist? Ist die Tatsache, dass man es erweitern kann. Mit anderen Worten: Man kann sein Anwendungsdomänenwissen anwenden, um einen eigenen Controller und eigene Ressourcen in Kubernetes zu erstellen, die wissen, wie Ihre Anwendung funktionieren sollte und bestimmte Aufgaben bei Bedarf erledigt. Genau dafür ist das Kubernetes-Operator-Muster da.
Ein Teil der Architektur Ihrer Anwendung für k8s besteht darin, ausreichend zu planen, um zu wissen, welche Art von Automatisierung Ihre Anwendung benötigt – und ob Sie den k8s-Operator für diese Automatisierungsaufgaben nutzen können. Der Operator ist besonders nützlich, wenn Sie eine stateful Application haben, bei der Sie gelegentlich eine Art Admin-Aufgabe ausführen müssen, wie das Machen und Wiederherstellen von Backups des Zustands dieser Anwendung. In diesem Szenario müssten Sie einen benutzerdefinierten Controller und eine eigene Ressource erstellen, um diese Aufgabe zu erledigen, weil Kubernetes nicht weiß, wie man diese Aufgabe direkt erledigt.
Die Architektur Ihrer Anwendung für Kubernetes ist nicht einfach, aber wenn Sie diese Best Practices befolgen, können Sie eine gut architektonierte Anwendung im K8s-Cluster haben. Beginnen Sie mit diesen Anwendungstipps und verbessern Sie den Architekturprozess kontinuierlich.
Zusätzliche Ressourcen
Mehr zu Kubernetes finden Sie in diesen Ressourcen:
- Kubernetes Guide, mit 20+ Artikeln und Tutorials
- BMC DevOps Blog
- Bring Kubernetes in die serverlose Partei
DevOps-Leitfaden
- Was ist DevOps? Eine umfassende Einführung
- Eine kurze Geschichte von DevOps
- Einführung in die DevOps-Architektur
- Automatisierung in DevOps: Warum und wie man DevOps-Praktiken automatisiert
- Was ist CI/CD? Kontinuierliche Integration und kontinuierliche Lieferung erklärt
- Wie man eine CI/CD-Pipeline mit Jenkins aufbaut
- DevOps-Metriken zur Optimierung von CI/CD-Pipelines
- Kontinuierliche Liefermetriken
- Ist Continuous Integration in Continuous Deployment ein Fortschritt – oder nicht?
- Unterschiede zwischen Continuous Integration (CI), Delivery (CD) und Deployment
- Quellcode und Versionskontrolle in DevOps
- Was ist kontinuierliche Testung?
- Testautomatisierungs-Frameworks: Der ultimative Leitfaden
- Release Management in DevOps
- Erklärt: Monitoring & Telemetrie in DevOps
- Anwendungs-Leistungsmanagement in DevOps
- DevOps-Orchestrierung im SDLC
- Einführung in Datenbank-DevOps
- Die Rolle der Microservices in DevOps
- Die Rolle der Virtualisierung in DevOps
- Container & DevOps: Wie Container in DevOps-Lieferpipelines passen
- Was ist eine Containerpipeline?
- Was ist eine DevOps-Toolchain?
- Verwaltung von Containern und Code für DevOps
- Die Rolle von Agile in DevOps
- Die Rolle der Cloud in DevOps
- Was ist FinDevOps?
- Top-DevOps-Trends im Jahr 2022
- DevOps-Werte & Prinzipien
- DevOps-Kennzahlen und KPIs
- DevOps-Ratschläge für kleine, mittlere und große Organisationen
- DevOps-Teamstruktur
- Top-DevOps-Bücher, die man heute lesen sollte
- Buchrezension von The Phoenix Project: DevOps For Everyone
- DevOps-Influencer: 11 DevOps-Experten, denen Sie auf Twitter folgen können
- GitHub, GitLab, Bitbucket & Azure DevOps: Was ist der Unterschied?
- Best Practices: Wie man Anwendungen für Kubernetes architekt
- Konfigurationsmanagement in DevOps
- DevOps-Verzweigungsstrategien erklärt
- DevOps-Jobbezeichnungen, Rollen und Verantwortlichkeiten
- Testen in DevOps: Konzepte, Best Practices und mehr
- Der vollständige DevOps-Zertifizierungsleitfaden für 2022
- Was ist das Kubernetes-Operator-Muster?
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.