概述

在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. ID生成器实现方式的优缺点比较以及最优的ID生成器原理剖析

    引用:https://blog.csdn.net/luoyang_java/article/details/90679456 本文的重点主要是ID发号器相关的知识,介绍了雪花算法,以及他的基本原理和实 ...

  2. 305-基于XC7Z020的AI 人工智能 可编程相机

    基于XC7Z020的AI 人工智能 可编程相机 一.产品概述 本产品为一款基于FPGA soc的支持二次开发的智能相机平台,基于大量已有的图形计算库和我们开发的支持库,用户可以使用python语言,轻 ...

  3. 手写JS深拷贝

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. t:datagrid 行编辑 类型备份

    如编辑文本类型: <t:dgCol extendParams="editor:'text'" /> 如编辑数值类型: <t:dgCol extendParams= ...

  5. 专业家庭影音服务器-软件平台及安装-Ubuntu+Docker+Portainer+宝塔linux面板

    服务器安装什么系统呢? 如果说操作简单考虑和黑群晖(应为没有买群晖的硬件,自己没法装正版系统), 还是各种NAS系统,TrunNAS.URaidn OS,...一查种类还真的不少,简直是选择恐惧症,总 ...

  6. B - WeirdSort

    B - WeirdSort 思路:经过认真的审题,你会发现,这只是个冒泡的变形,我们建立两个数组,然后用一个数组里面的数字确定位置,然后冒泡就行了.最后抖机灵用了个is_sorted,判断数组里面数字 ...

  7. vue + antV G6 实现流程图完整代码 (antv G6 流程图)

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. 写入自定义 ASP.NET Core 中间件

    中间件是一种装配到应用管道以处理请求和响应的软件. ASP.NET Core 提供了一组丰富的内置中间件组件,但在某些情况下,你可能需要写入自定义中间件. 备注:本主题介绍如何编写基于约定的中间件. ...

  9. mybatis lombok 报错: java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

    1. 报错原因:jdk版本太高,lombok版本太低 2. 解决办法:安装更高版本的依赖包,可以去Maven Repository: lombok去查:https://mvnrepository.co ...

  10. swift 应用内切换语言

    1:在project info中的locations添加需要的语言 2:创建Localizable.strings文件 点击右边的localization勾选需要的语言 3:创建InfoPlist.s ...