Limit Ranges in Kubernetes

Mit Limit Range können wir den Ressourcenverbrauch und die Erstellung einschränken, da standardmäßig Container mit unbegrenzten Rechenressourcen auf einem Kubernetes-Cluster laufen. Ein Pod kann so viel CPU und Speicher verbrauchen, wie durch den Grenzbereich definiert ist.

Ein Grenzwertbereich bietet Einschränkungen für:

  • Minimale und maximale Ressourcen
  • Minimale und maximale Speicheranforderung pro PersistentVolumeClaim
  • Ein Verhältnis zwischen Anfrage und Limit für eine Ressource in einem Namensraum.
  • Standardanforderung/Begrenzung für Rechenressourcen festlegen

Um mehr über Grenzbereiche zu erfahren, besuchen Sie die offizielle Dokumentation von Kubernetes hier.

In diesem Artikel werden wir einen Grenzwertbereich erstellen und sehen, wie Mindest- und Höchstwerte für die von Containern und Pods verwendeten CPU-Ressourcen festgelegt werden können. Wir werden verschiedene Szenarien mit Limit und Request auf der CPU sehen.

Voraussetzungen

  1. Kubernetes Cluster mit mindestens 1 Worker-Knoten.
    Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen, einen Kubernetes-Cluster mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18.04 EC2-Instanzen zu erstellen.

Was werden wir tun?

  1. Erstellen Sie einen LimitRange im Standardnamensraum.
  2. Erstellen von Pods mit CPU-Begrenzung und Bereich im Standard-Namensraum

Erstellen Sie einen LimitRange im Standard-Namensraum

Erstellen Sie eine Datei, um einen Grenzwertbereich im Standard-Namensraum zu definieren.

vim set-limit-range.yml
apiVersion: v1
kind: LimitRange
metadata:
  name: set-limit-range
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container

set-limit-range-definition

Besorgen Sie sich eine Liste der vorhandenen Grenzwertbereiche im Standard-Namensraum und erstellen Sie diesen unter Verwendung der im obigen Schritt erstellten Datei.

kubectl get limitrange
kubectl create -f set-limit-range.yml
kubectl get limitrange
kubectl describe limitrange set-limit-range

Bereich erstellen-begrenzen

Im obigen Screenshot ist zu sehen, dass wir einen Grenzbereich erstellt haben, der die CPU als „Min=200m“ und „Max=800m“ definiert.

Das bedeutet, dass Pods im Standard-Namensraum keine CPU „weniger als Min=200m“ und „mehr als Max=800m“ haben können.

Erstellen Sie Pods mit CPU-Begrenzung und -Bereich im Standard-Namensraum

Pod mit Begrenzung

Erstellen Sie eine Pod-Definition, die CPU-Anforderungen von mehr als 200m und weniger als 800m

vim pod-with-cpu-within-range.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-within-range
spec:
  containers:
  - name: pod-with-cpu-within-range
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "500m"

pod-mit-cpu-mit-im-bereich-definition

Listen Sie die vorhandenen Pods auf und erstellen Sie einen neuen Pod mit der im obigen Schritt erstellten Datei.

kubectl get pods
kubectl create -f pod-with-cpu-within-range.yml
kubectl get pods
kubectl describe pod pod-with-cpu-within-range

create-pod-with-cpu-within-in-range

Auf dem obigen Screenshot ist zu sehen, dass der Pod mit definierter CPU-Anforderung und Limit erstellt wurde.

Pod mit mehr CPU:

Dieses Mal erstellen wir einen Pod mit CPU-Limit 1,5, d.h. mehr als 800m.

vim pod-with-cpu-more-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-more-than-limit
spec:
  containers:
  - name: pod-with-cpu-more-than-limit
    image: nginx
    resources:
      limits:
        cpu: "1.5"
      requests:
        cpu: "500m"

pod-mit-cpu-more-than-limit-Definition

Besorgen Sie sich eine Liste der vorhandenen Pods und versuchen Sie, einen neuen Pod zu erstellen, dessen CPU-Limit „1,5“ mehr als „800m“ beträgt, was wir im Grenzbereich definiert haben.

kubectl get pods
kubectl create -f pod-with-cpu-more-than-limit.yml

versuche-mit-cpu-mit-mehr-als-Limit-zu-erzeugen

Auf dem obigen Screenshot ist zu sehen, dass der Pod nicht erstellt wurde.

Pod mit weniger CPU:

Versuchen wir nun, einen Pod zu erstellen, der „CPU=100m“ anfordert, das ist weniger als „200m“, die wir im Grenzbereich definiert haben.

vim pod-with-cpu-less-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-less-than-limit
spec:
  containers:
  - name: pod-with-cpu-less-than-limit
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "100m"

Besorgen Sie sich nun eine Liste der vorhandenen Pods und versuchen Sie, einen Pod mit der obigen Definitionsdatei zu erstellen.

kubectl get pods
kubectl create -f pod-with-cpu-less-than-limit.yml

Diesmal wird auch die Pod-Erstellung fehlschlagen, da wir CPU=100m weniger als 200m angefordert haben, dass wir den Grenzwertbereich definiert haben.

Pod ohne CPU:

In diesem Szenario sollten wir keine Anforderung oder Limit für die CPU definieren.

vim pod-with-no-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-no-cpu
spec:
  containers:
  - name: pod-with-no-cpu
    image: vish/stress

pod-mit-keiner-cpu-Definition

Versuchen wir nun, einen Pod zu erstellen und seine Beschreibung zu sehen.

kubectl get pods
kubectl create -f pod-with-no-cpu.yml
kubectl describe pods pod-with-no-cpu

create-pod-with-cpu-less-than-limit

Im obigen Bildschirmfoto ist zu sehen, dass, wenn wir keine Anforderung oder kein Limit für die CPU angeben, dem POD eine CPU zugewiesen wird, die dem im Limitbereich angegebenen Limit entspricht, d.h. in diesem Beispiel hat der Pod ein CPU-Limit und eine Anforderung von 800m, die dem im Limitbereich angegebenen Limit entspricht

Schlussfolgerung

In diesem Artikel haben wir die Schritte zum Erstellen eines Grenzbereichs im Standard-Namensraum gesehen. Dann haben wir verschiedene Szenarien für das CPU-Limit und die Anfrage im Pod ausprobiert.

Das könnte dich auch interessieren …