Grenzen aan hulpbronnen in Kuberenetes

Als het knooppunt genoeg van een hulpbron beschikbaar heeft, is het mogelijk dat een container meer hulpbronnen gebruikt. We kunnen specificeren hoeveel van elke hulpbron een Container nodig heeft. De gebruikelijke middelen om op te geven zijn CPU en geheugen Als we het bronverzoek voor Containers in een Pod opgeven, beslist de planner op welke node de Pod geplaatst moet worden. Als we een middelenlimiet voor een Container opgeven, zorgt de kubelet voor limieten, zodat de draaiende Container niet meer mag gebruiken dan de limiet die we instellen.

Bijvoorbeeld, als we voor een container een geheugenvraag van 100 MiB instellen, dan kan de container proberen meer RAM te gebruiken. Maar als we voor die Container een geheugenlimiet van 4GiB instellen, voorkomt de runtime dat de container meer gebruikt dan de ingestelde middelenlimiet.

CPU en geheugen worden compute resources genoemd.

Elke Container van een Pod kan een of meer van de volgende zaken opgeven:

  • grenzen aan cpu
  • limieten op geheugen
  • grenzen aan reusachtige-pagina’s-<size>
  • verzoeken om cpu
  • verzoeken om geheugen
  • verzoeken om hugepages-<size>

Om meer te weten te komen over middelen in Kubernetes, klikhier om de officiƫle documentatie van Kubernetes te bezoeken.

In dit artikel zullen we een voorbeeld zien van een middelenlimiet en aanvragen voor CPU en Geheugen. We zullen ook gebruik maken van Metric Server. De Metrics Server is een aggregator van gegevens over het gebruik van hulpbronnen in het cluster en hij wordt niet standaard in het cluster ingezet. We zullen deze Metric Server gebruiken om het middelenverbruik door pods te zien.

Pre-requisites

  1. Kubernetes Cluster met minstens 1 worker node.
    Als je wilt leren hoe je een Kubernetes Cluster maakt, klik danhier. Deze gids helpt je een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18.04 EC2 Instances.

Wat zullen we doen?

  1. Resource grenzen

Resource Grenzen

Voor we verder gaan en pods aanmaken met de opgegeven resource eisen, installeren we eerst Metric Server.

Kloon de Metric Server Github repository met het volgende commando en installeer hem.

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

Maak Metric Server met behulp van de object bestanden.

kubectl create -f .

install-metric-server

Wacht enige tijd om Metric Server opgestart te krijgen. Na enige tijd kun je het volgende commando uitvoeren om de clusterknooppunten te monitoren.

kubectl top node

verifieer-node-metrcis

Maak nu een pod definitie bestand met de volgende inhoud erin, die geheugenvraag en -limiet bevat.

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-memory-demo

Je vindt de eigenschap “resources” waarin we de geheugenlimiet hebben opgegeven als 50Mi en het geheugenverzoek als 20Mi

Controleer de bestaande pods op het cluster.

kubectl get pods #Get pods from the default namespace

Maak een pod met behulp van de in de bovenstaande stap gemaakte pod definitie.

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

maak-een-pod-met-geheugen-verzoek-en-limiet

Als je nu details van de Pod ophaalt kun je zien dat de Pod 20Mi geheugen vraagt en een limiet van 50Mi geheugen heeft.

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

beschrijf-de-pod-en-check-memory

Het Pod gebruik kun je controleren met het volgende commando.

kubectl  top pods #Check resource consumption by the pod

controleer-geheugen-verbruik

Maak nu een pod definitie met CPU aanvraag en limiet.

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 het bovenstaande bestand zie je dat de definitie een “resource” eigenschap heeft met CPU vraag als 0.5 en limiet als 1. Merk ook op dat we 2 CPU’s doorgeven als onze eis, wat meer is dan de limiet.

Laten we nu een pod maken met CPU vraag en limiet met het volgende commando.

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

maak-een-pod-met-cpu-request-en-limit

Bekijk de details van de pod die we maakten.

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

beschrijf-de-pod-en-check-cpu

Je ziet dat de Pod gevraagd heeft om .5 of 500m CPU met een limiet van 1 CPU

Om het CPU gebruik te controleren, gebruik je het volgende commando.

kubectl top pod #Check resource consumption by the pod

check-cpu-consumptie

In de bovenstaande schermafbeelding zie je dat zelfs na het doorgeven van 2 CPU’s in de pod definitie als argument, hij niet meer kan verbruiken dan de limiet, nl. 1 CPU. Hier kon de pod “my-pod-cpu-demo” 999m CPU verbruiken, wat overeenkomt met 1 CPU en hij kon zijn verbruik niet verhogen.

Conclusie

In dit artikel zagen we de stappen om monitoring in het cluster mogelijk te maken met de Metric Server. We zagen hoe een pod om CPU en geheugen kan vragen en middelen kan verbruiken die niet boven de opgegeven limiet komen.