k8s之Label與Selector


一:什么是Label

Label是Kubernetes系列中另外一個核心概念。是一組綁定到K8s資源對象上的key/value對。同一個對象的labels屬性的key必須唯一。label可以附加到各種資源對象上,如Node,Pod,Service,RC等。

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

示例如下: 

  • 版本標簽:"release" : "stable" , "release" : "canary"...
  • 環境標簽:"environment" : "dev" , "environment" : "production"
  • 架構標簽:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware"
  • 分區標簽:"partition" : "customerA" , "partition" : "customerB"...
  • 質量管控標簽:"track" : "daily" , "track" : "weekly"
二:什么是Label selector(標簽選擇器)


Label selector是Kubernetes核心的分組機制,通過label selector客戶端/用戶能夠識別一組有共同特征或屬性的資源對象。

三:Label selector的查詢條件

基於值相等的查詢條件: 類似於SQL語句中的=或!=;  例如:select * from pod where name=(或!=)'redis-slave';

基於子集的查詢條件: 類似於SQL語句中的in或 not in; 例如:select * from pod where name in(或not in) ('redis-slave','redis-master');

兩種查詢條件也可以組合在一起使用。

新出現的管理對象如Deploment、ReplicaSet、DaemonSet和Job則可以在Selector中使用基於集合的篩選條件定義,例如:

selector:
  matchLabels:
    app: myweb
  matchExpressions:
    - {key: tier, operator: In, values: [frontend]}
    - {key: environment, operator: NorIn, values: [dev]}

matchLabels用於定義一組Label,與直接寫在Selector中作用相同:matchExpression用於定義一組基於集合的篩選條件,可用的條件運算符包括:In、NotIn、Exists和DoesNotExist。

如果同時設置了matchLabels和matchExpression,則兩組條件為“AND”關系,即所有條件需要滿足才能完成Selector的篩選。

四:Label selector的使用場景

1.kube-controller進程通過資源對象RC上定義的Label Selector來篩選要監控的Pod副本的數量,從而實現Pod副本的數量始終符合預期設定的全自動控制流程

2.kupe-proxy進程通過Service的Label Selector來選擇對應的Pod,自動建立器每個Service到對應Pod的請求轉發路由表,從而實現Service的智能負載均衡機制

3.通過對某些Node定義特定的Label,並且在Pod定義文件中使用NodeSelector這種標簽調度策略,Kube-scheduler進程可以實現Pod定向調度的特性

 在前面的留言板例子中,我們只使用了一個name=XXXLabel Selector。讓我們看一個更復雜的例子。假設為Pod定義了Label: release、env和role,不同的Pod定義了不同的Label值,如圖1.7所示,如果我們設置了“role=frontend”的Label Selector,則會選取到Node 1和Node 2上到Pod。

圖片丟失

而設置“release=beta”的Label Selector,則會選取到Node 2和Node 3上的Pod,如圖所示。

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

圖片丟失

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM