Einführung
In diesem Lab erfahren Sie, wie Sie Kubernetes ResourceQuota verwenden können, um Grenzen für den Ressourcenverbrauch in einem Kubernetes-Cluster festzulegen. ResourceQuota ermöglicht es Ihnen, die Zuweisung von Ressourcen wie CPU und Arbeitsspeicher für Namespaces in einem Kubernetes-Cluster zu steuern und zu verwalten. Sie beginnen mit einfachen Beispielen und arbeiten sich schrittweise zu komplexeren Szenarien vor. Jeder Schritt enthält Codebeispiele und Anweisungen zur Anwendung in Ihrem Kubernetes-Cluster.
Starten Sie den Minikube-Cluster
Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.
Navigieren Sie in Ihr Arbeitsverzeichnis:
Öffnen Sie das Terminal und navigieren Sie in den Standard-Projektordner:
cd /home/labex/projectStarten Sie Minikube:
Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:
minikube start- Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
- Je nach Leistung Ihres Systems kann es einige Minuten dauern, bis Minikube gestartet ist.
Überprüfen Sie, ob Minikube läuft:
Überprüfen Sie den Status des Minikube-Clusters:
minikube status- Suchen Sie nach Komponenten wie
kubeletundapiserver, die alsRunningaufgeführt sind. - Wenn der Cluster nicht läuft, führen Sie
minikube starterneut aus.
- Suchen Sie nach Komponenten wie
Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.
Erstellen einer ResourceQuota
In diesem Schritt erstellen Sie eine einfache ResourceQuota, die die Menge an CPU und Arbeitsspeicher begrenzt, die in einem Namespace verwendet werden kann. So geht's:
- Erstellen Sie eine Datei mit dem Namen
resourcequota.yamlmit folgendem Inhalt:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "1"
memory: "1Gi"
Diese ResourceQuota setzt die folgenden festen Grenzen:
- CPU: 1 Kern
- Arbeitsspeicher: 1 GiB
- Wenden Sie die Datei
resourcequota.yamlauf Ihren Kubernetes-Cluster an, indem Sie den Befehlkubectl applyverwenden:
kubectl apply -f resourcequota.yaml
- Überprüfen Sie, ob die ResourceQuota erfolgreich erstellt wurde, indem Sie den folgenden Befehl ausführen:
kubectl describe resourcequota example-resourcequota
Im Ausgabeergebnis sollten Sie die Details der ResourceQuota sehen.
Anwenden einer ResourceQuota auf einen Namespace
In diesem Schritt wenden Sie die in Schritt: Erstellen einer ResourceQuota erstellte ResourceQuota auf einen Namespace an. So geht's:
- Erstellen Sie eine Datei mit dem Namen
namespace.yamlmit folgendem Inhalt:
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
Diese Namespace-Definition erstellt einen Namespace mit dem Namen example-namespace.
- Wenden Sie die Datei
namespace.yamlauf Ihren Kubernetes-Cluster an, indem Sie den Befehlkubectl applyverwenden:
kubectl apply -f namespace.yaml
- Wenden Sie die ResourceQuota auf den Namespace
example-namespacean, indem Sie den Befehlkubectl applyverwenden:
kubectl apply -f resourcequota.yaml -n example-namespace
- Überprüfen Sie, ob die ResourceQuota auf den Namespace angewendet wurde, indem Sie den folgenden Befehl ausführen:
kubectl describe namespace example-namespace
Im Ausgabeergebnis sollten Sie die Details der auf den Namespace angewendeten ResourceQuota sehen.
Testen der Durchsetzung von Ressourcenkontingenten
In diesem Schritt erstellen Sie einen Pod, der die in der ResourceQuota definierten Ressourcenlimits überschreitet, und überprüfen, ob die ResourceQuota die Limits durchsetzt. So geht's:
- Erstellen Sie eine Datei mit dem Namen
pod-exceeding-limits.yamlmit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
name: example-pod-exceeding-limits
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: "2"
memory: "2Gi"
Diese Pod-Definition erstellt einen Pod mit einem Container, der Ressourcen anfordert, die die in Schritt: Erstellen einer ResourceQuota festgelegten Limits überschreiten (CPU: 2 Kerne, Arbeitsspeicher: 2 GiB).
- Wenden Sie die Datei
pod-exceeding-limits.yamlauf Ihren Kubernetes-Cluster an, indem Sie den Befehlkubectl applyverwenden:
kubectl apply -f pod-exceeding-limits.yaml
Sie können sehen, dass der Vorgang zum Erstellen des Pods abgelehnt wird. Die Fehlermeldung lautet: Error from server (Forbidden): error when creating "pod-exceeding-limits.yaml": pods "example-pod-exceeding-limits" is forbidden: exceeded quota: example-resourcequota, requested: cpu=2,memory=2Gi, used: cpu=0,memory=0, limited: cpu=1,memory=1Gi.
Ändern einer ResourceQuota
In diesem Schritt erfahren Sie, wie Sie eine vorhandene ResourceQuota ändern, um die Ressourcenlimits zu aktualisieren. So geht's:
- Bearbeiten Sie die Datei
resourcequota.yaml, um die CPU- und Arbeitsspeicherlimits auf höhere Werte zu aktualisieren:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "2"
memory: "2Gi"
Dadurch wird die ResourceQuota aktualisiert, um höhere Limits für CPU und Arbeitsspeicher zuzulassen (jeweils 2 Kerne und 2 GiB).
- Wenden Sie die aktualisierte Datei
resourcequota.yamlauf Ihren Kubernetes-Cluster an, indem Sie den Befehlkubectl applyverwenden:
kubectl apply -f resourcequota.yaml
- Überprüfen Sie, ob die ResourceQuota aktualisiert wurde, indem Sie den folgenden Befehl ausführen:
kubectl describe resourcequotas example-resourcequota
Im Ausgabeergebnis sollten Sie die aktualisierten CPU- und Arbeitsspeicherlimits sehen.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Kubernetes ResourceQuota verwenden, um Limits für den Ressourcenverbrauch in einem Kubernetes-Cluster festzulegen. Sie haben zunächst eine einfache ResourceQuota erstellt, sie auf einen Namespace angewendet und ihre Durchsetzung getestet, indem Sie einen Pod erstellt haben, der die Ressourcenlimits überschreitet. Sie haben auch gelernt, wie Sie eine vorhandene ResourceQuota ändern, um die Ressourcenlimits zu aktualisieren. ResourceQuota ist ein leistungsstarkes Tool zum Verwalten von Ressourcen in einem Kubernetes-Cluster und zur Sicherstellung, dass Anwendungen keine übermäßigen Ressourcen verbrauchen.


