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, …).

Labels and Selector

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