一、标签是什么
标签是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