7 Best Practices für die Verwendung von Containern laut Google

Notiz. übersetzen: Der Autor des Originalartikels ist Théo Chamley, Google Cloud Solutions Architect. In diesem Beitrag für den Google Cloud-Blog bietet er eine Zusammenfassung des detaillierteren Leitfadens seines Unternehmens mit dem Titel „Best Practices für den Betrieb von Containern" Darin sammelten Google-Experten Best Practices für den Betrieb von Containern im Zusammenhang mit der Nutzung der Google Kubernetes Engine und mehr und berührten dabei ein breites Themenspektrum: von Sicherheit bis hin zu Überwachung und Protokollierung. Was sind laut Google die wichtigsten Container-Praktiken?

7 Best Practices für die Verwendung von Containern laut Google

Kubernetes-Engine (Kubernetes-basierter Dienst zum Ausführen von Containeranwendungen in Google Cloud – ca. Übersetzung) ist eine der besten Möglichkeiten, Workloads auszuführen, die skaliert werden müssen. Kubernetes gewährleistet ein reibungsloses Funktionieren der meisten Anwendungen, wenn sie in Containern vorliegen. Wenn Sie jedoch möchten, dass Ihre Anwendung einfach zu verwalten ist und Sie alle Vorteile von Kubernetes nutzen möchten, müssen Sie Best Practices befolgen. Sie vereinfachen die Bedienung der Anwendung, ihre Überwachung und Fehlerbehebung und erhöhen zudem die Sicherheit.

In diesem Artikel gehen wir eine Liste der Dinge durch, die Sie wissen und tun sollten, um Container effektiv auf Kubernetes auszuführen. Wer tiefer in die Details einsteigen möchte, sollte das Material lesen Best Practices für den Betrieb von Containern, und achten Sie auch auf unsere früherer Beitrag über den Zusammenbau von Behältern.

1. Verwenden Sie native Container-Protokollierungsmechanismen

Wenn die Anwendung auf einem Kubernetes-Cluster ausgeführt wird, ist für Protokolle nicht viel erforderlich. Ein zentralisiertes Protokollierungssystem ist wahrscheinlich bereits in den von Ihnen verwendeten Cluster integriert. Im Falle der Nutzung der Kubernetes Engine ist diese verantwortlich Stackdriver-Logging. (Notiz. übersetzen: Und wenn Sie eine eigene Kubernetes-Installation nutzen, empfehlen wir Ihnen, einen genaueren Blick auf unsere Open-Source-Lösung zu werfen – Blockhaus.) Halten Sie Ihr Leben einfach und nutzen Sie native Container-Protokollierungsmechanismen. Schreiben Sie Protokolle in stdout und stderr – sie werden automatisch empfangen, gespeichert und indiziert.

Auf Wunsch können Sie auch Protokolle schreiben JSON-Format. Dieser Ansatz erleichtert das Hinzufügen von Metadaten. Und damit wird Stackdriver Logging die Möglichkeit haben, Protokolle anhand dieser Metadaten zu durchsuchen.

2. Stellen Sie sicher, dass Container zustandslos und unveränderlich sind

Damit Container in einem Kubernetes-Cluster ordnungsgemäß funktionieren, müssen sie zustandslos und unveränderlich sein. Sobald diese Bedingungen erfüllt sind, kann Kubernetes seine Aufgabe erfüllen und bei Bedarf Anwendungsentitäten erstellen und zerstören.

Staatenlos bedeutet, dass jeder Zustand (persistente Daten jeglicher Art) außerhalb des Containers gespeichert wird. Hierfür können je nach Bedarf unterschiedliche Arten von externem Speicher genutzt werden: Cloud Storage, Persistente Festplatten, Redis, SQL Cloud oder andere verwaltete Datenbanken. (Notiz. übersetzen: Lesen Sie mehr dazu in unserem Artikel „Operatoren für Kubernetes: So führen Sie zustandsbehaftete Anwendungen aus. ")

Unveränderlich bedeutet, dass der Container während seiner Lebensdauer nicht verändert wird: keine Updates, Patches, Konfigurationsänderungen. Wenn Sie Ihren Anwendungscode aktualisieren oder einen Patch anwenden müssen, erstellen Sie ein neues Image und stellen Sie es bereit. Es wird empfohlen, die Containerkonfiguration (Abhörport, Laufzeitumgebungsoptionen usw.) nach extern zu verschieben Geheimnisse и ConfigMaps. Sie können aktualisiert werden, ohne dass ein neues Container-Image erstellt werden muss. Zum einfachen Erstellen von Pipelines mit Image-Assembly können Sie Folgendes verwenden: Cloud-Build. (Notiz. übersetzen: Für diese Zwecke verwenden wir ein Open-Source-Tool dapp.)

7 Best Practices für die Verwendung von Containern laut Google
Ein Beispiel für die Aktualisierung der Bereitstellungskonfiguration in Kubernetes mithilfe von ConfigMap, das in Pods als Konfiguration bereitgestellt wird

3. Vermeiden Sie privilegierte Container

Sie führen doch keine Anwendungen als Root auf Ihren Servern aus, oder? Gelangt ein Angreifer in die Anwendung, erhält er Root-Zugriff. Die gleichen Überlegungen gelten für die Nichtausführung privilegierter Container. Wenn Sie Einstellungen auf dem Host ändern müssen, können Sie den Container spezifisch angeben Fähigkeiten die Option nutzen securityContext in Kubernetes. Wenn Sie etwas ändern müssen sysctls, Kubernetes hat separate Zusammenfassung dafür. Versuchen Sie im Allgemeinen, das Beste daraus zu machen drin- und Sidecar-Container, um ähnliche privilegierte Vorgänge auszuführen. Sie müssen weder für internen noch für externen Datenverkehr zugänglich sein.

Wenn Sie einen Cluster verwalten, können Sie ihn verwenden Pod-Sicherheitsrichtlinie für Einschränkungen bei der Nutzung privilegierter Container.

4. Vermeiden Sie die Ausführung als Root

Privilegierte Container wurden bereits besprochen, aber noch besser ist es, wenn Sie darüber hinaus keine Anwendungen innerhalb des Containers als Root ausführen. Wenn ein Angreifer eine Remote-Schwachstelle in einer Anwendung mit Root-Rechten findet, die die Ausführung von Code ermöglicht, und anschließend den Container über eine noch unbekannte Schwachstelle verlassen kann, erhält er Root auf dem Host.

Der beste Weg, dies zu vermeiden, besteht darin, gar nichts als Root auszuführen. Dazu können Sie die Direktive verwenden USER в Dockerfile oder runAsUser in Kubernetes. Der Cluster-Administrator kann das Durchsetzungsverhalten auch über konfigurieren Pod-Sicherheitsrichtlinie.

5. Machen Sie die Anwendung einfach zu überwachen

Wie die Protokollierung ist auch die Überwachung ein integraler Bestandteil des Anwendungsmanagements. Eine beliebte Überwachungslösung in der Kubernetes-Community ist Prometheus - ein System, das automatisch Pods und Dienste erkennt, die überwacht werden müssen. (Notiz. übersetzen: Siehe auch unsere ausführlicher Bericht zum Thema Monitoring mit Prometheus und Kubernetes.) Stackdriver ist in der Lage, Kubernetes-Cluster zu überwachen und enthält eine eigene Version von Prometheus für die Anwendungsüberwachung.

7 Best Practices für die Verwendung von Containern laut Google
Kubernetes-Dashboard auf Stackdriver

Prometheus erwartet, dass die Anwendung Metriken an den HTTP-Endpunkt weiterleitet. Dafür verfügbar Prometheus-Clientbibliotheken. Das gleiche Format wird von anderen Tools wie verwendet OpenCensus и Istio.

6. Stellen Sie den Gesundheitsstatus der App zur Verfügung

Das Anwendungsmanagement in der Produktion wird durch seine Fähigkeit unterstützt, seinen Zustand dem gesamten System mitzuteilen. Läuft die Anwendung? Ist es ok? Sind Sie bereit, Traffic zu empfangen? Wie verhält er sich? Der häufigste Weg, dieses Problem zu lösen, ist die Implementierung von Gesundheitsprüfungen (Gesundheitschecks). Kubernetes hat zwei Typen: Lebendigkeits- und Bereitschaftssonden.

Zur Lebendigkeitssonde (Vitalitätschecks) Die Anwendung muss über einen HTTP-Endpunkt verfügen, der eine „200 OK“-Antwort zurückgibt, wenn sie funktionsfähig ist und ihre grundlegenden Abhängigkeiten erfüllt sind. Zur Bereitschaftssonde (Servicebereitschaftsprüfungen) Die Anwendung muss über einen weiteren HTTP-Endpunkt verfügen, der eine „200 OK“-Antwort zurückgibt, wenn sich die Anwendung in einem fehlerfreien Zustand befindet, die Initialisierungsschritte abgeschlossen wurden und keine gültige Anfrage zu einem Fehler führt. Kubernetes leitet den Datenverkehr nur dann an den Container weiter, wenn die Anwendung gemäß diesen Prüfungen bereit ist. Zwei Endpunkte können zusammengeführt werden, wenn zwischen den Liveness- und Bereitschaftszuständen kein Unterschied besteht.

Mehr dazu können Sie im entsprechenden Artikel von Sandeep Dinesh, Developer Advocate von Google, lesen: „Best Practices für Kubernetes: Einrichten von Integritätsprüfungen mit Bereitschafts- und Liveness-Prüfungen".

7. Wählen Sie Ihre Bildversion sorgfältig aus

Die meisten öffentlichen und privaten Bilder verwenden ein Tagging-System, das dem in beschrieben ähnelt Best Practices für den Containerbau. Wenn das Bild ein System in der Nähe verwendet Semantische Versionierung, müssen die Besonderheiten des Taggings berücksichtigt werden. Zum Beispiel markieren latest kann häufig von Image zu Image wechseln – Sie können sich nicht darauf verlassen, wenn Sie vorhersehbare und wiederholbare Builds und Installationen benötigen.

Sie können das Tag verwenden X.Y.Z (sie bleiben fast immer unverändert), aber behalten Sie in diesem Fall den Überblick über alle Patches und Aktualisierungen des Images. Wenn das von Ihnen verwendete Bild über ein Tag verfügt X.Y, das ist eine gute Option für die goldene Mitte. Wenn Sie sich dafür entscheiden, erhalten Sie automatisch Patches und können sich gleichzeitig auf die stabile Version der Anwendung verlassen.

PS vom Übersetzer

Lesen Sie auch auf unserem Blog:

Source: habr.com

Kommentar hinzufügen