Label(標籤)是Kubernetes系統中另一個核心概念。一個Label是 一個key=value的鍵值對,其中key與value由用戶本身指定。Label能夠被 附加到各類資源對象上,例如Node、Pod、Service、RC等,一個資源對 象能夠定義任意數量的Label,同一個Label也能夠被添加到任意數量的 資源對象上。Label一般在資源對象定義時肯定,也能夠在對象建立後 動態添加或者刪除。php
咱們能夠經過給指定的資源對象捆綁一個或多個不一樣的Label來實 現多維度的資源分組管理功能,以便靈活、方便地進行資源分配、調 度、配置、部署等管理工做。例如,部署不一樣版本的應用到不一樣的環境 中;監控和分析應用(日誌記錄、監控、告警)等。一些經常使用的Label 示例以下。html
◎ 版本標籤:"release":"stable"、"release":"canary"。web
◎ 環境標 籤:"environment":"dev"、"environment":"qa"、"environment":"production"。redis
◎ 架構標 籤:"tier":"frontend"、"tier":"backend"、"tier":"middleware"。架構
◎ 分區標籤:"partition":"customerA"、"partition":"customerB"。負載均衡
◎ 質量管控標籤:"track":"daily"、"track":"weekly"。frontend
Label至關於咱們熟悉的「標籤」。給某個資源對象定義一個Label, 就至關於給它打了一個標籤,隨後能夠經過Label Selector(標籤選擇 器)查詢和篩選擁有某些Label的資源對象,Kubernetes經過這種方式實 現了相似SQL的簡單又通用的對象查詢機制。ide
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),前者採用等式類表達式匹配標籤,下面是一些具體的例子。3d
◎ 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 權威指南
博客園:https://www.cnblogs.com/sseban/p/13065177.html
語雀:https://www.yuque.com/songyifei