• 【云原生 • Kubernetes】kubernetes 核心技术 - Label 和 Selector


    在这里插入图片描述


    当 Kubernetes 对系统中任何 API 对象(如 Pod 和节点)进行 “分组” 时,会为其添加 Label(键值对格式 key=value)用以精准的选择对应的 API 对象。而 Selector 则是针对匹配对象的查询方法。总结起来二者的分工就是:

    • Label 用于给某个资源定义标识
    • Label Selector 用于查询和筛选拥有某些标签的资源对象

    1. Label 概述

    Label(标签) 是 Kubernetes 的一个核心概念。一个 Label 就是一个 key:value 的键值对被关联到对象上,其中 key 与 value 由用户自己指定。

    "labels": {
      "key1" : "value1",
      "key2" : "value2"
    }
    
    • 1
    • 2
    • 3
    • 4

    标签的使用使得我们能标识出对象的一些特殊特点,比如说标识了某个 Pod,那么用户就可以一眼看出这个 Pod 是干什么的。

    标签可以用来划分特定组的对象,可以在创建一个对象的时候直接给与,也可以在后期动态添加或删除,每一个对象可以拥有多个标签,但是 key 值必须是唯一的。Label 也可以附加到各种资源对象上,如 Node、Pod、Service、RC,一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源对象上。

    在这里插入图片描述

    2. Label 语法规则

    语法格式:key: value(键值对)

    Key:

    • 不超过 63 个字符
    • 支持使用前缀,前缀必须是 DNS 子域,不超过253个字符。
    • 系统化组件创建的 label 必须指定前缀。kubernetes.io 和 k8s.io 由 kubernetes 保留
    • 格式:[A-Za-z0-9][A-Za-z0-9_-.]

    value:

    • 不超过 63 个字符
    • 格式:[A-Za-z0-9][A-Za-z0-9_-.]

    3. Label 的定义

    Label 最常见的用法是使用 metadata.labels 字段来为对象定义 Label,使用 spec.selector 字段来引用对象。如下:

    #添加Label
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
    	app: new_nginx #定义Label:new_nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    #引用label
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
    	app: new_nginx #引用刚刚定义的Label:new_nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Label 附加到 Kubernetes 集群中的各种资源对象上,目的就是对这些资源对象进行分组管理,而分组管理的核心正是 Label Selector。需要知道 Label 与 Label Selector 都不能单独定义,必须附加在一些资源对象的定义文件上,一般是附加在 RC 和 Service 的资源定义文件中的。

    4. Label 常用命令

    • 查看标签
    kubectl get pod nginx -n dev --show-labels
    
    • 1
    • 为 Pod 资源打标签
    #为名为nginx的pod添加label aaa=bbb
    kubectl label pod nginx aaa=bbb -n dev
    
    • 1
    • 2
    • 为 Pod 资源更新标签
    #将名为nginx的pod的label修改为ccc=ddd,且覆盖现有的value
    kubectl label pod nginx ccc=ddd -n dev --overwrite
    
    • 1
    • 2
    • 筛选标签
    kubectl get pod -n dev -l eee=fff --show-labels
    
    • 1
    • 删除标签
    #删除nginx中名为aaa的label
    kubectl label pod nginx aaa- -n dev
    
    • 1
    • 2

    本章学习目标:

    • 掌握 Kubernetes 中 Label 和 Selector 的相关概念与使用方法。
  • 相关阅读:
    【Python机器学习】零基础掌握DBSCAN聚类
    企业架构LNMP学习笔记45
    can中继 智能CAN总线隔离中继器集线器CANBridge-300/400
    zabbix中文乱码解决方法
    图像处理02 matlab中NSCT的使用
    react 可视化编辑器1
    Spring Cloud OpenFeign
    牛客小白月赛81
    模板语法2
    HQChart使用教程30-K线图如何对接第3方数据36--散点图
  • 原文地址:https://blog.csdn.net/weixin_53072519/article/details/126347193