天天看點

Kubernetes Label/Label Selector

标簽 Label

标簽就是“鍵值”類型的資料,它們可用于資源建立時直接指定,也可随時按需添加于活動對象,而後即可由标簽選擇器進行比對度檢查進而完成資源挑選。

一個對象(資源)可擁有不止一個标簽,而同一個标簽也可被添加至多個資源之上。

實踐中,可以為資源附加多個不同次元的标簽以實作靈活的資源分組管理功能,例如:版本标簽、環境标簽、分層架構标簽等,用于交叉辨別同一個資源所屬的不同版本、環境及架構層級等。

标簽中的鍵名稱通常由鍵字首和鍵名組成,其中鍵字首可選,其格式形如:KEY_PREFIX/KEY_NAME。

鍵名至多能使用63個字元,可使用字母、數字、連接配接号(-)、下劃線(_)、點号(.)等字元,且隻能以字母或數字開頭;
鍵字首必須為DNS子域名格式,且不能超過253個字元。省略鍵字首時,鍵将被視為使用者的私有資料,不過由Kubernetes系統元件或第三元件自動為使用者資源添加的鍵必須使用鍵字首,而"kubernetes.io/"字首預留給kubernetes的核心元件使用;
标簽中的鍵值必須不能多于63個字元,它要麼為空,要麼是以字母或數字開頭及結尾,且中間僅使用了字母、數字、連接配接号(-)、下劃線或點号等字元的資料。           

标簽選擇器 Label Selector

标簽選擇器用于表達标簽的查詢條件或選擇标準,Kubernetes API目前支援兩個标簽選擇器:

1.基于等值關系(equality-based)

操作符有 "=、==、!=" 三種,都表示”等值“關系,最後一個表示”不等“關系

2.基于集合關系(set-based)

KEY in (VALUE1,VALUE2,...)

KEY not in (VALUE1,VALUE2,...)

KEY: 所有存在此鍵名标簽的資源;

!KEY: 所有不存在此鍵名标簽的資源。

使用标簽選擇器時還将遵循以下邏輯:

1.同時指定的多個選擇器之間的邏輯關系為”與“操作;

2.使用”空值“的标簽選擇器意味着每個資源對象都将被選中;

3.”空的“标簽選擇器将無法選出任何資源。

定義标簽選擇器的方式:

kubernetes的諸多資源對象必須以标簽選擇器的方式關聯到pod資源對象,例如"Service"、"Deployment"和"ReplicatSet"類型的資源等,它們在spec字段中嵌套使用嵌套的"selector"字段,通過"matchLabels"來指定标簽選擇器,有的甚至還支援使用"matchExpressions"構造複雜的标簽選機制。

1."matchLabels": 通過直接給定鍵值對指定标簽選擇器;

2."matchExpressions": 基于表達式指定的标簽選擇器清單,每個選擇器形如: {key:KEY_NAME,operator:OPERATOR,values:[VALUE1,VALUE2,...]}' ,選擇器清單間為”邏輯與“的關系

(使用in或者not in操作符時,其values非必須為非空的字元串清單,而使用exists或DostNotExists時,其values必須為空)

使用标簽和标簽選擇器:

顯示pod之上的标簽:

kubectl get pods --show-labels           

修改标簽:

在metadata下添加

labels:字段

通過指令添加标簽:

kubectl label pods <pod_Name> -n <NameSpace> <key=value>(标簽)           

通過指令修改标簽:

kubectl label pods <pod_Name> -n <NameSpace> --overwrite(覆寫) <key=KEY>(标簽)           

删除标簽:

kubectl label pods <pod_Name> -n <NameSpace> <value>-           

标簽選擇(過濾)

kubectl get pods --show-labels -l <key=value>           

-L 選項:代表以字段的方式顯示,上邊為鍵,下邊為值value

[root@k8s-master1 ~/k8s/yaml/pod-tz]# kubectl get pods -l "app in (myapp,ngx)"
NAME       READY   STATUS    RESTARTS   AGE
myapp-v1   1/1     Running   3          3h5m
myapp-v2   1/1     Running   0          73s
[root@k8s-master1 ~/k8s/yaml/pod-tz]# kubectl get pods -l "app in (myapp,ngx)" -L app
NAME       READY   STATUS    RESTARTS   AGE    APP
myapp-v1   1/1     Running   3          3h5m   myapp
myapp-v2   1/1     Running   0          79s    ngx
           

繼續閱讀