1. 程式人生 > >kubernetes資源物件--Label

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