0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是Kubernetes标签 标签选择运算符介绍

西西 来源:OSC开源社区 作者:Gauss松鼠会 2022-09-06 10:56 次阅读

来源| OSCHINA 社区

作者 |Gauss松鼠会

前言

我们知道使用 pod 控制器创建的 pod,在 pod 故障以后重建后的 pod ip 地址和名称是变化的,为了解决 pod 访问问题,我们特此创建了 service,我们访问 service 的 ip 地址就可以正常访问到 pod;那么问题来了,service 是怎样去关联 pod 的呢?在 k8s 上如果使用 pod 控制创建的 pod,在 pod 发生故障以后,对应 pod 会被对应的控制器重启或重建,一个 pod 重建以后,对应的 ip 地址和名称都是会发生变化的,所以靠 ip 地址和名称关联 pod 是不行的;那靠什么关联 pod 呢?在 k8s 上是使用的标签和标签选择器的机制实现资源和资源间相互关联的。 什么是标签?它的作用是干嘛用的? 所谓标签就是指一个键值数据,在 k8s 上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签;有了标签以后,我们后续就可以根据标签来管理对应的资源;一个资源可以拥有多个标签,同时一个标签也可以附加给多个资源;我们可以理解为标签就是用来逻辑的对资源进行分组,拥有相同标签的资源为一组;标签的作用是方便用户管理资源;比如在 k8s 上运行了几百个 pod,我们想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一个标签,然后要管理这些 pod 的时,直接指定拥有指定标签的 pod 即可。

一、什么是 Kubernetes 标签

要学习 k8s 标签,需要从以下几个方面来学习。首先,我们需要知道什么是 k8s 标签。
在 k8s 中,标签(Labels)是附加到 k8s 对象(比如 Pods)上的键值对。
标签的一个示例如下所示:

“metadata”:{  
    “labels”:{    
    “key1” : ”value1”  
“key2” : ”value2”  }  }
标签的作用主要有两点: 一是标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。
二是标签可以用于组织和选择对象的子集。 标签的特点主要有如下三点:
1、每个对象都可以定义一组键值标签。
2、每个键对于给定对象必须是唯一的。
3、标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。

二、设计标签的目的

设计标签的主要目的是使用户能够以松耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。 有如下几个示例标签,例如: 1、在区分发行版本的时候,可以指定:
“release” : “canary”
“release” : “dev”
“release” : “beta”
“release” : “stable”
…… 2、在定义运行环境时,可以指定:
“environment”: “dev”
“environment”: “qa”
“environment”: “production”
……

三、标签的语法

接着,我们来学习下标签的语法。 1、前缀:
1) 前缀是可选的;
2) 如果指定,前缀必须是 DNS 子域:由点 “.” 分割的一系列 DNS 标签,总共不超过 253 个字符,后跟斜杠 “/”;
3) 如果省略前缀,则假定标签键对用户是私有的。向最终用户对象添加标签的自动系统组件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl 或其他第三方自动化工具)必须指定前缀 2、名称:
1) 名称段是必需的
2) 必须小于等于 63 个字符,以字母数字字符 “[a-z0-9A-Z]” 开头和结尾,带有破折号 “—”,下划线 “_”,点 “.” 和之前的字母数字 3、小结:有效的标签值
1) 必须为 63 个字符或更少(可以为空);
2) 除非标签值为空,必须以字母数字字符 “[a-z0-9A-Z]” 开头和结尾;
3) 包含破折号 “—”,下划线 “_”,点 “.” 和之前的字母数字
示例:是一个有 environment 为 qa,同时 app 为 nginx 标签的 pod 配置文件。

apiVersion:v1kind:Podmetadata: name:label-demo 
 labels:  environment:production 
 app:nginx 
 spec:    containers:  
  -name:nginx     
  Image:nginx:1.14.2  
 Ports: 
     -containerPort:80

四、标签选择运算符

然后,我们来学习下标签选择运算符。标签选择运算符分为两种: 一种是基于等值的需求:
基于等值或基于不等值的需求允许按标签键和值进行过滤。可接受的运算符有 “=”、“==”、“!=”。
一种是基于集合的需求:
基于集合的标签需求允许你通过一组值来过滤键。持有三种操作符:“in”、“notin”、“exists”。 最后,我们来学习下如何使用 API 来使用标签。前面提到的两种标签选择算符都可以通过 REST 客户端用于 list 或者 watch 资源。 基于等值的需求可以使用如下命令来获取 pods。

Kubectl get pods –l environment-production,tier=frontend

基于集合的需求可以使用如下命令来获取 pods。

Kubectl get pods –l ‘environment in (production),tier in (frontend)’

五、标签的使用

K8S 中资源标签 label
1、说明
标签 label:
资源标志
格式 key=value
可添加删除多个标签 标签选择器 label selector:
用于选择资源
name=name1
name!=name1
name in (name1,name2)
name not in (name1,name2) 2、指令
1)帮助:

kubectl label --help

2)打标签:

pod:kubectl label pods busybox app=busybox node:kubectl label node k8s-node01 k8s-node02 env=test

3)查看:
查看 pods 为 busybox 的标签:

kubectl get pods busybox --show-labels

查看默认名称空间下所有 pod 资源的标签:

kubectl get pods --show-labels

查看指定名称空间:

kubectl get pods -n kube-system --show-labels

4)更新:
加上–overwrite 参数修改标签

kubectl label po busybox app=busybox2 -n kube-public --overwrite

5)通过标签筛选:
列出默认名称空间下标签 key 是 app 的 pod,不显示标签:

kubectl get pods -l app

列出默认名称空间下标签 key 是 app、值是 busybox 的 pod,不显示标签:

kubectl get pods -l app=busybox

多个筛选条件:

kubectl get po -l version!=v1,app=nginx

6)删除:

pod:kubectl label po busybox app- -n kube-public node:kubectl label node k8s-node02 env-

3、配置
1)创建 label-nginx.yaml

apiVersion: v1kind: Podmetadata:  name: nginx  
  namespace: dev   
   labels:       
   version: "1.0.0"
env:"test"spec:
containers: 
 - image: nginx   
   imagePullPolicy: IfNotPresent 
         name: pod       
       ports:  
  - name: nginx-port   
       containerPort: 80
protocol:TCP
2)创建

kubectl create -f label-nginx.yaml

3)删除

kubectl delete -f label-nginx.yaml

以上就是 K8s 标签的介绍。

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16138

    浏览量

    177170
  • 选择器
    +关注

    关注

    0

    文章

    106

    浏览量

    14511
  • kubernetes
    +关注

    关注

    0

    文章

    223

    浏览量

    8683

原文标题:Kubernetes(k8s)标签详解

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言运算符的使用方法

    详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法
    发表于 11-02 11:30 1439次阅读
    C语言<b class='flag-5'>运算符</b>的使用方法

    FBD运算符名称

    本内容介绍了FBD的运算符名称的解释
    发表于 04-29 10:51 0次下载
    FBD<b class='flag-5'>运算符</b>名称

    条件运算符是什么_条件运算符有哪些

    运算符优先级高于赋值、逗号运算符,低于其他运算符。关系运算实际上是逻辑比较运算,它是逻辑运算
    发表于 11-16 16:02 1.1w次阅读
    条件<b class='flag-5'>运算符</b>是什么_条件<b class='flag-5'>运算符</b>有哪些

    单目运算符是什么_单目运算符有哪些

    单目运算符是指运算所需变量为一个的运算符,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符
    的头像 发表于 02-24 15:42 6w次阅读
    单目<b class='flag-5'>运算符</b>是什么_单目<b class='flag-5'>运算符</b>有哪些

    C运算符的优先级和结合性详细解决

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。 C语言内置了丰富的运算符,大体可分为10类:算术运算符、关系运算符、逻辑运算符、位
    的头像 发表于 02-22 17:27 3188次阅读

    浅析MySQL中的各类运算符

    MySQL支持多种运算符,我们在写SQL脚本时经常会需要用到各种各样的运算符,这些运算符可以用来连接表达式,进而从数据库中查询我们需要的结果集等。这些类型主要包括算术运算符、比较
    的头像 发表于 05-03 17:41 2022次阅读
    浅析MySQL中的各类<b class='flag-5'>运算符</b>

    python运算符是什么

    python运算符 0. 什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中,4和5被称为操作数,“+”号为运算符。 Python语言支持
    的头像 发表于 02-21 16:44 2345次阅读

    SystemVerilog-运算符/表达式规则

    RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件
    的头像 发表于 08-03 09:03 3014次阅读

    什么是运算符重载

    重载运算符是具有特殊名称的函数,是通过关键字** operator **后跟运算符的符号来定义的
    的头像 发表于 01-20 15:30 2428次阅读

    条件(三元)运算符

    RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件
    的头像 发表于 02-09 15:42 1303次阅读
    条件(三元)<b class='flag-5'>运算符</b>

    什么是移位运算符

    移位运算符将向量的位向右或向左移位指定的次数。SystemVerilog具有按位和算术移位运算符
    的头像 发表于 02-09 15:49 1766次阅读
    什么是移位<b class='flag-5'>运算符</b>

    Python中运算符介绍

      1. 逻辑运算符 逻辑运算符总结: 测试代码 a, b, c = 1, 2, 3 print((a 《 b) and (b 《 c)) print((a 》 b) or (a 《 b
    的头像 发表于 03-08 17:22 1077次阅读

    Go语言运算符主要包括哪些呢?

    Go语言运算符主要包括:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他
    的头像 发表于 05-26 15:54 828次阅读
    Go语言<b class='flag-5'>运算符</b>主要包括哪些呢?

    python中运算符的优先级大小

    Python中运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python中
    的头像 发表于 11-29 16:21 3135次阅读

    c语言从右到左的运算符有哪些

    用在变量之后时,它们会先返回变量的原始值,然后再进行递增或递减。 三元条件运算符 ( ?: ):这个运算符的求值顺序是从右到左。首先计算第三个表达式,然后根据第一个表达式的结果选择第二个或第三个表达式。 赋值
    的头像 发表于 08-20 11:39 631次阅读