Kubernetes Labels - Selectors, Annotations

What this post covers?

In this post we will explore all possible options that can be used for Kubernetes Labels and selectors.
  • Adding labels
  • Show labels 
  • Replace labels
  • Deleting labels 

 Adding Labels to Pods

Adding labels while you creating bare pods imperatively using 'kubectl run' command, here I'm using three different images httpd, redis, rabbitmq.

 
kubectl run web --image=httpd:2.4.54-alpine \
  --labels="env=prod,author=pavandeverakonda,component=customer,tier=frontend"
kubectl run db --image=redis:alpine \
 --labels="env=prod,author=pavandeverakonda,component=customer,tier=backend"

kubectl run web2 --image=httpd:2.4.54-alpine \
 --labels="env=dev,author=pavandeverakonda,component=customer,tier=frontend"
kubectl run db2 --image=redis:alpine \
--labels="env=dev,author=pavandeverakonda,component=customer,tier=backend"

kubectl run msg-pod --image=rabbitmq \
 --labels="env=prod,author=ranjan,component=customer,tier=integrat"

#Validate the labels with the pods 
kubectl get po --show-labels
Create Pod along with Labels


Show labels for Kubernetes Objects

To see what all labels associated with a kubernetes object use --show-labels option
# for Pods
 kubectl get pods --show-labels 

# for nodes
kubectl get nodes --show-labels
To filter only the prod environment
 kubectl get pods -l env=prod --show-labels 
 
To get without header use --no-headers=true
 kubectl get pods -l env=dev --show-labels  --no-headers=true
 
To get the count of the dev environemnt pods we can use wc -l to count lines
 kubectl get pods -l env=dev --show-labels  --no-headers=true|wc -l
 

Using --selector option 


 To get how many pods present in the business unit(bu) as finance, here we can use --selector option
 kubectl get pods --selector bu=finance --no-headers=true --show-labels
 
To get the count of the pods in finance bu
 kubectl get pods --selector bu=finance --no-headers=true|wc -l
 
To find all objects are present in the prod environment including Pods, ReplicaSet and any other
kubectl get all --selector env=prod --show-labels  --no-headers=true
To get the count
 kubectl get all --selector env=prod  --no-headers=true|wc -l

To Identify the Pod which is part of the "prod" environment, the "finance" BU and of "frontend" tier?
kubectl get all --selector env=prod,bu=finance,tier=frontend  --no-headers=true
more specific to pods only display
kubectl get pod --selector env=prod,bu=finance,tier=frontend
# Only Pod names
kubectl get pod --selector env=prod,bu=finance,tier=frontend  --no-headers=true  -o NAME

Deleting labels

a. Edit the Kubernetes Object b. Using - operator to remove labels

Using - operator to remove labels

Update pod 'web' by removing a label named 'author' (if that label exists with that pod)
kubectl label pods web author-
Deleting a label from a Pod


You can also remove two or more labels at one go, removing env, tier labesl from the web pod:
kubectl label pods web env- tier- 
Deleting multiple labels from a Pod



Kubernetes Annotations Another intresting fact about Kubernetes Objects, they are like labels but they are just metadata not used in the selectors section.
kubectl annotate pod/web contact="admin@vybhavasolutions"
You can also add more number of annotationsto to your a Kubernetes objects anytime like this:
kubectl annotate pod/web whatsapp="9618715457" email="vybhavatechnologies@gmail.com"
viewing Annotations of kubernetes objects The first option is always using describe kubernetes object, where you could see a section for Annotations is available.
kubectl describe pods web -o yaml |grep -c 3 'annotations'
Keep writing to us for more intresting facts on Kubernetes related errors which you have encountered.

Comments

Popular posts from this blog

Ansible Jinja2 Templates: A Complete Guide with Examples

Ansible 11 The uri module with examples

Jenkins Active choices parameter - Dynamic input