kubernetes資源對象--Label

概念

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

本文轉自開源中國-kubernetes資源對象--Label

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章