在Kubernates上的實際操中,我們需要管理不同的Pod,例如像是要將不同環境的Pod同時起動,或是將有耦合的Pod分類在一起,這是我們在實際工作中需要用到的,而Kubernates提供Pod,讓我們針對不同的元件貼上不同的Pod,Label是附著到object上(例如Pod)的Key/Value值。可以在建立元件的時候指定,也可以在元件創建後隨時指定。Labels的值對系統本身並沒有什麼含義,只對User才有意義。
我們先新增一個只有env=developmen label 的 Pod
$ kubectl create -f https://raw.githubusercontent.com/mhausenblas/kbe/master/specs/labels/pod.yaml
並且查詢該Pod目前的Label
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labelex 1/1 Running 0 10m env=development
透過上面的指令我們可以看到 多了一個 "LABELS",這時候我們在Label 上多加一個owner的Key/Value值
$ kubectl label pods labelex owner=timtsai
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labelex 1/1 Running 0 3m env=development,owner=timtsai
當我們再一次查詢時,可以看到這個Label已經加到了owener=timtsai
我們現在可以用--selector來查詢我們目前有的Pod
$ kubectl get pods --selector owner=timtsai
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 27m
也可以用 -l 來查詢我們目前LABEL有 env=development 的Pod
$ kubectl get pods -l env=development
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 27m
我們也可以在一開始建立元件的時候,就設定他的Label。
以下的建立的 Pod 有兩個Label,分別是(env=production 和 owner=michael)
$ kubectl create -f https://raw.githubusercontent.com/mhausenblas/kbe/master/specs/labels/anotherpod.yaml
我們現在可以用 in 查詢多的Label,這邊查詢 production 跟 development
$ kubectl get pods -l 'env in (production, development)'
NAME READY STATUS RESTARTS AGE
labelex 1/1 Running 0 33m
labelexother 1/1 Running 0 4m