天天看點

Kubernetes必備知識: Labels

所屬技術領域:

K8s

|名詞定義|

标簽其實就一對 key/value ,被關聯到對象上,比如Pod,标簽的使用我們傾向于能夠标示對象的特殊特點,并且對使用者而言是有意義的(就是一眼就看出了這個Pod是尼瑪資料庫),但是标簽對核心系統是沒有直接意義的。标簽可以用來劃分特定組的對象(比如,所有女的),标簽可以在建立一個對象的時候直接給與設定,也可以在後期随時修改,每一個對象可以擁有多個标簽,但是,key值必須是唯一的

"labels": {

"key1" : "value1",

"key2" : "value2"

}

我們最終會索引并且反向索引(reverse-index)labels,以獲得更高效的查詢和監視,把他們用到UI或者CLI中用來排序或者分組等等。我們不想用那些不具有指認效果的label來污染label,特别是那些體積較大和結構型的的資料。不具有指認效果的資訊應該使用annotation來記錄。

|技術特點|

 Label的文法和字元集

Label其實是一對 key/value,有效的Label keys必須是部分:一個可選字首+名稱,通過/來區分,名稱部分是必須的,并且最多63個字元,開始和結束的字元必須是字母或者數字,中間是字母數字和”_”,”-“,”.”,字首是刻有可無的,如果指定了,那麼字首必須是一個DNS子域,一系列的DNSlabel通過”.”來劃分,長度不超過253個字元,“/”來結尾。如果字首被省略了,這個Label的key被假定為對使用者私有的,自動系統組成部分(比如kube-scheduler, kube-controller-manager, kube-apiserver, kubectl),這些為最終使用者添加标簽的必須要指定一個字首,Kuberentes.io 字首是為Kubernetes 核心部分保留的。

合法的label值必須是63個或者更短的字元。要麼是空,要麼首位字元必須為字母數字字元,中間必須是橫線,下劃線,點或者數字字母。

 Label選擇器

與name和UID不同,label不提供唯一性。通常,我們會看到很多對象有着一樣的label。

通過label選擇器,用戶端/使用者能友善辨識出一組對象。label選擇器是kubernetes中核心的組織原語。

API目前支援兩種選擇器:基于相等的和基于集合的。一個label選擇器一可以由多個必須條件組成,由逗号分隔。在多個必須條件指定的情況下,所有的條件都必須滿足,因而逗号起着AND邏輯運算符的作用。

一個空的label選擇器(即有0個必須條件的選擇器)會選擇集合中的每一個對象。

一個null型label選擇器(僅對于可選的選擇器字段才可能)不會傳回任何對象

 Labels的例子

第一個中繼資料,也是最重要的一個中繼資料是:資源标簽。資源标簽是一種具有辨別型的 Key:Value 中繼資料,這裡展示了幾個常見的标簽。

Kubernetes必備知識: Labels

前三個标簽都打在了 Pod 對象上,分别辨別了對應的應用環境、釋出的成熟度和應用的版本。從應用标簽的例子可以看到,标簽的名字包括了一個域名的字首,用來描述打标簽的系統和工具, 最後一個标簽打在 Node 對象上,還在域名前增加了版本的辨別 beta 字元串。

标簽主要用來篩選資源群組合資源,可以使用類似于 SQL 查詢 select,來根據 Label 查詢相關的資源。

|資料來源|

名詞定義:

https://www.kubernetes.org.cn/kubernetes-labels

技術特點: