ProHoster > Blog > Verwaltung > 7 Best Practices für die Verwendung von Containern laut Google
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?
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.
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.)
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.
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.
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.