Anmerkung des Übersetzers.: Autor des ursprünglichen Artikels ist Théo Chamley, Architekt für Cloud-Lösungen bei Google. In diesem Beitrag für den Google Cloud Blog präsentiert er eine kurze Zusammenfassung eines detaillierteren Leitfadens seines Unternehmens mit dem Titel „“. Darin haben Experten von Google die besten Praktiken für den Betrieb von Containern im Kontext der Nutzung von Google Kubernetes Engine und darüber hinaus gesammelt und ein breites Themenspektrum behandelt: von Sicherheit über Monitoring bis hin zu Logging. Was sind also laut Google die wichtigsten Praktiken im Umgang mit Containern?

(ein auf Kubernetes basierender Service zum Ausführen von containerisierten Anwendungen in Google Cloud — Anm. d. Ü.) — gehört zu den besten Möglichkeiten, Workloads zu starten, die skalierbar sind. es wird ein reibungsloses Funktionieren der meisten Anwendungen gewährleisten, sofern diese containerisiert sind. Wenn Sie jedoch möchten, dass die Anwendung einfach zu verwalten ist und alle Vorteile von Kubernetes nutzen möchten, müssen Sie bewährte Praktiken befolgen. Diese erleichtern den Betrieb der Anwendung, deren Überwachung und Fehlersuche und verbessern zudem die Sicherheit.
In diesem Artikel gehen wir die Liste durch, was Sie wissen und tun sollten, um die effiziente Funktionsweise von Containern in Kubernetes sicherzustellen. Wer tiefer in die Details eintauchen möchte, sollte das Material lesen , sowie auf unseren zur Container-Bereitstellung achten.
1. Verwenden Sie die nativen Mechanismen von Containern für Logging
Wenn die Anwendung in einem Kubernetes-Cluster läuft, benötigt man für Logs nicht viel. Ein zentrales Logging-System ist wahrscheinlich bereits in das verwendete Cluster integriert. Bei der Nutzung von Kubernetes Engine ist dafür . (Anmerkung des Übersetzers.: sollte man sich bei der Nutzung einer eigenen Kubernetes-Installation unser Open-Source-Tool ansehen — .) Machen Sie es sich nicht selbst schwer und nutzen Sie die nativen Logging-Mechanismen von Containern. Schreiben Sie die Logs in stdout und stderr — diese werden automatisch erfasst, gespeichert und indiziert.
Wenn gewünscht, können Sie die Logs auch im schreiben. Dieser Ansatz ermöglicht es, einfach Metadaten hinzuzufügen. Zusammen mit diesen wird in Stackdriver Logging die Möglichkeit geschaffen, in den Logs mithilfe dieser Metadaten zu suchen.
2. Stellen Sie sicher, dass die Container stateless und immutable sind
Für die ordnungsgemäße Funktion von Containern im Kubernetes-Cluster müssen sie stateless und immutable sein. Wenn diese Bedingungen erfüllt sind, kann Kubernetes seine Arbeit verrichten, indem es Anwendungsentitäten erstellt und löscht, wann und wo es nötig ist.
Stateless bedeutet, dass jeglicher Zustand (dauerhafte Daten jeglicher Art) außerhalb des Containers gespeichert wird. Dazu können je nach Bedarf verschiedene Arten externer Speicher verwendet werden: , , , oder andere verwaltete Datenbanken. (Anmerkung des Übersetzers.: Weitere Informationen hierzu finden Sie auch in unserem Artikel „».)
Immutable bedeutet, dass der Container während seiner Lebensdauer nicht modifiziert wird: keine Updates, Patches oder Änderungen an der Konfiguration. Wenn Sie den Anwendungscode aktualisieren oder einen Patch anwenden müssen, erstellen Sie ein neues Image und deployen Sie es. Es wird empfohlen, die Container-Konfiguration (Port zum Lauschen, Optionen der Ausführungsumgebung usw.) nach außen zu verlagern — in und . Diese können aktualisiert werden, ohne dass ein neues Container-Image erstellt werden muss. Für die einfache Erstellung von Pipelines zur Erstellung von Images kann man . (Anmerkung des Übersetzers.: Für diese Zwecke verwenden wir das Open Source-Tool .)

Beispiel für die Aktualisierung der Deployment-Konfiguration in Kubernetes mit Hilfe von ConfigMap, die in Pods als Konfiguration eingebunden ist.
3. Vermeiden Sie privilegierte Container
Sie führen doch keine Anwendungen als root auf Ihren Servern aus, oder? Wenn ein Angreifer in die Anwendung eindringt, erhält er Zugriff mit Root-Rechten. Dieselben Überlegungen gelten auch, um keine privilegierten Container auszuführen. Wenn es erforderlich ist, Einstellungen auf dem Host zu ändern, kann dem Container spezifische Capabilities festzulegen mit der Option in Kubernetes gegeben werden. Wenn es erforderlich ist, sysctls, besitzt Kubernetes eine dafür. Im Allgemeinen sollten Sie versuchen, so viele wie möglich und Sidecar-Container für solche privilegierten Operationen zu verwenden. Sie benötigen keine Erreichbarkeit für internen oder externen Datenverkehr.
Wenn Sie den Cluster verwalten, können Sie die für Beschränkungen bei der Verwendung privilegierter Container nutzen.
4. Vermeiden Sie es, als root auszuführen
Über privilegierte Container wurde bereits gesprochen, es wäre jedoch noch besser, wenn Sie zusätzlich dazu keine Anwendungen innerhalb des Containers als root ausführen. Wenn ein Angreifer eine Remote-Schwachstelle mit Codeausführung in einer Anwendung mit root-Rechten findet und dann durch eine bisher unbekannte Schwachstelle den Container verlässt, erhält er root-Rechte auf dem Host.
Der beste Weg, dies zu vermeiden, besteht darin, zunächst nichts unter root auszuführen. Dazu kann die Direktive USER in Dockerfile oder runAsUser in Kubernetes verwendet werden. Der Cluster-Administrator kann auch ein erzwungenes Verhalten mithilfe von .
5. Machen Sie die Anwendung einfach zu überwachen
Wie bei der Protokollierung ist das Monitoring ein unverzichtbarer Bestandteil des Anwendungsmanagements. Eine beliebte Lösung für das Monitoring in der Kubernetes-Community ist — ein System, das Pods und Dienste, die überwacht werden müssen, automatisch erkennt. (Anmerkung des Übersetzers.: Siehe auch unseren zum Thema Monitoring mit Prometheus und Kubernetes.) kann Kubernetes-Cluster überwachen und enthält eine eigene Version von Prometheus zur Überwachung von Anwendungen.

Das Kubernetes-Dashboard in Stackdriver
erwartet, dass die Anwendung Metriken über einen HTTP-Endpunkt bereitstellt. Dazu stehen zur Verfügung. Ein ähnliches Format wird von anderen Tools wie und .
6. Machen Sie den Gesundheitszustand der Anwendung zugänglich
Das Management der Anwendung in der Produktion wird durch ihre Fähigkeit unterstützt, ihren Status dem gesamten System mitzuteilen. Ist die Anwendung gestartet? Ist sie in Ordnung? Ist sie bereit, Traffic zu akzeptieren? Wie verhält sie sich? Die gängigste Lösung für dieses Problem ist die Implementierung von Gesundheitsprüfungen (health checks). Kubernetes hat zwei Typen davon: .
Für die liveness probe (Lebensfähigkeitsprüfung) muss die Anwendung einen HTTP-Endpunkt haben, der eine Antwort von „200 OK“ zurückgibt, wenn sie funktioniert und ihre grundlegenden Abhängigkeiten erfüllt sind. Für die readiness probe (Bereitschaftsprüfung) Die Anwendung sollte einen anderen HTTP-Endpunkt haben, der eine Antwort "200 OK" zurückgibt, wenn die Anwendung in einem gesunden Zustand ist, die Initialisierungsschritte abgeschlossen sind und keine korrekten Anfragen zu einem Fehler führen. Kubernetes leitet den Verkehr nur zu dem Container weiter, wenn die Anwendung gemäß diesen Überprüfungen bereit ist. Zwei Endpunkte können zusammengeführt werden, wenn es keinen Unterschied zwischen den Zuständen der Lebensfähigkeit (liveness) und der Einsatzbereitschaft (readiness) gibt.
Weitere Informationen finden Sie in dem entsprechenden Artikel von Sandeep Dinesh, Developer Advocate bei Google: „».
7. Wählen Sie die Version des Images sorgfältig aus
Die meisten öffentlichen und privaten Images verwenden ein Tagging-System, das dem in beschriebenen ähnlich ist. Wenn das Image ein System anwendet, das nahe muss die spezifische Tagging-Praxis berücksichtigt werden. Zum Beispiel kann das Tag latest häufig zwischen Images wechseln — es ist nicht zuverlässig, wenn Sie vorhersehbare und reproduzierbare Build- und Installationsprozesse benötigen.
Sie können das Tag X.Y.Z verwenden (es bleibt fast immer konstant), aber in diesem Fall sollten Sie alle Patches und Updates des Images überwachen. Wenn das verwendete Image ein Tag hat X.Y, ist das eine gute Zwischenlösung. Wenn Sie es wählen, erhalten Sie automatisch alle Patches und stützen sich gleichzeitig auf eine stabile Version der Anwendung.
P.S. vom Übersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «» (Überblick und Video des Vortrags);
- «» (Überblick und Video des Vortrags);
- «» (Überblick und Video des Vortrags);
- «» (Überblick und Video des Vortrags);
- «».
Quelle: habr.com
