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