Labels en selectors in Kubernetes

Labels zijn niets anders dan sleutel-waarde paren die aan Kubernetes Objecten zoals Pods, Service, enz. worden toegekend. Labels kunnen gebruikt worden om Kubernetes objecten te ordenen en te selecteren. Labels kunnen bij het aanmaken aan objecten worden vastgemaakt en kunnen op elk moment worden gewijzigd. We kunnen meerdere Labels aan Kubernetes objecten toevoegen.

Selectors worden door gebruikers gebruikt om een verzameling objecten te selecteren. De labelselector is de kerngroeperingsprimitieve in Kubernetes. Kubernetes API ondersteunt twee soorten selectors

  1. Op gelijkheid gebaseerde selectors:
    Hiermee kun je filteren op sleutel en waarde, waarbij overeenkomende objecten aan alle opgegeven labels moeten voldoen.
  2. Op sets gebaseerde selectors:
    Dit maakt het mogelijk sleutels te filteren volgens een set waarden.

Om meer te weten over Labels en selectors, klik hier.

In dit artikel zullen we een Pod maken met Labels er aan en de verzoeken erheen omleiden vanuit de dienst met Selector. We zullen ook get, delete operaties op Pod en Service uitvoeren met Label/Selectors op de commandoregel.

Pre-requisites

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

Wat we zullen doen

  1. Maak een Pod en Service met Labels en Selector
  2. Labels begrijpen

Maak een Pod en Service met Labels en Selectors

Om een Pod met labels te maken, maak je een nieuw bestand en voeg je er de volgende inhoud aan toe.

vim my-lable-demo-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: label-demo-pod
  labels:
    environment: test
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

label-demo-pod

Om een service met een selector te maken, maak je een bestand met de volgende service definitie.

vim my-selector-demo-service.yml
apiVersion: v1
kind: Service
metadata:
  name: selector-demo-service
  namespace: default
  labels:
    environment: test
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
    app: nginx
  type: NodePort

selector-demo-service

Om een Pod te maken, voer je het volgende commando uit.

kubectl create -f my-lable-demo-pod.yml
kubectl get pods

maak-pod-met-label

Om een Service te maken, voer je het volgende commando uit.

kubectl create -f my-selector-demo-service.yml
kubectl get service

maak-dienst-met-selector

Probeer nu, om te controleren of de Label Selector werkt, de dienst te benaderen op NodeIP:NodePort.

Hier is het Ip van mijn Node 106.210.138.189 en de dienst wordt blootgesteld op Port=30385.

service-pointing-to-pod-with-matching-label

Omdat we de Nginx Pod kunnen benaderen met de Service die we maakten, betekent dit dat het Label en de Selector werkten.

Labels begrijpen

Nu kunnen we verschillende bewerkingen uitvoeren op de Pod en de Service die we maakten met het Label.

Om Pods te krijgen die bij een label van onze keuze passen, kunnen we in het commando als volgt “–selector” gebruiken.

kubectl get pods --selector environment=test
kubectl get pods --selector app=nginx

get-pods-with-matching-labels

We kunnen ook “-l” gebruiken in plaats van “–selector” om de Pods te krijgen die bij het label van onze keuze passen.

kubectl get pods -l environment=test
kubectl get pods -l environment=prod

alternatief-voor-selector-commando

We kunnen zelfs de bewerking “delete pod” uitvoeren door het label op te geven. Pods die overeenkomen met het label kunnen worden verwijderd met de volgende commando’s.

kubectl get pods
kubectl delete pods -l environment=test
kubectl get pods

verwijder-pods-met-bijpassend-label

Zoals we Pods die bij de labels passen konden verwijderen, kunnen we ook de dienst verwijderen.

Om de bij een label passende dienst te verwijderen, gebruik je het volgende commando. Ook als er geen dienst is die overeenkomt met het opgegeven label in het commando, wordt geen verwijderactie uitgevoerd.

kubectl get service
kubectl delete service -l environemt=test
kubectl delete service -l environment=test
kubectl get service

verwijder-dienst-met-bijpassend-label

Conclusie

In dit artikel hebben we een Pod gemaakt met labels erin en een dienst aangemaakt en gericht op die Pods die bij het label passen. We zagen ook hoe Pods en diensten die bij de labels passen verwijderd kunnen worden.