kubernetes資源物件--Label
本文基於kubernetes 1.5.2版本編寫
概念
Label機制是K8S中一個重要設計,通過Label進行物件弱關聯,靈活地分類和選擇不同服務或業務,讓使用者根據自己特定的組織結構以鬆耦合方式進行服務部署。
Label是一對KV,對使用者而言非常有意義的,但對K8S本身而言沒有直接意義的。Label可以在建立物件時指定,也可以在後期修改,每個物件可以擁有多個標籤,但key值必須是唯一的。
Label可隨意定義,但建議可讀性,比如設定Pod的應用名稱和版本號等。另外Lable是不具有唯一性的,為了更準確標識資源物件,應為資源物件設定多維度的label。如下:
"release" : "stable", "release" : "canary" "environment" : "dev", "environment" : "qa", "environment" : "production" "tier" : "frontend", "tier" : "backend", "tier" : "cache" "partition" : "customerA", "partition" : "customerB" "track" : "daily", "track" : "weekly"
語法和字符集
Label keys的語法
一個可選字首+名稱,通過/來區分
名稱部分是必須的,並且最多63個字元,開始和結束的字元必須是字母或者數字,中間是字母數字和_、-、.。
字首可選,如指定必須是個DNS子域,一系列的DNS label通過.來劃分,長度不超過253個字元,“/”來結尾。如字首被省略了,這個Label的key被假定為對使用者私有的。系統組成部分(比如scheduler,controller-manager,apiserver,kubectl),必須要指定一個字首,Kuberentes.io字首是為K8S核心部分保留的。
label value語法
長度不超過63個字元。
可以為空
首位字元必須為字母數字字元
中間必須是橫線、_、.、數字、字母。
Label選擇器
label選擇器(selector)是K8S中核心的組織原語,通過label選擇器,客戶端能方便辨識和選擇一組資源物件。API目前支援兩種選擇器:基於相等的和基於集合的。
使用基於相等的選擇器時,選擇器的所有鍵值和其他資源物件的label鍵值完全相同(包括數量,key和value),才能匹配。
而使用基於集合的label選擇器,只要選擇器部分鍵值匹配其他資源物件的label,就算匹配。選擇器可以由一個以上條件(KV鍵值)組成,在多個條件的情況下,所有條件都必須滿足。
更新資源型別的Label
Label作為使用者可靈活定義的物件屬性,在已建立的物件上,仍然可以隨時通過kubectl label命令對其進行增加、修改、刪除等操作。 例如,我們要給已建立的Pod“redis-master-bobr0”新增一個標籤role=backend:
kubectl label pod redis-master-bobr0 role=backend
kubectl get pods -L role
NAME READY STATUS RESTARTS AGE ROLE
redis-master-bobr0 1/1 Running 0 3m backend
刪除一個Label,只需在命令列最後指定Label的key名並與一個減號相連即可:
kubectl label pod redis-master-bobr0 role-
修改一個Label的值,需要加上--overwrite引數: kubectl label pod redis-master-bobr0 role=master –overwrite