Labels and Selectors allow us to label every K8s resource and later select them to apply an action.
k get pod --selector key=value
k get pods --selector env=prod,bu=finance,tier=frontend
apiVersion: v1
kind: Pod
metadata:
labels:
name: frontend
annotations:
podVersion: 1.2
spec:
containers:
- name: httpd
image: httpd:2.4-alpine
Labels in the template section is used to label the Pods created by the deployment. These labels are then selected by the deployment to group these pods under the same deployment. If any other pod that was created before this deployment and it matches the label selector criteria, it will be controlled by this deployment too.
The labels for the deployment is not directly involved in labelling or selecting the pods.
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-frontend
labels:
name: frontend
annotations:
buildVersion: 1.2
spec:
replicas: 3
selector:
matchLabels:
name: frontend
template:
metadata:
labels:
name: frontend
spec:
containers:
- name: httpd
image: httpd:2.4-alpine
Annotations are used to provide miscellaneous information to the Pod. They are not used by K8s internally but they can be used by other tools running on the K8s cluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: ingress-pay
namespace: critical-space
spec:
rules:
- http:
paths:
- backend:
service:
name: pay-service
port:
number: 8282
path: /pay
pathType: Prefix