I filched these two gems from a much smarter person and am re-posting them here ...
The first relates to Pod labels which, to be honest, I've not paid too much attention.
The original context was to use kubectl to retrieve the IP address of Pods with a specific Label, using nginx as an example.
I've built upon these using Calico Node as an example ...
So I've got two Calico Node pods running inside my cluster: -
kube-system calico-node-jd867 1/1 Running 3 13d
kube-system calico-node-kwj42 1/1 Running 0 13d
kube-system calico-node-kwj42 1/1 Running 0 13d
If I describe each of those Pods, I can retrieve their Labels ...
kubectl describe pod calico-node-jd867 --namespace kube-system
Labels: controller-revision-hash=74c54477d6
k8s-app=calico-node
pod-template-generation=1
k8s-app=calico-node
pod-template-generation=1
kubectl describe pod calico-node-kwj42 --namespace kube-system
Labels: controller-revision-hash=74c54477d6
k8s-app=calico-node
pod-template-generation=1
k8s-app=calico-node
pod-template-generation=1
Armed with the Labels, I can query just for Pods using one of those Labels e.g.
kubectl get pods --all-namespaces --selector k8s-app=calico-node
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-node-jd867 1/1 Running 3 13d
kube-system calico-node-kwj42 1/1 Running 0 13d
kube-system calico-node-jd867 1/1 Running 3 13d
kube-system calico-node-kwj42 1/1 Running 0 13d
Building upon that, I can then get, from each Pod, its respective IP address: -
kubectl get pods --all-namespaces --selector k8s-app=calico-node --output jsonpath='{range .items[*]}{.status.podIP}{"\n"}{end}'
10.51.12.45
10.51.10.109
Pivoting away from Pods and Labels, we can similarly use kubectl and some JSON wrangling to retrieve the Taints from each Node in the cluster: -
kubectl get nodes -o jsonpath='{range $.items[*]} {.metadata.name} {.spec.taints[*].effect}{"\n"}{end}'
sideling1.example.com NoSchedule
sideling2.example.com
which is rather shiny !
Again, definitely NIH, but reposting 'cos it's awesome