Ricerca nel sito web

Limiti delle risorse in Kubernetes


Su questa pagina

  1. Prerequisiti
  2. Cosa faremo?
  3. Limiti delle risorse
  4. Conclusione

Se il nodo dispone di risorse sufficienti, è possibile che un contenitore utilizzi più risorse. Possiamo specificare la quantità di ciascuna risorsa di cui ha bisogno un Contenitore. Le risorse comuni da specificare sono CPU e memoria. Quando specifichiamo la richiesta di risorse per i container in un pod, lo scheduler decide su quale nodo posizionare il pod. Quando specificiamo un limite di risorsa per un contenitore, il kubelet si occupa dei limiti in modo che il contenitore in esecuzione non sia autorizzato a utilizzare più del limite che abbiamo impostato.

Ad esempio, se impostiamo una richiesta di memoria di 100 MiB per un container, il container può tentare di utilizzare più RAM. Tuttavia, se impostiamo un limite di memoria di 4 GiB per quel contenitore, il runtime impedisce al contenitore di utilizzare più del limite di risorse configurato.

La CPU e la memoria sono chiamate risorse di calcolo.

Ogni contenitore di un pod può specificare uno o più dei seguenti elementi:

  • limiti sulla cpu
  • limiti sulla memoria
  • limiti su hugepages-
  • richieste per cpu
  • richieste di memoria
  • richieste per hugepages-

Per saperne di più sulle risorse in Kubernetes, fai clic qui per visitare la documentazione ufficiale di Kubernetes.

In questo articolo vedremo un esempio di limite di risorse e richiesta di CPU e memoria. Useremo anche Metric Server. Metrics Server è un aggregatore di dati sull'utilizzo delle risorse nel cluster e non viene distribuito per impostazione predefinita nel cluster. Utilizzeremo questo Metric Server per visualizzare il consumo di risorse da parte dei pod.

Prerequisiti

  1. Cluster Kubernetes con almeno 1 nodo di lavoro.
    Se vuoi imparare a creare un cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18.04 EC2.

Che cosa faremo?

  1. Limiti delle risorse

Limiti delle risorse

Prima di procedere e creare i pod con i requisiti delle risorse specificati, installiamo Metric Server.

Clonare il repository Github di Metric Server utilizzando il seguente comando e installarlo.

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

Creare Metric Server utilizzando i file oggetto.

kubectl create -f .

Attendere un po' di tempo prima che venga avviato Metric Server. Dopo un po' di tempo, puoi eseguire il seguente comando per monitorare i nodi del cluster.

kubectl top node

Ora, crea un file di definizione del pod con il seguente contenuto che contiene la richiesta e il limite di memoria.

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"]

Puoi trovare la proprietà \risorse\ in cui abbiamo specificato il limite di memoria come 50Mi e la richiesta di memoria come 20Mi

Controlla i pod esistenti con lo spazio dei nomi predefinito nel cluster.

kubectl get pods #Get pods from the default namespace

Crea un pod utilizzando la definizione del pod creata nel passaggio precedente.

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

Ora, se ottieni i dettagli del Pod, puoi vedere che il Pod richiede 20 Mi di memoria e ha un limite di 50 Mi di memoria.

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

L'utilizzo del pod può essere verificato utilizzando il seguente comando.

kubectl  top pods #Check resource consumption by the pod

Ora crea una definizione del pod con la richiesta e il limite della CPU.

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"

Nel file precedente, puoi vedere che la definizione ha una proprietà \risorsa\ con richiesta CPU pari a 0.5  e limite pari a 1. Nota inoltre che stiamo passando 2 CPU come nostro requisito che è superiore al limite.

Ora, creiamo un pod con la richiesta e il limite della CPU utilizzando il seguente comando.

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

Ottieni i dettagli del pod che abbiamo creato.

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

Puoi vedere che il pod ha richiesto 0,5 o 500 m di CPU con un limite di 1 CPU

Per verificare l'utilizzo della CPU, utilizzare il seguente comando.

kubectl top pod #Check resource consumption by the pod

Nello screenshot sopra puoi vedere che anche dopo aver passato 2 CPU nella definizione del pod come argomento, non può consumare più del limite, cioè 1 CPU. Qui il pod \my-pod-cpu-demo\ potrebbe consumare 999m CPU che equivale a 1 CPU e non potrebbe aumentare il suo consumo.

Conclusione

In questo articolo, abbiamo visto i passaggi per abilitare il monitoraggio nel cluster utilizzando Metric Server. Abbiamo visto come un pod può richiedere CPU e memoria e consumare risorse non oltre il limite specificato.