Auf einen Blick: Best Practices für Kubernetes verbessern die Effizienz und Sicherheit von Clustern und optimieren gleichzeitig Anwendungsbauten. Wichtige Strategien umfassen die Nutzung der neuesten Version, die Implementierung von Namespaces für die Ressourcenzuweisung, die Einführung von GitOps für CI/CD-Workflows und das regelmäßige Überprüfen von Policy-Logs zur Überwachung des Ressourcenverbrauchs.
- Verwenden Sie immer die neueste Kubernetes-Version für Sicherheit und Funktionen.
- Nutze Namensräume für Team-Ebene Isolation und Ressourcenzuteilung.
- Verwenden Sie GitOps für optimierte CI/CD-Workflows.
- Regelmäßig werden Richtlinienprotokolle überprüft, um Bedrohungen zu identifizieren und den Ressourcenverbrauch zu überwachen.
Da die Containerisierung architektonische Muster der Anwendungsentwicklung rasant verändert, bleibt die Kubernetes-Plattform ihr Vorzeige. Laut Forresters Container Adoption Survey 2020 nutzen etwa 65 % der befragten Organisationen bereits Container-Orchestrierungstools im Rahmen ihrer IT-Transformationsstrategie oder planen, sie einzusetzen. Mit großer Wahrscheinlichkeit wird die Beliebtheit von Kubernetes nur wachsen.
Obwohl Kubernetes eine zukunftssichere Containerlösung bietet, um die Produktivität zu steigern, zeigen Anwendungsfälle auch, dass es nicht immer der beste Ansatz ist, sich ausschließlich auf standardisierte Kubernetes-Dienste zur Containerisierung von Anwendungsbuilds zu verlassen. Um das Beste aus K8s herauszuholen, implementieren Sie Best Practices und folgen Sie einem individuell konfigurierten Modell, um die optimale Plattform Ihres Anwendungsbaus sicherzustellen.
Dieser Artikel wird 11 Best Practices beleuchten, um ein Kubernetes-Clustermodell zu realisieren, das skalierbar, sicher und hochoptimiert ist.
1. Laden Sie die neueste Version herunter
Mit seinen regelmäßigen Versionsupdates veröffentlicht Kubernetes neue Funktionen, Fehlerbehebungen und Plattform-Upgrades. Als Faustregel gilt: Sie sollten immer die neueste Kubernetes-Version in Ihrem Cluster verwenden. Dies stellt sicher, dass Ihre Version Folgendes enthält:
- Alle aktualisierten Funktionen, damit du keine Unterstützung für ältere, nicht unterstützte Versionen verpasst.
- Aktualisierte Sicherheitspatches, die potenzielle Angriffsvektoren hinauszögern und gleichzeitig gemeldete Schwachstellen beheben.
Während aktualisierte Funktionen gut sind, ist die aktualisierte Sicherheit entscheidend.
2. Verwenden Sie Namensräume
Die Einführung von Kubernetes in größeren Organisationen mit mehreren Teams, die auf denselben Cluster zugreifen, erfordert einen individuellen Ansatz zur Ressourcennutzung. Unsachgemäße Zugänglichkeitsbereitstellung führt häufig zu Konflikten zwischen Teams bezüglich der Ressourcennutzung.
Um dies zu lösen, verwenden Sie Namespaces, um Team-Isolation für Teams zu erreichen, die gleichzeitig auf dieselben Clusterressourcen zugreifen wollen. Effiziente Nutzung von Namespaces hilft, mehrere logische Cluster-Partitionen zu erstellen und so unterschiedliche virtuelle Ressourcen zwischen Teams zuzuweisen.
3. Pflege von kleinen Containerabbildungen
Die meisten Entwickler machen den Fehler, das Basisimage direkt aus der Verpackung zu verwenden, das bis zu 80 % der Pakete und Bibliotheken enthält, die sie nicht benötigen.
Verwende immer kleinere Container-Images, da das dir hilft, schnellere Builds zu erstellen. Als Best Practice solltest du:
- Nimm Alpine Images, da sie zehnmal kleiner sind als die Basisbilder
- Füge die notwendigen Bibliotheken und Pakete für deine Anwendung hinzu.
Kleinere Bilder sind zudem weniger anfällig für Angriffsvektoren aufgrund einer verkleinerten Angriffsfläche.
4. Ressourcenanfragen und -limits festlegen
Um Fälle zu vermeiden, in denen ein einzelnes Team oder eine einzelne Anwendung alle Clusterressourcen verbraucht, setzen Sie Anfragen und Limits für Clusterressourcen, insbesondere CPU und Speicher. Dies begrenzt den unverhältnismäßigen Ressourcenverbrauch durch Anwendungen und Dienste und vermeidet so Kapazitätsausfälle.
Um Anfragen und Limits für einen Container festzulegen, können Sie folgende Container-Spezifikation als Referenz verwenden:
containers:
- name: darwin
image: CentOS
resources:
requests:
memory: “256Mi”
cpu: “300m”
limits:
memory: “1024Mi”
cpu: “900m”
Die obige Container-Spezifikation weist im Wesentlichen Ressourcenanfragen 256 MiB Speicher und 300 mCPU zu, während maximal 900 mCPU und 1024 MiB auf den Darwin-Container begrenzt werden.
5. Verwenden Sie ReadinessProbe und LivenessProbe
Nutzen Sie Kubernetes Check Probes , um proaktiv Pod-Ausfälle zu vermeiden:
- Mit readinessProbe für Produktionsanwendungen prüft Kubernetes, ob die Anwendung bereit ist, den Datenverkehr zu servieren, bevor der Datenverkehr zu einem Pod zugelassen wird. Dies zeigt im Wesentlichen an, ob ein Pod verfügbar ist, um Datenverkehr zu empfangen und Anfragen zu beantworten.
- Über eine LivenessProbe führt Kubernetes eine Gesundheitsprüfung durch, um sicherzustellen, dass die Anwendung reagiert und wie vorgesehen läuft. Falls die LivenessProbe ausfällt, startet die Standardrichtlinie von Kubelet den Container neu, um ihn wieder hochzusetzen.
6. RBAC zur Sicherheit einsetzen
Rollenbasierte Zugriffskontrollen (RBAC) helfen bei der Verwaltung von Zugriffsrichtlinien, um zu definieren, wer was auf dem Kubernetes-Cluster tun darf. Um RBAC-Berechtigungen für Kubernetes-Ressourcen festzulegen, stellt Kubernetes folgende Parameter bereit:
- Rolle einer namensräumten Ressource
- ClusterRole für eine nicht-namespaced Ressource
Hier ist ein Beispiel, bei dem ClusterRole verwendet wird, um den Lesezugriff auf Dienste auf allen Namespaces zu verwalten:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: reader
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get","watch","list"]
Zusätzlich ermöglicht Kubernetes auch RoleBinding und ClusterRoleBinding , indem es auf bereits auf einem Benutzer-, Gruppen- oder Servicekonto verwaltete Rollen referenziert. Weitere Details zu den Kubernetes-RBAC-Richtlinien finden Sie hier.
7. Autoskalierung
Es wird dringend empfohlen, die Vorteile der Autoskalierungsmechanismen von Kubernetes zu nutzen, um Cluster-Services mit einem Anstieg des Ressourcenverbrauchs automatisch zu skalieren.
Mit Horizontal Pod Autoscaler und Cluster Autoscaler werden Knoten- und Podvolumen dynamisch in Echtzeit angepasst, wodurch die Last optimal gehalten und Kapazitätsausfälle vermieden werden.
8. Kontrollebenenkomponenten überwachen
Machen Sie nicht diesen häufigen Fehler: Sie vergessen, das Gehirn des Kubernetes-Clusters – die Kontrollebene – zu überwachen. Die Steuerebene umfasst:
- der Kubernetes API Service
- Kubelet
- Controller-Manager
- etcd
- kube-proxy
- kube-dns
Die Überwachung der Steuerungsebene hilft, Probleme/Bedrohungen innerhalb des Clusters zu identifizieren und die Latenz zu erhöhen. Es wird außerdem empfohlen, automatisierte Überwachungstools (Dynatrace, Datadog, Sysdig usw.) zu verwenden, anstatt die Alarme manuell zu verwalten.
Das Überwachen der Steuerplankomponenten deines Kubernetes überwacht im Grunde Arbeitsbelastung und Ressourcenverbrauch, um Probleme mit der Gesundheit deines Clusters zu mindern.
9. Git-basierten Workflow übernehmen
Verwenden Sie GitOps, einen Git-basierten Workflow, als bevorzugtes Modell, um Git als einzige Wahrheitsquelle für alle Automatisierungen, einschließlich CI/CD-Pipelines, zu nutzen. Die Einführung eines GitOps-Frameworks hilft, die Produktivität zu steigern, indem Folgendes:
- Verkürzung der Einsatzzeiten
- Verbesserung der Fehlerrückverfolgbarkeit
- Automatisierung von CI/CD-Workflows
Die Nutzung von GitOps auf einem Kubernetes-Cluster hilft Ihnen, ein einheitliches Management des Clusters sowie eine beschleunigte Anwendungsentwicklung zu erreichen.
10. Achten Sie auf hohe Festplattennutzung
Hohe Festplattennutzung ist ein häufiges Problem, das die Cluster-Leistung beeinträchtigt. Als regelmäßige Praxis sollten Sie Folgendes überwachen:
- Das Root-Dateisystem
- Alle mit dem Cluster assoziierten Festplattenvolumes
Häufig gibt es auch Warnungen wegen hoher Festplattenauslastung aus Unknown Gründen; solche Fälle sind meist schwierig zu beheben, da die Ursache nicht klar ist. Die Überwachung von Warnungen hilft, Korrekturmaßnahmen zu ergreifen, entweder durch Skalierung oder die Freigabe von Speicherplatz zum richtigen Zeitpunkt.
11. Regelmäßig Richtlinienprotokolle überprüfen
Als Best Practice unterschätzt, müssen alle Logs, die bei /var/log/audit.log gespeichert sind, regelmäßig geprüft werden, um:
- Bedrohungen identifizieren
- Ressourcenverbrauch überwachen
- Erfassen Sie wichtige Ereignis-Herzschläge des Kubernetes-Clusters
Die Standardrichtlinien des Kubernetes-Clusters sind in der Datei /etc/kubernetes/audit-policy.yaml definiert und können an spezifische Anforderungen angepasst werden. Außerdem könnten Sie Fluentd auch als Open-Source-Tool nutzen, um eine zentrale Logging-Schicht für Ihre Container zu pflegen.
Individueller Ansatz für K8s
Wenn Sie bereits Kubernetes verwenden oder sich produktionsbereit machen, hilft ein individueller Ansatz zur Konfiguration Ihres Clusters enorm. Diese Best Practices wurden wiederholt von Fachleuten vorgeschlagen, die bereits die harte Mühe des Lernens durchgemacht haben.
Sie werden oft auch einige Praktiken erkennen, die zu Ihrer Cluster-Architektur passen, da jeder Anwendungsbau einen völlig anderen Ansatz zur Feinabstimmung der Effizienz erfordert. Der Schlüssel zum Erfolg hängt unabhängig davon ab, wie optimiert Ihr containerisiertes Framework ist.
Zusätzliche Ressourcen
Für verwandte Lektüre lesen Sie diese Artikel:
Kubernetes-Leitfaden
- Was ist Kubernetes (K8s)? Ein Tutorial zu den Grundlagen von Kubernetes
- Kubernetes Best Practices für verbesserte Cluster-Effizienz
- Best Practices: Wie man Anwendungen für Kubernetes architekt
- Kubernetes Pods: Eine Einführung
- Kubernetes ReplicaSets: Eine kurze Einführung
- Kubernetes-Deployments vollständig erklärt
- Wie man Kubernetes DaemonSets verwendet und verwaltet
- Wie Kubernetes-Dienste funktionieren
- Verwendung von Kubernetes Port, TargetPort und NodePort
- Erstellen und verwenden von ConfigMaps in Kubernetes
- Einführung in Kubernetes-Geheimnisse
- Kubernetes-Netzwerkgrundlagen
- Kubernetes-Ingress erklärt
- Einführung in Kubernetes Helm Charts
- Was ist das Kubernetes-Operator-Muster?
- Bereitstellung von PostgreSQL als StatefulSet in Kubernetes
- Kubernetes Custom Resource Definition (CRDs) erklärt
- 3 Kubernetes-Muster für Cloud-native Anwendungen
- Kubernetes Compute-Ressourcen erklärt
- Kubernetes-Sicherheit für DevOps-Pipelines
- Verwendung von Spinnaker mit Kubernetes für Continuous Delivery
- Kubernetes-Multi-Cluster: Wie und warum man sie verwendet.
- Kubernetes-Überwachung: Ein umfassender Leitfaden
- Kubernetes vs. Docker: Ein kurzer Vergleich
- Kubernetes vs. Docker Swarm: Vergleich von Container-Orchestrierungstools
- Kubernetes vs. OpenShift: Was ist der Unterschied?
- Kubernetes-Zertifizierungen: Wie und warum man zertifiziert wird
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.