9. Labels and seleectors

Labels are key-value pairs used to append metadata to a K8s object.

First, let’s view the labels for an internal K8s service:

$ kubectl get svc kube-dns -n kube-system -o yaml | yq '.metadata.labels'
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS

Now we know that k8s-app is a label key commonly used by internal K8s objects, let us observe which objects also contain this key:

$ kubectl get svc,ds,rs,pods -A -L k8s-app
NAMESPACE              NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE     K8S-APP
default                service/kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  9m17s
kube-system            service/kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   9m16s   kube-dns
kube-system            service/metrics-server              ClusterIP   10.96.1.164     <none>        443/TCP                  9m9s    metrics-server
kubernetes-dashboard   service/dashboard-metrics-scraper   ClusterIP   10.102.193.25   <none>        8000/TCP                 9m4s    dashboard-metrics-scraper
kubernetes-dashboard   service/kubernetes-dashboard        ClusterIP   10.99.142.68    <none>        80/TCP                   9m4s    kubernetes-dashboard

NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE     K8S-APP
kube-system   daemonset.apps/kube-proxy   1         1         1       1            1           kubernetes.io/os=linux   9m16s   kube-proxy

NAMESPACE              NAME                                                  DESIRED   CURRENT   READY   AGE    K8S-APP
kube-system            replicaset.apps/coredns-7db6d8ff4d                    1         1         1       9m2s   kube-dns
kube-system            replicaset.apps/metrics-server-c59844bb4              1         1         1       9m2s   metrics-server
kubernetes-dashboard   replicaset.apps/dashboard-metrics-scraper-b5fc48f67   1         1         1       9m2s   dashboard-metrics-scraper
kubernetes-dashboard   replicaset.apps/kubernetes-dashboard-779776cb65       1         1         1       9m2s   kubernetes-dashboard

NAMESPACE              NAME                                            READY   STATUS    RESTARTS   AGE     K8S-APP
kube-system            pod/coredns-7db6d8ff4d-kbfcv                    1/1     Running   0          9m2s    kube-dns
kube-system            pod/etcd-minikube                               1/1     Running   0          9m16s
kube-system            pod/kube-apiserver-minikube                     1/1     Running   0          9m16s
kube-system            pod/kube-controller-manager-minikube            1/1     Running   0          9m16s
kube-system            pod/kube-proxy-rcrrb                            1/1     Running   0          9m2s    kube-proxy
kube-system            pod/kube-scheduler-minikube                     1/1     Running   0          9m16s
kube-system            pod/metrics-server-c59844bb4-pnl69              1/1     Running   0          9m2s    metrics-server
kube-system            pod/storage-provisioner                         1/1     Running   0          9m15s
kubernetes-dashboard   pod/dashboard-metrics-scraper-b5fc48f67-nmncw   1/1     Running   0          9m2s    dashboard-metrics-scraper
kubernetes-dashboard   pod/kubernetes-dashboard-779776cb65-p6qms       1/1     Running   0          9m2s    kubernetes-dashboard

Change the -L to -l (lowercase) to filter out a certain label value:

$ kubectl get svc,ds,rs,pods -A -l k8s-app=kube-dns
NAMESPACE     NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-system   service/kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   11m

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-7db6d8ff4d   1         1         1       11m

NAMESPACE     NAME                           READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-7db6d8ff4d-kbfcv   1/1     Running   0          11m

For more information, see https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors.