Kubernetes - Labels & Selectors
Alasta 21 Juillet 2024 kubernetes kubernetes labels selectors pods
Description : Kubernetes labels & selectors
Kubernetes - Labels & Selectors
Labels
Les labels permettent de permettent de sélectionner des objects dans kubernetes.
Exemple pour un pod:
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
env: prod
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Ici, il y a les labels prod et app de positionnés.
$ k get pod --selector env=prod
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 22m
note: il est possible d’utiliser –selector ou -l
Labels/Annotations/Taints connus et utilisés par Kubernetes.
Selector
Le selector permet de selectionner des objects dans les déclarations.
Exemple avec un ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-1
spec:
replicas: 2
selector:
matchLabels:
tier: nginx
template:
metadata:
labels:
tier: nginx
spec:
containers:
- name: nginx
image: nginx
Le ReplicaSet s’applique quand le pod a le label tier=nginx. Note: si le matchLabels n’est pas OK, l’execution du ReplicaSet échoue.
Il est possible de faire une négation dans le selector:
spec:
replicas: 1
selector:
matchExpressions:
- key: bu
operator: DoesNotExist
matchLabels:
env: prod
tier: nginx
L’utilisation des labels hors des pods et nodes sont destinés pour le matching de resources ou pour l’administrateur, exemple, supprimer tous les deployments avec le label app=frontend (cela supprime les objets sous-jacent, pod, …).
Quelques commandes
k get pods --show-labels # Display pods and labels
k get pods -l "env in (dev,prod)" # Display pods with label env dev or prod
k get pods --selector app=nginx # Display pods with label app=nginx
k label pods myapp-pod env=prod # Add label env=prod to pod myapp-pod
k label pods myapp-pod env- # delete label env to myapp-pod
k label pods myapp-pod tier1=AA tier2=BB # Add labels ter1 & tier2 to pod myapp-pod
k describe all --selector tier=frontend # show all with tier=frontend
k delete pods --selector env=dev # Delete pods with label env=dev
k logs -l app=mysql --all-containers # Logs from all pods with label app=mysql
k get services --selector='app in (myapp)',env=prod ## or notin
k get all --show-labels # Display all resources with labels