Risiken
Ausfallsicherheit Kubernetes-Komponenten
Die Gewährleistung der Ausfallsicherheit von Kubernetes-Komponenten ist entscheidend für die Aufrechterhaltung einer stabilen und robusten Cluster-Umgebung. Kubernetes unterstützt Cluster mit bis zu 5000 Knoten, aber es ist wichtig, bestimmte Kriterien einzuhalten und fortschrittliche Funktionen wie den HorizontalPodAutoscaler zu verwenden, um eine optimale Leistung aufrechtzuerhalten und eine Ressourcenerschöpfung zu vermeiden.
Empfohlene Grenzwerte für die Ausfallsicherheit von Clustern
Um die Ausfallsicherheit zu gewährleisten, wird empfohlen, die folgenden Grenzwerte einzuhalten:
- Nicht mehr als 100 Pods pro Knoten
- Nicht mehr als 5000 Knoten
- Nicht mehr als 150.000 Pods insgesamt
- Nicht mehr als 300.000 Container insgesamtl
Die Skalierung des Clusters durch Hinzufügen oder Entfernen von Knoten nach Bedarf trägt zur Aufrechterhaltung von Leistung und Verfügbarkeit bei.
Maßnahme M039: Replikate und Autoscaler
HorizontalPodAutoscaler (HPA)
Kubernetes bietet einen HorizontalPodAutoscaler (HPA) zur automatischen Skalierung der Anzahl von Pods in einem ReplicaController, Deployment, ReplicaSet oder StatefulSet auf Grundlage der beobachteten CPU-Auslastung. Der HPA hilft, eine übermäßige Ressourcennutzung zu verhindern und bietet Schutz vor Forkbombing-Angriffen.
Schutz vor Forkbombing
Angreifer können Befehle wie kubectl scale
verwenden, um eine übermäßige Anzahl von Pods zu erstellen, die möglicherweise den Cluster lahmlegen. Zum Beispiel:
kubectl scale deployment <Name> --replicas=10000000000000000000000000000000
Dieser Befehl würde wahrscheinlich zum Absturz des Clusters führen. Mit dem HPA können Sie eine maximale Anzahl von Replikaten festlegen und so solche Angriffe verhindern. Zum Beispiel:
kubectl autoscale deployment test --max=3
Aktivieren des Metrics Servers
Um die HPA vollständig nutzen zu können, ist ein Metrikserver erforderlich, der CPU- und Speicherdaten liefert. Der Metrikserver kann wie folgt installiert und konfiguriert werden:
- Installieren Sie den Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/<find latest one>/components.yaml
-
Konfiguration des Metrics Servers:
Bearbeiten Sie die Bereitstellung, um die erforderlichen Argumente hinzuzufügen
kubectl edit deployment metrics-server -n kube-system
Fügen Sie die folgenden Einträge in den Abschnitt args ein:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP
- --kubelet-use-node-status-port
- --kubelet-insecure-tls
Wenn der Metrics Server aktiviert ist, kann die HPA korrekt funktionieren.
Beispiel für HorizontalPodAutoscaler
- Erstellen Sie einen Einsatz und einen Dienst:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
Wenden Sie die obige YAML an, um die Bereitstellung und den Dienst zu erstellen:
kubectl apply -f /path/to/deployment.yaml
- Einen Autoscaler erstellen:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Überprüfen Sie die Autoscaler im Standard-Namespace:
kubectl get hpa
- Erzeugen Sie Last, um den Autoscaler zu testen:
Verwenden Sie einen BusyBox-Pod zur Erzeugung von Last auf dem php-apache-Einsatz:
kubectl run -it load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Überwachen Sie die HPA in Aktion:
watch kubectl get hpa
Schlussfolgerung
Die Einhaltung der empfohlenen Grenzwerte und die Verwendung von Tools wie dem HorizontalPodAutoscaler und dem Metrics Server sind für die Aufrechterhaltung der Widerstandsfähigkeit von Kubernetes-Clustern unerlässlich. Durch die richtige Konfiguration dieser Komponenten können Sie die Erschöpfung von Ressourcen verhindern, sich vor Angriffen schützen und sicherstellen, dass Ihr Cluster stabil und leistungsfähig bleibt. Die Umsetzung dieser Best Practices hilft Ihnen, Ihre Kubernetes-Umgebung vor potenziellen Bedrohungen und betrieblichen Herausforderungen zu schützen.