Labels worden in Kubernetes gebruikt om objecten te categoriseren en te identificeren. Een label is een key-value pair dat aan objecten in Kubernetes, zoals pods, nodes of services, kan worden toegevoegd.
Labels stellen gebruikers in staat om pods te selecteren en groeperen op basis van bepaalde criteria. Als een pod bijvoorbeeld het label 'app=demo' heeft, kunnen andere objecten, zoals services of replica sets, verwijzen naar deze pod door te zoeken op het label 'app=demo'. Labels kunnen bijvoorbeeld worden gebruikt voor het toepassen van filters, het beheersen van de netwerktoegang tot pods en voor het maken van flexibele serviceontdekking. Je maakt gebruik van een label door in een object daarnaar te verwijzen via een (node) selector.
Labels aanmaken en gebruiken
Er zijn diverse opties om een label aan te maken. Wanneer je labels in bulk aan alle nodes in een node pool wil toekennen, raden we aan om de labels aan te maken via het TransIP-controlepaneel. Dit doe je door het overzicht van een node pool te openen en het label toe te voegen zoals in het screenshot hieronder.
- Je bent vrij in de syntax van het label. Het is niet verplicht een domeinnaam toe te voegen, maar let wel dat je als je bijvoorbeeld het label 'app' met een naam gebruikt je een = teken gebruikt in plaats van een : zoals in een yaml-object, bijvoorbeeld 'app=nginx'.
- Een overzicht van veelgebruikte labels vind je in dit artikel onder 'labels'.
- De standaard aanwezige labels zorgen voor een correcte werking van jouw cluster.
- Klik op het kruis achter een zelf aangemaakte label om deze te verwijderen.
Om gebruik te maken van de label(s) die je aan je node pool hebt toegekend via het TransIP-controlepaneel, gebruik je een 'nodeSelector', zie de betreffende paragraaf verderop in dit artikel.
Wanneer je een label wil aanmaken voor een specifieker scenario, bijvoorbeeld een individuele node, een of meer pods of services, etc dan raden we aan een object te gebruiken. Zie hiervoor onze documentatie over het gebruik van yaml-objecten, of het voorbeeld in de paragraaf hieronder.
Selectors
Om een label te gebruiken die je bijvoorbeeld aan een deployment hebt toegekend, gebruik je een selector. Een selector is een naam voor het mechanisme waarmee een client/user objecten kan selecteren aan de hand van labels. Dit is bijvoorbeeld handig wanneer Kubernetes verbanden legt tussen resources. Stel dat je een verband wil leggen tussen een deployment en een service, dan doe je dat aan de hand van een selector. Laten we zeggen dat je bijvoorbeeld de volgende Nginx-deployment hebt aangemaakt:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: nginx-demo
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.22.1
ports:
- containerPort: 80
Als je nu een Nginx-service aanmaakt en die via een selector wil verwijzen naar deze deployment, gebruik je de volgende syntax:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: nginx-demo
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: nginx
Node selectors
Wanneer je een label aan één of meer nodes hebt toegekend en een pod op die node wil plaatsen aan de hand van het label, gebruik je een 'nodeSelector'.
Een nodeSelector in Kubernetes is een mechanisme waarmee je kunt aangeven op welke nodes een pod moet worden geplaatst (i.e. gescheduled). Door een nodeSelector in te stellen met een specifieke labelwaarde, zorg je ervoor dat de pod alleen wordt geplaatst op nodes die de specifieke labelwaarde hebben.
Met andere woorden, een nodeSelector wordt gebruikt om de pod-scheduling af te dwingen op basis van specifieke labels op nodes. Stel dat je bijvoorbeeld in het TransIP-controlepaneel of via een yaml-object aan nodes de label 'app=nginx' hebt toegekend. Je gebruikt deze label dan voor een pod door in het yaml-object van die pod naar het label 'app=nginx' te verwijzen via een nodeSelector als volgt:
apiVersion: v1
kind: Pod
....
spec:
De .... geeft aan dat je in dit stuk eventueel andere opties zoals metadata kunt plaatsen, zie onze handleiding over het maken van objecten in Kubernetes. Eveneens kun je onder spec: meer opties toevoegen zoals de replicas, container specs, etc.