Türchen #20: Container Best Practices
Von Christian Weirich am 20. Dezember 2019
Kubernetes, erst seit 2014 verfügbar, hat in den letzten Jahren eine sagenhafte Verbreitung erlangt. Man könnte auch von einem Hype sprechen.
Die Plattform für Container-Orchestrierungs wird von AWS als Service mit dem Namen EKS angeboten. Im Rahmen von EKS managed AWS die Controlplane für Kunden, die dann nur noch die sogenannten Worker-Nodes administrieren müssen. Mit Fargate für EKS wird nun EKS serverless und perspektivisch wird eine weitere Fokussierung in Richtung Container erfolgen. Hinsichtlich Container folgen nun einige Best Practices, die sich etabliert haben.
Baut kleine Images
Kleine Images haben eine ganze Reihe von Vorteilen:
- Image pulls in Production benötigen weniger Zeit
- weniger Angriffsfläche
- weniger Speicherplatznutzung
Im Beitrag Docker Multistage Builds hat Michael bereits wertvolle Tipps gegeben, wie Container-Images möglichst schlank ausfallen.
Isolation: 1 Container = 1 Prozess
Früher… Früher war Hardware teuer. Früher hatten wir immer mehrere Applikationen auf einem Server und jeder, der früher Server administriert hat, kennt die unschönen Seiteneffekte.
Mit virtuellen Maschinen und mit Containern gibt es großartige Technologien um Applikationen zu isolieren und Seiteneffekte zu minimieren. Unser Tipp: Ein Container beinhaltet einen Prozess. Das macht dann auch die Healthchecks einfacher.
Kein Latest-Tag
Nutzt kein Latest-Tag, sondern ein Versions-Tag. Das Versions-Tag dient der eindeutigen Identifizierung von Images. Ansonsten riskiert ihr, dass ohne Versionsangabe immer die letzte (latest) Version gepullt wird.
Hilfreich ist meist auch, wenn in der Produktionsumgebung die Version einen eindeutigen Rückschluss auf die Version im GIT gibt.
Container-Scanning
Auch in Containern kann sich Schadecode verstecken. Um das Risiko zu minimieren und Container auf Schadcode zu kontrollieren, gibt es bereits seit geraumer Zeit clair. Eleganter ist es jedoch die Container mit AWS Bordmitteln umzusetzen: Container Scanning mit ECR
Keine Credentials in Containern
Nutzt keine Credentials in Containern. Es gibt beispielsweise die Möglichkeit, über den AWS Secrets Manager Passwörter während der Laufzeit zu erhalten.