k8s之Label


Label(標簽)是Kubernetes系統中另外一個核心概念。一個Label是 一個key=value的鍵值對,其中key與value由用戶自己指定。Label可以被 附加到各種資源對象上,例如Node、Pod、Service、RC等,一個資源對 象可以定義任意數量的Label,同一個Label也可以被添加到任意數量的 資源對象上。Label通常在資源對象定義時確定,也可以在對象創建后 動態添加或者刪除。

我們可以通過給指定的資源對象捆綁一個或多個不同的Label來實 現多維度的資源分組管理功能,以便靈活、方便地進行資源分配、調 度、配置、部署等管理工作。例如,部署不同版本的應用到不同的環境 中;監控和分析應用(日志記錄、監控、告警)等。一些常用的Label 示例如下。

◎ 版本標簽:"release":"stable"、"release":"canary"。

◎ 環境標 簽:"environment":"dev"、"environment":"qa"、"environment":"production"。

◎ 架構標 簽:"tier":"frontend"、"tier":"backend"、"tier":"middleware"。

◎ 分區標簽:"partition":"customerA"、"partition":"customerB"。

◎ 質量管控標簽:"track":"daily"、"track":"weekly"。

Label相當於我們熟悉的“標簽”。給某個資源對象定義一個Label, 就相當於給它打了一個標簽,隨后可以通過Label Selector(標簽選擇 器)查詢和篩選擁有某些Label的資源對象,Kubernetes通過這種方式實 現了類似SQL的簡單又通用的對象查詢機制。

Label Selector可以被類比為SQL語句中的where查詢條件,例如, name=redis-slave這個Label Selector作用於Pod時,可以被類比為select * from pod where pod’s name =‘redis-slave’這樣的語句。當前有兩種Label Selector表達式:基於等式的(Equality-based)和基於集合的(Set- based),前者采用等式類表達式匹配標簽,下面是一些具體的例子。

◎ name=redis-slave:匹配所有具有標簽name=redis-slave的資源對 象。

◎ env!=production:匹配所有不具有標簽env=production的資源對 象,比如env=test就是滿足此條件的標簽之一。

后者則使用集合操作類表達式匹配標簽,下面是一些具體的例子。 ◎ name in(redis-master, redis-slave):匹配所有具有標簽

name=redis-master或者name=redis-slave的資源對象。
◎ name not in(php-frontend):匹配所有不具有標簽name=php-

frontend的資源對象。

可以通過多個Label Selector表達式的組合實現復雜的條件選擇,多 個表達式之間用“,”進行分隔即可,幾個條件之間是“AND”的關系,即 同時滿足多個條件,比如下面的例子:

以myweb Pod為例,Label被定義在其metadata中:

管理對象RC和Service則通過Selector字段設置需要關聯Pod的 Label:

其他管理對象如Deployment、ReplicaSet、DaemonSet和Job則可以

在Selector中使用基於集合的篩選條件定義,例如:

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

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

Label Selector在Kubernetes中的重要使用場景如下。

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

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

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

在前面的留言板例子中,我們只使用了一個name=XXX的Label Selector。看一個更復雜的例子:假設為Pod定義了3個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,如圖1.8所示。

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

圖1.7 Label Selector的作用范圍1

 

 

 

 

 來源於:k8s 權威指南
 
 


免責聲明!

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



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