Label和Label Selector

概念:

Label:是Kubernetes系列中另外一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。
这个标签可以由使用者自己来进行定义,然后附加到k8s中的资源对象上,比如,pod上,node上等等

Label selector(标签选择器):对一组对象(Node,Pod,Service,RC)打上了不同的标签之后,当我们要选择其中的部分,或者全部作为使用目标的时候,就可以使用label selector来实现这个操作,标签选择器中指定具体的过滤的条件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-label
  namespace: beijing
spec:
  selector:
    matchLabels:
      app: nginx
      env: prod
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
        env: prod
    spec:
      containers:
      - image: harbor.ops.bsnbase.com/fabric/nginx:1.21.6 
        name: nginx

在pod的模板中,通过以下的方式来定义label

 spec.template:
    metadata:
      labels:
        app: nginx
        env: prod

# 查询pod 并显示label
[root@master1 beijing]# kubectl get pod -n beijing --show-labels -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES   LABELS
init-busybox-77b9f4dccc-j8d62   1/1     Running   0          43h     10.233.66.236   node2   <none>           <none>            name=init-busybox,pod-template-hash=77b9f4dccc
pod-label-7879c4469b-qf8cw      1/1     Running   0          6m58s   10.233.66.4     node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b
pod-label-7879c4469b-shphs      1/1     Running   0          6m58s   10.233.66.3     node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b


#过滤出所有包含app=nginx的pod
[root@master1 beijing]# kubectl get pod -l 'app=nginx' --show-labels -o wide -n beijing
NAME                         READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES   LABELS
pod-label-7879c4469b-qf8cw   1/1     Running   0          7m43s   10.233.66.4   node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b
pod-label-7879c4469b-shphs   1/1     Running   0          7m43s   10.233.66.3   node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b

#过滤出所有包含app=nginx的pod, 通过逗号隔开,表示2个条件要同时的满足,也就是AND的关系
[root@master1 beijing]# kubectl get pod -l 'app=nginx,env=prod' --show-labels -o wide -n beijing
NAME                         READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES   LABELS
pod-label-7879c4469b-qf8cw   1/1     Running   0          7m59s   10.233.66.4   node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b
pod-label-7879c4469b-shphs   1/1     Running   0          7m59s   10.233.66.3   node2   <none>           <none>            app=nginx,env=prod,pod-template-hash=7879c4469b

这样,就通过标签实现了一个基本的过滤,同时,当一个资源对象要和另外的对象进行关联的时候,比如,service要关联pod,也是通过label过滤的方式来实现的。
上面是在命令行中的一个基本的使用。
在yaml中的使用也是类似的,只是要放在Selector的部分。

yaml配置中的标签选择表达式

我们以service为示例,来测试下标签的选择:

apiVersion: v1
kind: Service
metadata:
  name: service-label
  namespace: beijing
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
    env: prod

这里的过滤条件是2个,就是同时满足的意思

spec.selector:
    app: nginx
    env: prod

查看service关联的pod的结果:

#查看service信息
[root@master1 beijing]# kubectl get svc -n beijing service-label -o wide --show-labels
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR             LABELS
service-label   ClusterIP   10.233.4.255   <none>        80/TCP    12m   app=nginx,env=prod   <none>

#查询Service 的目标 Pod 集合
[root@master1 beijing]# kubectl get endpoints -n beijing -o wide --show-labels
NAME                                                     ENDPOINTS                                AGE    LABELS
glusterfs-dynamic-00f74685-dc00-46e4-81b6-2a8013f8486d   10.0.49.57:1,10.0.49.56:1,10.0.49.55:1   3d2h   gluster.kubernetes.io/provisioned-for-pvc=blocktxs
glusterfs-dynamic-ff90deca-9fc8-4c9e-899e-feb0bd59c8c8   10.0.49.57:1,10.0.49.56:1,10.0.49.55:1   3d2h   gluster.kubernetes.io/provisioned-for-pvc=ca-certs
service-label                                            10.233.66.3:80,10.233.66.4:80            12m    <none>

参考: https://www.cnblogs.com/chuanzhang053/p/16351442.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容