kubernetes_label&selector

Kubernetes Label & Label Selector


Label

概念

Label是Kubernetes的核心概念

Labels其實就一對 key/value ,被關聯到對象上,標籤的使用我們傾向於能夠標示對象的特殊特點,並且對用戶而言是有意義的,但是標籤對內核系統是沒有直接意義的。

Label可以附加到各種資源對象上,一個資源對象可以定義任意數量的Label,同一個Label也可以被添加到任意數量的資源對象上去。

我們可以通過給指定的資源對象捆綁一個或多個不同的Label來實現多維度的資源分組管理功能,以便於靈活、方便地進行資源分配、調度、配置、部署等管理工作。

Label相當於標籤,給某個資源對象定義一個Label,就相當於給它打上一個標籤,隨後可以通過Label Selector查詢和篩選擁有某些Label的資源對象。Kubernetes通過這種方式實現了類似SQL的簡單又通用的對象查詢機制。

示例標籤:

  • “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中使用大型、非標識的結構化數據,記錄這樣的數據應該用annotation。

語法與字符集

Label key的組成:

  • 不得超過63個字符
  • 可以使用前綴,使用/分隔,前綴必須是DNS子域,不得超過253個字符,系統中的自動化組件創建的label必須指定前綴,kubernetes.io/由kubernetes保留
  • 起始必須是字母(大小寫都可以)或數字,中間可以有連字符、下劃線和點

Label value的組成:

  • 不得超過63個字符
  • 起始必須是字母(大小寫都可以)或數字,中間可以有連字符、下劃線和點

Label Selector

概念

通過label selector,客戶端/用戶可以指定一個object集合,通過label selector對object的集合進行操作。

兩種類型:

  • equality-based: 可以使用=、==、!=操作符,可以使用逗號分隔多個表達式
environment = production
tier != frontend

第一個選擇所有key等於 environment 值爲 production 的資源。後一種選擇所有key爲 tier 值不等於 frontend 的資源,和那些沒有key爲 tier 的label的資源。
  • set-based:可用in、notin、!操作符,另外還可以沒有操作符,直接寫出某個label的key,表示過濾有某個key的object而不管該key的value是何值,!表示沒有該label的object。
environment in (production, qa)
tier notin (frontend, backend)

第一個例子,選擇所有key等於 environment ,且value等於 production 或者 qa 的資源。 第二個例子,選擇所有key等於 tier 且值是除了 frontend 和 backend 之外的資源,和那些沒有標籤的key是 tier 的資源。
$ kubectl get pods -l environment=production,tier=frontend
$ kubectl get pods -l 'environment in (production),tier in (frontend)'
$ kubectl get pods -l 'environment in (production, qa)'
$ kubectl get pods -l 'environment,environment notin (frontend)'
使用場景
  • kube-controller進程通過資源對象RC上定義的Label Selector來篩選要監控的Pod副本的數量,從而實現Pod副本的數量時鐘符合預期設定的全自動控制流程
  • kube-proxy進程通過Service的Label Selector來選擇對應的Pod,自動建立起每個Service到對應Pod的請求轉發路由表,從而實現Service的只能負載均衡機制。
  • 通過對某些Node定義特定的Label,並且在Pod定義文件中使用NodeSelector這種標籤調度策略,kube-scheduler進程可以實現Pod“定向調度”的特性。
例子

在這裏插入圖片描述


總結

使用Label可以給對象創建多組標籤,Label和Label Selector共同構成了Kubernetes系統中最核心的應用模型,使得被管理對象能夠被精細地分組管理,同時實現了整個集羣的高可用性。


資料來源:

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