Ressourcenbeschränkungen in Kuberenetes

Wenn der Knoten genug von einer Ressource zur Verfügung hat, ist es möglich, dass ein Container mehr Ressourcen verwendet. Wir können angeben, wie viel von jeder Ressource ein Container benötigt. Die gemeinsam anzugebenden Ressourcen sind CPU und Speicher. Wenn wir die Ressourcenanforderung für Container in einem Pod angeben, entscheidet der Scheduler, auf welchem Knoten der Pod platziert werden soll. Wenn wir ein Ressourcenlimit für einen Container angeben, kümmert sich das Kubelet um die Limits, so dass der laufende Container nicht mehr von diesem von uns festgelegten Limit verwenden darf.

Wenn wir beispielsweise eine Speicheranforderung von 100 MiB für einen Container festlegen, kann der Container versuchen, mehr RAM zu verwenden. Wenn wir jedoch ein Speicherlimit von 4GiB für diesen Container setzen, verhindert die Laufzeit, dass der Container mehr als das konfigurierte Ressourcenlimit verwendet.

CPU und Speicher werden als Compute-Ressourcen bezeichnet.

Jeder Container eines Pods kann eine oder mehrere der folgenden Angaben machen:

  • grenzwerte für cpu
  • Speicherbegrenzungen
  • Grenzen für riesige Seiten-<Größe>
  • Anfragen für CPU
  • Speicheranforderungen
  • Anfragen für hugepages-<size>

Um mehr über Ressourcen in Kubernetes zu erfahren, klicken Sie hier, um die offizielle Dokumentation von Kubernetes zu besuchen.

In diesem Artikel sehen wir ein Beispiel für ein Ressourcenlimit und eine Anfrage für CPU und Speicher. Wir werden auch den Metric Server verwenden. Der Metrikserver ist ein Aggregator von Ressourcennutzungsdaten im Cluster und wird nicht standardmäßig im Cluster eingesetzt. Wir werden diesen Metrikserver verwenden, um den Ressourcenverbrauch von Pods zu sehen.

Vorraussetzungen

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

Was werden wir tun?

  1. Ressource-Grenzwerte

Ressourcenbegrenzungen

Bevor wir fortfahren und Pods mit spezifizierten Ressourcenanforderungen erstellen, wollen wir Metric Server installieren.

Klonen Sie das Github-Repository des Metric-Servers mit dem folgenden Befehl und installieren Sie es.

git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server/

Metric Server unter Verwendung der Objektdateien anlegen.

kubectl create -f .

install-metric-server

Warten Sie einige Zeit, um den Metric Server zu initiieren. Nach einiger Zeit können Sie den folgenden Befehl ausführen, um Clusterknoten zu überwachen.

kubectl top node

verify-node-metrcis

Erstellen Sie nun eine Pod-Definitionsdatei mit folgendem Inhalt, die Speicheranforderung und Begrenzung enthält.

vim my-pod-with-memory.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-memory-demo
spec:
  containers:
  - name: my-container-memory-demo
    image: polinux/stress
    resources:
      limits:
        memory: "50Mi"
      requests:
        memory: "20Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]

my-pod-speicher-demo

Sie können die Eigenschaft „resources“ finden, in der wir die Speichergrenze als 50Mi und die Speicheranforderung als 20Mi angegeben haben.

Überprüfen Sie die vorhandenen Hülsen auf dem Cluster.

kubectl get pods #Get pods from the default namespace

Erstellen Sie einen Pod unter Verwendung der im obigen Schritt erstellten Pod-Definition.

kubectl create -f my-pod-with-memory.yml #Create a pod
kubectl get pods

Erstelle-einen-Pod-mit-Speicher-Anforderung-und-beschränke

Wenn Sie nun Einzelheiten über den Pod erhalten, können Sie sehen, dass der Pod 20Mi Speicher anfordert und ein Limit von 50Mi Speicher hat.

kubectl get pods
kubectl describe pod my-pod-memory-demo #Describe the pod

describe-the-pod-and-check-speicher

Die Verwendung des Pods kann mit dem folgenden Befehl überprüft werden.

kubectl  top pods #Check resource consumption by the pod

Scheck-Speicher-Verbrauch

Erstellen Sie nun eine Pod-Definition mit CPU-Anforderung und Limit.

vim my-pod-with-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-cpu-demo
spec:
  containers:
  - name: my-container-cpu-demo    image: vish/stress
    resources:
      limits:        cpu: "1"
      requests:
        cpu: "0.5"
    args:
    - -cpus
    - "2"

my-pod-cpu-demo

In der obigen Datei können Sie sehen, dass die Definition eine „resource“-Eigenschaft mit CPU-Anforderung als 0,5 und Limit als 1 hat. Beachten Sie auch, dass wir 2 CPUs als unsere Anforderung übergeben, was mehr als das Limit ist.

Lassen Sie uns nun einen Pod mit CPU-Anforderung und Limit mit dem folgenden Befehl erstellen.

kubectl apply -f my-pod-with-cpu.yml #Create a pod
kubectl get pods

Einen Pod mit CPU-Anforderung erstellen und begrenzen

Informieren Sie sich über die von uns erstellte Kapsel.

kubectl get pods
kubectl describe pod my-pod-cpu-demo

describe-the-pod-and-check-cpu

Sie können sehen, dass der Pod .5 oder 500m CPU mit einem Limit von 1 CPU angefordert hat

Um die CPU-Auslastung zu überprüfen, verwenden Sie den folgenden Befehl.

kubectl top pod #Check resource consumption by the pod

check-cpu-Verbrauch

Im obigen Screenshot können Sie sehen, dass selbst nach dem Übergeben von 2 CPUs in der Pod-Definition als Argument, kann es nicht mehr als das Limit, d.h. 1 CPU, verbrauchen. Hier könnte der Pod „my-pod-cpu-demo“ 999m CPU verbrauchen, was 1 CPU entspricht, und er könnte seinen Verbrauch nicht erhöhen.

Schlussfolgerung

In diesem Artikel sahen wir die Schritte zur Aktivierung der Überwachung im Cluster mit dem Metric Server. Wir haben gesehen, wie ein Pod CPU und Speicher anfordern und Ressourcen nicht über das angegebene Limit hinaus verbrauchen kann.

Das könnte Dich auch interessieren …