k8s基础(7)之Label

k8s基础(7)之Label

Label

label介绍

Label (标签) Label是Kubernetes系统中另外一个核心概念。一个Label是一个key=value的键值对,其中key与value由用户自己指定。Label可以附加到各种资源上,例如Node Pod Service RC等。 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去,Label通常在资源对象定义时确认,也可以在对象创建后动态添加或者删除

我们可以通过给指定的资源对象捆绑一个多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。

举例 当你在RC的yaml文件中定义了该RC的selector中的label为app:my-web,那么这个RC就会去关注Pod-->metadata-->labeks中label为app:my-web的Pod。修改了对应Pod的Label,就会使Pod脱离RC的控制。同样,在RC运行正常的时候,若试图继续创建同样Label的Pod,是创建不出来的。因为RC认为副本数已经正常了,再多起的话会被RC删掉的。

Label 常见标签

例如: 部署不同版本的应用到不同的环境中;或者监控和分析应用(日志记录、监控、告警)

常用的Label实例如下:

版本标签:“release” : “stable” , “release” :“canary” 环境标签:“environment”:“dev”, “environment”:“qa”, “environment”:“production” 架构标签:“tier”:“frontend”, “tier”:“backend”, “tier”:“middleware” 分区标签:“partition”:“customerA”, “partition”:“customerB” 质量管控标签:“track”:“daily”, “track”:“weekly”


Label Selector

label Selector 介绍

Label 表达式 && Label Selector Label 相当于我们熟悉的**标签**,给某个资源对象定义一个Label,就相当于给它打了一个标签,随后可以通过Label Selector 标签选择器 查询和筛选有某些Label的资源对象。Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。

Label Selector 两种表达式

label采用 等式类

一、基于等式的(Equality-based)

name = redis-slave: 匹配所有具有标签name=redis-slave的资源对象 env != production: 匹配所有不具有标签env=production的资源对象,比如env=test就是满足此条件的标签之一

二、基于集合的(Set-based)

name in (redis-master,redis-slave):匹配所有具有name=redis-master或者name=redis-slave的资源对象 name not in (php-fronted):匹配所有不具有标签name=php-fronted的资源对象

可以通过多个Label Selector表达式的组合实现复杂的条件选择,多个表达式之间用",“进行分隔即可,几个条件之间是”AND"的关系,即同时满足多个条

name=redis-slave,env!=production
name notin (php-fronted),env!=production

label value语法

长度不超过63个字符。 可以为空 首位字符必须为字母数字字符 中间必须是横线、_、.、数字、字母。


Label定义yaml

Label常定义在matadate

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
>>    app: new_nginx <<============

RC通过Label Selector机制实现对Pod副本的自动控制。 RC和Service在spec中定义Selector与Pod进行关联

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
>>      app: new_nginx<<=================

DeploymentReplica Set、DaemonSet和Job可以在Selector中使用基于集合的筛选条件定义

  selector:
    matchLabels:
      app:new_nginx
    matchExpressions:
      - {key: tier, operator: In, values: [frontend]}
      - {key: environment, operator: NotIn, values: [dev]}
# mathchLabels 用于定义一组Label,与直接写在Selector中相同; 
# matchExpressions  用于定义一组基于集合的筛选条件,可以用的运算符包括:`In` `NotIn` `Exists`和`DoesNotExIST

提示: 如果同时设置了 matchLabelsmatchExpressions,则两组条件为"AND" 关系,即所有条件需要同时满足时才能完成Selector的筛选

Lbael Selector 使用场景

Label Selector 在Kubernetes中的最重要的使用场景有以下几处

kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量,从而实现Pod 副本的数量始终符合设定的全自动控制流程

kube-proxy 进程通过Service的Label Selector 来选择对应的Pod,自动建立起每个Service到对应的Pod的请求转发路由表,从而实现Service的智能均衡特性。

通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector,这种标签调度策略,kube-scheduler进程可以实现Pod“定向调度”的特性

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Kubernetes 集群中,可以使用 `kubectl get nodes` 命令来查看节点的 label 信息。该命令的输出包含了节点的名称、状态以及 label 信息。例如: ``` $ kubectl get nodes -l env=prod NAME STATUS ROLES AGE VERSION node1.example Ready <none> 1h v1.19.0 node2.example Ready <none> 1h v1.19.0 ``` 上面的命令中,我们使用了 `-l env=prod` 参数来筛选标记为 `env=prod` 的节点。 如果要查看更多关于某个特定节点的信息,可以使用 `kubectl describe node <node-name>` 命令。例如: ``` $ kubectl describe node node1.example ... Labels: env=prod ... ``` ### 回答2: 要查看Kubernetes集群中的节点标签,可以使用以下命令: 1. 使用kubectl命令行工具连接到集群。 2. 运行以下命令来查看所有节点及其标签: ``` kubectl get nodes --show-labels ``` 这将显示集群中所有节点的名称以及它们的标签。 示例输出: ``` NAME STATUS ROLES AGE VERSION LABELS node1 Ready master 3d3h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,node-role.kubernetes.io/master= node2 Ready <none> 3d1h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux node3 Ready <none> 2d23h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node3,kubernetes.io/os=linux ``` 在这个示例中,每个节点都有一个或多个与其关联的标签。 另外,您还可以使用以下命令来获取特定节点的标签: ``` kubectl describe node <node_name> | grep Labels ``` 将`<node_name>`替换为您想要获取标签的节点的名称。这将显示指定节点的标签信息。 总结起来,要查看Kubernetes集群中的节点标签,您可以使用`kubectl get nodes --show-labels`命令来获取所有节点及其标签,或使用`kubectl describe node <node_name> | grep Labels`命令来获取特定节点的标签信息。 ### 回答3: 在Kubernetes中,可以使用kubectl命令行工具来查看节点的label。kubectl是Kubernetes的官方命令行客户端工具。 要查看节点的label,可以使用以下命令: ``` kubectl get nodes --show-labels ``` 这个命令会列出所有的节点,并显示每个节点的label。 如果只想查看特定节点的label,可以使用以下命令: ``` kubectl get node <node-name> --show-labels ``` 将<node-name>替换为要查看的节点名称。这个命令将显示指定节点的label。 另外,还可以使用以下命令来查找具有特定label的节点: ``` kubectl get nodes -l <label-selector> --show-labels ``` 将<label-selector>替换为要查找的label选择器。这个命令将显示具有指定label的所有节点。 通过这些命令,您可以方便地查看和搜索节点的label,以了解各个节点的特征和属性,进一步优化和管理您的Kubernetes集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在输入中…………

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值