k8s標簽


一、標簽是什么

 標簽是k8s特色的管理方式,便於分類管理資源對象。

一個標簽可以對應多個資源,一個資源也可以有多個標簽,它們是多對多的關系。 

一個資源擁有多個標簽,可以實現不同維度的管理。 

可以使用標簽選擇器來指定能使用哪些標簽。 

1、標簽組成

key=value

  • key:只能使用 字母 數字  _  -  . (只能以字母數字開頭,不能超過63給字符)
  • value: 可以為空 只能使用 字母 數字開頭

2、定義標簽

kubectl get pods --show-labels  #查看pod所有標簽信息
kubectl get pods -l app  #過濾包含app的標簽
kubectl get pods -L app    #過濾包含app的標簽及顯示值
kubectl label pods pod-demo release=canary  #給pod-demo增加標簽
kubectl label pods pod-demo release=stable --overwrite  #修改標簽

 

 

二、標簽選擇器

給資源打上標簽后,可以使用標簽選擇器過濾指定的標簽

標簽選擇器目前有兩個:基於等值關系和基於集合關系

  • 等值關系操作符:=, == , !=
#使用格式
kubectl get pods -l run=myapp
kubectl get pods -l run=myapp --show-labels
kubectl get pods -l run!=client --show-labels
  • 集合關系的操作符:in,notin,exists
#使用格式
kubectl get pods -l "run in (client,myapp,alpha)" --show-labels   #三個值有一個匹配上都可以
kubectl get pods -l "run notin (client,myapp,alpha)" --show-labels

 

另外許多資源支持內嵌字段

matchLabels: 直接給定建值

matchExpressions: 基於給定的表達式來定義使用標簽選擇器,{key:"KEY",operator:"OPERATOR",values:[V1,V2,....]}

操作符: in notin:Values字段的值必須是非空列表  Exists NotExists:  Values字段的值必須是空列表

 

三、小試牛刀

通過主機標簽或者主機名,把pod部署到匹配的節點

1、匹配符合條件的標簽,部署pod

a、給node02節點打標簽,如果多個主機都有ssd標簽,會隨機匹配某一個

kubectl label nodes node02.linux.com disktype=ssd   #給node02打上ssd標簽
kubectl get nodes --show-labels

b、修改yaml文件,增加標簽選擇器

[root@master manifests]# cat pod-with-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-nodeselector
  labels:
    env: testing
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
 nodeSelector: disktype: ssd

c、創建pod,驗證

kubectl create -f pod-with-nodeselector.yaml
kubectl get nodes -o wide

2、通過主機名,部署pod到指定的主機

方式一:

[root@master manifests]# cat pod-with-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-nodeselector
  labels:
    env: testing
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  nodeSelector: kubernetes.io/hostname: node01.linux.com

方式二:使用sepc.nodeName

[root@master manifests]# cat pod-with-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-nodeselector
  labels:
    env: testing
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
 nodeName: node01.linux.com 

 

 


免責聲明!

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



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