[k8s] Labels & Selectors & Annotations
========
###### tags: `kubernetes` `scheduling`
## labels
```yaml=
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: frontend
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 8080
```
```shell=
kubectl get pods --selector app=myapp,tier=frontend
# or use --label
kubectl get pods --label app=myapp,tier=frontend
# or
kubectl get pods -l app=myapp -l tier=frontend
```
`-l, --selector=''`:
+ Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). Matching objects must satisfy all of the specified label constraints.
```shell=
kubectl delete deployment,services,statefulsets -l 'environment in (local,dev,staging)'
```
## selectors + matchLabels


## Annotations
:::success
+ The main difference between labels and annotations is that annotations are ***not used*** to filter, group, or operate over the Kubernetes resource.
+ Instead, you can use them to access ***additional*** information about it.
:::
> labels and selectors are used to group objects
> > annotations are used to record other details for informatry purpose
```yaml=
# replicaset-definition.yaml
apiVersion:
kind: ReplicaSet
metadata:
name: simple-webpp
labels:
app: App1
function: front-end
annotations:
buildVersion: 1.34
spec:
replicas: 3
selector:
matchLabels:
app: App1
template:
medata:
labels:
app: App1
function: front-end
spec:
containers:
- name: simple-webapp
image: simple-webapp
```
## references
+ [Kubernetes Labels: Expert Guide with 10 Best Practices ](https://cast.ai/blog/kubernetes-labels-expert-guide-with-10-best-practices)