概述

在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] }

k8s中label和selector的基本概念以及使用方法的更多相关文章

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

    1.概述 在k8s中,有一个非常核心的概念,就是label(标签),以及对label的使用,label selector. 本文档中,我们就来看看:1.什么是标签,2.如何定义标签,3.什么是标签选择 ...

  2. chrome插件编写中需要了解的几个概念和一些方法

    1.插件文件结构 1.1.manifest.json 每一个扩展.可安装的WebApp.皮肤,都有一个JSON格式的manifest文件,里面存放重要的插件相关信息. 一个最基本的配置例子: { &q ...

  3. 在k8s中的基本概念

    在k8s中的基本概念 一.Pod1. podk8s下最重要也最基本的概念,由一个根容器Pause和许多用户业务容器组成,是容器的载体. 2. pod的yaml定义格式及字段 apiVersion: v ...

  4. k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景

    k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...

  5. k8s 中的 Pod 细节了解

    k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...

  6. k8s中yaml文常见语法

    在k8s中,所有的配置都是 json格式的.但为了读写方便,通常将这些配置写成yaml 格式,其运行的时候,还是会靠yaml引擎将其转化为json,apiserver 也仅接受json的数据类型. y ...

  7. 【Kubernetes】在K8s中创建StatefulSet

    在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...

  8. 在K8s中创建StatefulSet

    在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...

  9. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  10. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

随机推荐

  1. PPT导出高分辨率tif图片——用于学术论文

    PPT导出的图片默认分辨率只有96dpi,但要到印刷品要求的图片分辨率最好是300dpi,学术论文也需要高清晰度的图片.要让PPT导出的图片分辨率达到300dpi,其实可以不用PS,直接修改系统注册表 ...

  2. 工程师突击:SAP ABAP实用程序开发攻略.pdf

    工程师突击:SAP ABAP实用程序开发攻略.pdf 有需要的联系 wx :erpworld

  3. Java-面向对象基础 构造方法

    public class Dog {// 定义属性 String nick; String color; int age; // 定义构造方法 public Dog(String nick,Strin ...

  4. Docker-Compose实战<下篇>

    本文是在上一篇文章的基础上做的一些内容追加,上文最后截止内容是docker-compose build将镜像生成完成.接下来我将继续写启动相关服务,访问服务以及常用命令使用等. 1 启动镜像 使用命令 ...

  5. 软件离线许可(License)实现原理

    我们经常使用各种开发软件,比如IntelliJ IDEA.Navicat.Visual Studio等,这些软件都有一个特点,就是要收费.一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使 ...

  6. ES6 - 参数默认值

    1.形参初始值, 具有默认值的参数,一般位置要靠后(潜规则) function add(a,b,c=10){ return a + b + c; } let resutl = add(1,2); // ...

  7. 循环3-while语法

    一.介绍和语法 1. while循环方式 while循环语句会对紧跟在while命令后的条件表达式进行判断,如果该表达式成立,则执行while循环里面的命令或语句,每一次执行到done时,会重新判断w ...

  8. JMeter基础 — JMeter聚合报告详解

    提示:聚合报告组件的使用和察看结果树组件的使用方式相同.本篇文章主要是详细的介绍一下聚合报告组件内容,不做示例演示. 1.聚合报告介绍 在使用JMeter进行性能测试时,聚合报告(Aggregate ...

  9. fork子进程父进程死掉之后,getppid()不为1的解决办法

    代码例子:程序在执行之后,会一直死在while中,打印发现当父进程被终止,getppid() 的值也不为1 pid_t pid;if((pid = fork()) < 0){ printf(&q ...

  10. zk api连接超时问题 org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for

    遇到 org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss fo ...