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
- Op gelijkheid gebaseerde selectors:
Hiermee kun je filteren op sleutel en waarde, waarbij overeenkomende objecten aan alle opgegeven labels moeten voldoen. - 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
- 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
- Maak een Pod en Service met Labels en Selector
- 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
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
Om een Pod te maken, voer je het volgende commando uit.
kubectl create -f my-lable-demo-pod.yml
kubectl get pods
Om een Service te maken, voer je het volgende commando uit.
kubectl create -f my-selector-demo-service.yml
kubectl get service
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.
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
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
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
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
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.