Label 是键值对,用来标识 Kubernetes 资源(如 Pod、Node、Service 等)的属性。它们并不直接影响资源的行为,但可以帮助用户快速组织、查询和操作这些资源。标签可以用于选择、过滤和分组。
Label: 标签对 k8s 中各种资源进行分类、分组,如Pod和节点进行分组。通过添加kev=value格式的标签,用于区分同样的资源不同的分组。
Selector: 通过一个过滤的语法进行查找到对应标签的资源。标签选择器可以通过根据资源的标签查询出精确的对象信息。
Selector主要从资源角度。比如有50个pod,怎么去确定deployment管理的是哪些pod呢,就用Seletcor可以管理哪些资源的pod。
Label主要是pod或者node角度。基本上多有的东西都能打上标签。
… Service 通过 selector 匹配后端的 Pods,只有符合标签条件的 Pods 才会被加入到 Service 的负载均衡范围内。 …
不同资源的标签不要写成一样的
一般不修改pod的标签,一般都是更改node标签,给node打上标签,创建deployment可以指定标签。
一、 定义Label
应用案例:
有一条专属的高速光纤通道,此通道只能与 10.1.7.0 网段进行通信,因此只能将与这个网段通信应用部署到 10.1.7.0 网段所在的节点上。
此时可以对节点添加 Label:
[root@k8s-master01 ~]# kubectl label node k8s-node01 k8s-node02 subnet=7
node/k8s-node01 labeled
node/k8s-node02 labeled
然后可以通过 Selector 对其筛选:
[root@k8s-master01 ~]#kubectl get no -l subnet=7
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready <none> 70d v1.28.0
k8s-node02 Ready <none> 70d v1.28.0
最后在 Deployment 或其他控制器中指定将 Pod 部署到该节点:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy: {
}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
nodeSelector: # 增加标签选择,新加的标签
subnet: "7"
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine
name: nginx
resources: {
}
status: {
}
生成pod,可以查看新生成的Pod在node1和node2的两个节点上。固定在某写节点上。
[root@k8s-master01 practice]#kubectl create -f nginx-deploy.yaml
deployment.apps/nginx created
[root@k8s-master01 practice]#kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-df69b94b7-55m7g 1/1 Running 0 5s
nginx-df69b94b7-kmvp7 1/1 Running 0 5s
nginx-df69b94b7-vv5hs 1/1 Running 0 5s
[root@k8s-master01 practice]#kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-df69b94b7-55m7g 1/1 Running 0 13s 172.16.58.206 k8s-node02 <none> <none>
ngi