Labels
- Labels are a way of grouping the objects
- While Kubernetes understands the objects it create, it is easier to identify the objects by using custom labels
- With labels you group the objects by types (Pods, Services, ReplicaSet etc) or by Applications
- For a pod, labels are defined under the metadata section
Selectors
- Selectors are used to filter the objects using labels defined on them
- Using kubectl and selector pods can be listed by filtering on the labels attached to them
- If a Selector has multiple labels, they are understood as logical AND, which means pods must match all labels.
pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
location: IN
spec:
containers:
- name: nginx-container
image: nginx
kubectl get pods --selector app=myapp
-> Get pods filtered by labels
kubectl get pods --selector app=myapp,tier=frontend
-> Get pods filtered by labels app=myapp and tier=frontend
Replica Set
- Kubernetes also uses labels to build objects.
- For example take a case of replica set,
- Labels under metadata are replicaSet labels
- labels under template.metadata are pod labels
- labels under selector.matchLabels are selector labels
- Kubernetes uses the selector.matchLabels to identify which pods have to be created as defined in spec.template by matching it with spec.template.metadata.labels
replica-set-definition.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-rs
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLabels:
type: front-end
Service
- For a Service object Kubernetes matches the labels defined under spec.selector to metadata.labels as defined under pod-definition file
apiVersion: v1
kind: Service
metadata:
name: myapp-rs
labels:
app: my-svc-app
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 8080
targetPort: 9376
Annotations
- Annotations though sound similar to labels are to be used to store the custom information specific to object
- With labels, you can use them to group objects or filter them with selectors
- Annotations are custom information about the object
pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
location: IN
annotations:
buildVersion: 1.34
contact: am@memories.com
spec:
containers:
- name: nginx-container
image: nginx
Comments
Post a Comment