k8s入門-Label

一、Label介紹

一個Label是一個key=value的鍵值對,其中key與value由用戶自己指定。Label可以附加到各種資源上,例如Node Pod Service RC等。 一個資源對象可以定義任意數量的Label,同一個Label也可以被添加到任意數量的資源對象上去,Label通常在資源對象定義時確認,也可以在對象創建後動態添加或者刪除。

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

舉例:當你在RC的yaml文件中定義了該RC的selector中的label爲app:my-web,那麼這個RC就會去關注Pod-->metadata-->labeks中label爲app:my-web的Pod。修改了對應Pod的Label,就會使Pod脫離RC的控制。同樣,在RC運行正常的時候,若試圖繼續創建同樣Label的Pod,是創建不出來的。因爲RC認爲副本數已經正常了,再多起的話會被RC刪掉的。

二、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 Selector

1、label Selector 介紹

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

2、 Label Selector 兩種表達式

label採用 等式類

1)基於等式的(Equality-based)

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

2)基於集合的(Set-based)

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

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

name=redis-slave,env!=production
name notin (php-fronted),env!=production

四、label value語法

長度不超過63個字符。 可以爲空 首位字符必須爲字母數字字符 中間必須是橫線、_、.、數字、字母。

五、 Label定義yaml

Label常定義在matadate

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
>>    app: new_nginx <<============

RC通過Label Selector機制實現對Pod副本的自動控制。 RC和Service在spec中定義Selector與Pod進行關聯。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
>>      app: new_nginx<<=================

DeploymentReplica Set、DaemonSet和Job可以在Selector中使用基於集合的篩選條件定義。

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

mathchLabels 用於定義一組Label,與直接寫在Selector中相同; matchExpressions 用於定義一組基於集合的篩選條件,可以用的運算符包括:In NotIn ExistsDoesNotExIST

提示:如果同時設置了matchLabelsmatchExpressions,則兩組條件爲"AND" 關係,即所有條件需要同時滿足時才能完成Selector的篩選。

六、Lbael 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“定向調度”的特性。

參考文章:
https://k.i4t.com/kubernetes_label.html

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