首页 > 其他分享 >k8s中label和selector的基本概念以及使用方法

k8s中label和selector的基本概念以及使用方法

时间:2023-02-26 00:55:34浏览次数:48  
标签:ns app label selector nginx env pod k8s

概述

在k8s中有一个非常核心的概念,就是label(标签),以及对label的使用,label selector

 label(标签)

定义:

  标签这个概念和现实生活中的标签其实没有什么区别,如,苹果是水果,冰箱是家电,都是一种标签,类似的。在k8s中,一个label就是key/value对如:app:nginx

  这个标签可以有使用者自己定义,然后附加到k8s中的资源对象上,比如,pod,node上等等

特性:

label有如下的一些特点:

  • label可以被附加到各种资源对象上
  • 一个资源对象可以定义任意数量的label
  • 同一个label可以被添加到任意数量的资源对象上

label selector(标签选择器):

当我们给一组对象,比如有10个pod,打上不同的标签之后,当我们需要选择期中的部分,或者全部作为使用目标的时候,就可以使用label selector来实现这个操作,标签选择器中指定具体的过滤的条件,然后就能在10个pod中过滤出满足我们要求的这些pod

定义标签:

创建一个pod的定义文件中,指定标签

apiVersion: v1
kind: Namespace
metadata:
  name: ns-label
spec: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-label
  labels:
    app: nginx-label
  namespace: ns-label
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
      env: label
  template:
    metadata:
      labels:
        app: nginx
        env: label
    spec:
      containers:
      - name: label-nginx
        image: nginx:1.15
        ports:
        - containerPort: 80
      restartPolicy: Always

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

    metadata:
      labels:
        app: nginx
        env: label

创建pod并查看标签,可以看到不同的标签

[root@k8s-master01 ns-slx-study]# kubectl get pod --show-labels -n ns-label
NAME                          READY   STATUS    RESTARTS   AGE    LABELS
nginx-label-c4758cff4-h8bz5   1/1     Running   0          7m2s   app=nginx,env=label,pod-template-hash=c4758cff4
nginx-label-c4758cff4-ltkrq   1/1     Running   0          7m2s   app=nginx,env=label,pod-template-hash=c4758cff4
[root@k8s-master01 ns-slx-study]#

 label selector:

我们可以通过标签选择来筛选出满足我们的要求的对象。所谓的标签选择就是过滤,有几种方式:

#过滤出ns-lanel namespace下所有包含env=label的pod
[root@k8s-master01 ns-slx-study]# kubectl -n ns-label get pod -l env=label --show-labels
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
nginx-label-c4758cff4-h8bz5   1/1     Running   0          11m   app=nginx,env=label,pod-template-hash=c4758cff4
nginx-label-c4758cff4-ltkrq   1/1     Running   0          11m   app=nginx,env=label,pod-template-hash=c4758cff4

几个常用命令,我就不演示了:

#在ns(命名空间):ns-label下,过滤出包含env=nginx,env=label的pod
kubectl -n ns-label get pod -l 'env=nginx,env=label' --show-labels
#在ns(命名空间):ns-label下,过滤出包含env=ngin或者env=label或者env=ssd的pod
kubectl -n ns-label get pod -l 'env in (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出包含env=ngin或者env=label或者env=ssd,同时app=nginx的pod
kubectl -n ns-label get pod -l 'app=nginx,env in (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出不包含env=ngin或者env=label或者env=ssd的pod
kubectl -n ns-label get pod -l 'env notin (nginx,label,ssd)' --show-labels
#在ns(命名空间):ns-label下,过滤出不是env=nginx,env=label的pod
kubectl -n ns-label get pod -l 'env!=nginx,env!=label' --show-labels

基于集合匹配的方式:

  selector:
    matchLabels:
      app: nginx
      env: online
    matchExpressions:
     - {key: release, operator: In, values: [stable] }
     - {key: app,operator: NotIn, values: [nginx02,nginx03] }
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx06
        env: online
        release: stable

语法:

    matchExpressions:
     - {key: release, operator: In, values: [stable] }
     - {key: app,operator: NotIn, values: [nginx02,nginx03] }

 

标签:ns,app,label,selector,nginx,env,pod,k8s
From: https://www.cnblogs.com/Direction-of-efforts/p/17155719.html

相关文章

  • k8s operator添加webhook
    k8soperator添加webhookOperator中的webhook,其作用与过滤器类似,外部对CRD资源的变更,在Controller处理之前都会交给webhook提前处理,kubernetes官方博客明确指出webhoo......
  • k8s部署daemonset filebeat
    实现:收集容器控制台日志部署daemonsetfilebeat,如上图红框位置找一台机器打镜像FROMdocker.elastic.co/beats/filebeat:7.9.0COPYfilebeat.yml/usr/share/filebeat/fileb......
  • k8s-操作系统初始化
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。1.关闭防火墙systemctlstopfirewalld#临时systemctldisablefirewalld#永久2.关闭SeL......
  • k8s operator开发与使用
    k8soperator开发与使用本篇文章用于记录k8soperator的开发,此处以一个简单的demo来记录operator的开发过程及相关要点;本文中使用kubebuilder工具来生成相关代码一、......
  • k8s workloads 练习
    练习主题练习deployment创建扩容所容练习pods自动扩所容和metric安装配置练习升级和回滚练习configmap创建和使用一命令创建创建depolymentnginx,副本为2kubectl......
  • K8S集群+负载均衡层+防火墙 实例
    实验拓扑图:实验要求:(1)Kubernetes区域可采用Kubeadm方式进行安装。(2)要求在Kubernetes环境中,通过yaml文件的方式,创建2个NginxPod分别放置在两个不同的节点上,Pod使用......
  • K8S污点容忍案例
    [root@lecode-pre74~]#setenforce0setenforce:SELinuxisdisabled[root@lecode-pre74~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config[......
  • 收集日志方式1:k8s集群通过ELK收集容器控制台输出日志(logstash方式)
    集群架构:控制台日志,相当于容器的1号进程。或者容器内的日志正确和错误日志重定向到了如下/var/log/nginx/access.log->/dev/stdout /var/log/nginx/error.log->/dev/st......
  • 本地部署一套k8s集群
    我这里准备三台本地vmware虚拟机,版本号centos7.9,一台master节点,一台node1,一台node2kubeadm方式部署。Kubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于......
  • k8s的滚动更新
    一、什么是滚动更新当某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动服务。如果业务集群规模较大时,这个工作就变成了一个......