网站策划师有前途吗,建设门户网站的目的,郑州网站专业建设qq,网站更换目录名如何做301跳转label和label selector 标签和标签选择器
1、label 标签#xff1a; 一个label就是一个key/value对 label 特性#xff1a;
label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上
2、label selector 标签选择器 L…label和label selector 标签和标签选择器
1、label 标签 一个label就是一个key/value对 label 特性
label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上
2、label selector 标签选择器 Label selector是Kubernetes核心的分组机制通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。
查询条件
selector:matchLabels:app: mywebmatchExpressions:- {key: tier, operator: In, values: [frontend]}- {key: environment, operator: NorIn, values: [dev]} matchLabels用于定义一组Label与直接写在Selector中作用相同matchExpression用于定义一组基于集合的筛选条件可用的条件运算符包括In、NotIn、Exists和DoesNotExist。 如果同时设置了matchLabels和matchExpression则两组条件为“AND”关系即所有条件需要满足才能完成Selector的筛选。
3、示例
定义标签
#可以多创建几个deploy 方便演示
[rootk8s-master-1 test]# vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: label-test
spec:selector:matchLabels:app: nginxenv: prodreplicas: 1template:metadata:labels:app: nginxenv: prodspec:containers:- image: nginx:1.17.1name: nginx[rootk8s-master-1 test]# kubectl apply -f deployment.yaml
deployment.apps/label-test created
#创建完成就可以看到他的标签
[rootk8s-master-1 test]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELSlabel-test-7787b4694b-jvrz5 1/1 Running 0 16s appnginx,envprod,pod-template-hash7787b4694b[rootk8s-master-1 test]# kubectl get pod --show-labels -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELSlabel-test-7787b4694b-jvrz5 1/1 Running 0 46s 10.244.0.164 k8s-node-1 none none appnginx,envprod,pod-template-hash7787b4694b#查看所有标签 -A
[rootk8s-master-1 ~]# kubectl get pod -A --show-labels
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default busybox 1/1 Running 11 2d17h none
default label-test-7787b4694b-jvrz5 1/1 Running 2 41h appnginx,envprod,pod-template-hash7787b4694b
default web-96d5df5c8-vmxgr 1/1 Running 2 2d23h appweb,pod-template-hash96d5df5c8
kube-system coredns-6b774d79bb-4ssxb 1/1 Running 48 18d k8s-appkube-dns,pod-template-hash6b774d79bb
kube-system kube-flannel-ds-amd64-7bpfs 1/1 Running 16 18d appflannel,controller-revision-hash76ccd4ff4f,pod-template-generation1,tiernode
kube-system kube-flannel-ds-amd64-8d8fj 1/1 Running 17 18d appflannel,controller-revision-hash76ccd4ff4f,pod-template-generation1,tiernode
kube-system kubernetes-dashboard-567f98444d-d9zb4 1/1 Running 2 2d23h k8s-appkubernetes-dashboard,pod-template-hash567f98444d
kube-system metrics-server-6f6c655778-66q5g 1/1 Running 2 2d23h k8s-appmetrics-server,pod-template-hash6f6c655778
kube-system metrics-server-6f6c655778-m6r7g 1/1 Running 3 3d17h k8s-appmetrics-server,pod-template-hash6f6c655778#命令行方式给容器、node节点、deploy、等等添加标签
[rootk8s-master-1 ~]# kubectl label node k8s-node01 k8s-node02 envtest
[rootk8s-master-1 ~]# kubectl label pod busybox appv1
pod/busybox labeled[rootk8s-master-1 ~]#
[rootk8s-master-1 ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
busybox 1/1 Running 11 2d18h appv1[rootk8s-master-1 ~]#
##修改标签使用 --overwrite
[rootk8s-master-1 ~]# kubectl label pod busybox appv2 --overwrite
pod/busybox labeled
[rootk8s-master-1 ~]# [rootk8s-master-1 ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
busybox 1/1 Running 11 2d18h appv2
#删除标签
[rootk8s-master-1 ~]# kubectl label pod busybox app-
pod/busybox labeled
label selector 命令行方式过滤
1、过滤出所有包含envprod的pod
[rootk8s-master-1 test]# kubectl get pod -l envprod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-test-7787b4694b-jvrz5 1/1 Running 0 34m appnginx,envprod,pod-template-hash7787b4694b
2、过滤出包含envprodappnginx的pod
[rootk8s-master-1 test]# kubectl get pod -l envprod,appnginx --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-test-7787b4694b-jvrz5 1/1 Running 0 38m appnginx,envprod,pod-template-hash7787b4694b
envprod,app in (nginx,nginx02,nginx03)逗号分隔2个条件表示要同时的满足
3、过滤出来不包含appnginx1和appnginx3的pod。语法app notin (nginx,nginx03) 用notin来实现
[rootk8s-master-1 test]# kubectl get pod -l app notin (nginx1,nginx2) --show-labels
4、过滤出来不包含appnginx的pod。 语法env ! dev
[rootk8s-master-1 test]# kubectl get pod -l app !nginx --show-labels
NAME READY STATUS RESTARTS AGE LABELSweb-96d5df5c8-vmxgr 1/1 Running 1 31h appweb,pod-template-hash96d5df5c8
4、yaml配置中的标签选择表达式 基于等式的匹配
创建一个service[rootk8s-master-1 test]# vim deployment-service.yaml
apiVersion: v1
kind: Service
metadata:name: service-label
spec:ports:- name: 80-80port: 80targetPort: 80selector: #标签选择器选择标签为env: prod的podenv: prod
[rootk8s-master-1 test]# kubectl apply -f deployment-service.yaml
service/service-label created
[rootk8s-master-1 test]# kubectl get svc service-label -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORservice-label ClusterIP 10.0.0.254 none 80/TCP 6m8s envprod
# 如下图可以看到service恰好就是关联到了这2个pod上了。
[rootk8s-master-1 ~]# kubectl get endpoints service-label
NAME ENDPOINTS AGE
service-label 10.244.0.166:80,10.244.0.167:80 5h18m
[rootk8s-master-1 ~]#
[rootk8s-master-1 ~]#
[rootk8s-master-1 ~]# kubectl get pod -l envprod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 18 3d1h 10.244.0.166 k8s-node-1 none none
label-test-7787b4694b-jvrz5 1/1 Running 2 2d1h 10.244.0.167 k8s-node-1 none none 基于集合的匹配
注意job、deployment、replicaset、daemonset不仅仅支持基于等式的匹配也支持基于集合的匹配
如第三个步骤创建的deploymentmatchlabels用于匹配一组的标签与直接在selector中的作用相同
在yaml文件中基于集合的方式匹配
语法
spec: # selector:#matchLabels: #matchlabels用于匹配一组的标签与直接在selector中的作用相同app: nginx06#env: online#[rootk8s-master-1 test]#
[rootk8s-master-1 test]# kubectl get deployment label-test -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
label-test 1/1 1 1 2d1h nginx nginx:1.17.1 appnginx,envprod[rootk8s-master-1 test]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 18 3d1h 10.244.0.166 k8s-node-1 none none
label-test-7787b4694b-jvrz5 1/1 Running 2 2d1h 10.244.0.167 k8s-node-1 none none[rootk8s-master-1 test]#
[rootk8s-master-1 test]# kubectl get pod label-test-7787b4694b-jvrz5 -owide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
label-test-7787b4694b-jvrz5 1/1 Running 2 2d1h 10.244.0.167 k8s-node-1 none none appnginx,envprod,pod-template-hash7787b4694b#这样deployment就和要控制、管理的pod进行了关联。另外在集合的方式里matchExpression也可以作为匹配的操作
spec: selector:matchLabels:app: nginx06env: onlinematchExpressions:- {key: release, operator: In, values: [stable] }- {key: app,operator: NotIn, values: [nginx02,nginx03] }
语法matchExpressions:- {key: release, operator: In, values: [stable] }- {key: app,operator: NotIn, values: [nginx02,nginx03] }