Limiti delle risorse in Kubernetes
Su questa pagina
- Prerequisiti
- Cosa faremo?
- Limiti delle risorse
- 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
- 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?
- 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.