Namespaces keep things apart. Labels tie things together.
Labels
A label is a key=value note in an object's metadata.labels. Labels do not change what a Pod does. They exist so that other things can find it.
text
learner@shallows:~$ kubectl label pod web app=web tier=frontend
pod/web labeled
learner@shallows:~$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
web 1/1 Running 0 1m app=web,run=web,tier=frontendkubectl run adds one label on its own: run=NAME.
| Do | Line |
|---|---|
| Add a label | kubectl label pod web team=blue |
| Change a label | kubectl label pod web tier=backend --overwrite |
| Remove a label | kubectl label pod web team- |
| Show labels | kubectl get pods --show-labels |
Common keys: app, tier, env, team, version. Pick a scheme and keep to it.
Selectors
A selector is a question written in labels. -l asks it:
text
learner@shallows:~$ kubectl get pods -l tier=backend
NAME READY STATUS RESTARTS AGE
api 1/1 Running 0 3m
db 1/1 Running 0 3m| Selector | Matches Pods that |
|---|---|
-l tier=backend | Have tier=backend |
-l app=web,tier=frontend | Have both (the comma is AND) |
-l 'tier!=frontend' | Do not have tier=frontend |
-l team | Have a team label with any value |
Selectors work with -A, and with delete:
text
learner@shallows:~$ kubectl delete pods -l tier=legacy
pod "old-ledger" deleted