K8S(四)Label#yyds干货盘点#
  TEZNKK3IfmPf 2023年11月13日 33 0

(一)、概述

Label是Kubernetes系统中的一个核心概念。Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。 在为对象定义好Label后,其他对象就可以通过Label来对对象进行引用。Label的最常见的用法便是通过spec.selector来引用对象。下面是一个RC的例子:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

关于Label的用法在于这两步

  • 通过template.metadata.labels字段为即将新建的Pod附加Label。在上面的例子中,新建了一个名称为nginx的Pod,它拥有一个键值对为app:nginx的Label。
  • 通过spec.selector字段来指定这个RC管理哪些Pod。在上面的例子中,新建的RC会管理所有拥有app:nginxLabel的Pod。这样的spec.selector在Kubernetes中被称作Label Selector。

(二)、Label的定义

通常使用metadata.labels字段,来为对象添加label,label可以为多个,如:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    release: stable
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

上述的描述文件中为Nginx的pod添加了两个label,分别为:app: nginx和release: stable

2.1、常见的Label

一般来说,都会给pod或其它的资源定义多个lable以便于配置、部署等管理工作,通过多个label的设置,我们可以多维度的对pod或其它资源对象进行精细化管理,一些常用的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是自定义一些key/value对,可以根据需求进行设置

2.2、Label Selector(标签选择器)

带有label的对象创建好后,可以通过label selector来引用这些对象。 通常通过描述文件中的spec.selector字段来指定Label,从而为K8S寻找所有包含指定label的对象进行关联管理。 K8S目前支持两种类型的label selector标签选择器:

  • 基于等式的Selector(Equality-based)
  • 基于集合的Selector(Set-based)

RC只支持等式的selector,而RS两种都支持

2.2.1、基于等式的Selector(Equality-based)

上文中创建RC的例子中的使用的就是基于等式的Selector。基于等式的Selector通过等式类的表达式来进行筛选。例如:

  • app=nginx 选择所有Label中key为app,value为nginx的对象。
  • env!=dev 选择所有Label中key为env,value不等于dev的对象。

2.2.2、基于集合的Selector(Set-based)

基于集合的Selector通过集合操作的表达式来进行筛选。例如:

  • name in (redis-master, redis-slave) 选择所有Label中key为name,并且value为redis-master或redis-slave的对象。
  • env not in (dev) 选择所有Label中key为env,并且value不为dev的对象。

使用Label可以给对象创建一组或多组标签,Service,RC/RS等组件则通过Label Selector来定位需要管理的对象,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模型,使得对象能够精细分组,同时实现了集群的高可用性。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   23   0   0 redis用户
  TEZNKK3IfmPf   2024年05月31日   27   0   0 dataredis
  TEZNKK3IfmPf   2024年05月31日   23   0   0 awkredis
  TEZNKK3IfmPf   2024年04月19日   35   0   0 javarediskey
TEZNKK3IfmPf