一、標簽是什么
標簽是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