当前位置: 首页 > java >正文

Kubernetes 标签和注解

1. 标签

标签(Labels) 是附加到 Kubernetes 对象(比如 Pod)上的键值对。
标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。

有效标签值:

  • 必须为 63 个字符或更少(可以为空)
  • 除非标签值为空,必须以字母数字字符([a-z0-9A-Z])开头和结尾
  • 包含破折号(-)、下划线(_)、点(.)和字母或数字

例如,下面定义了 environment: production 和 app: nginx 两个标签

apiVersion: v1
kind: Pod
metadata:name: label-demolabels:environment: productionapp: nginx
spec:...

1.1 标签选择符

所谓标签选择符(Label selectors,官方文档翻译为“标签选择算符”)就是如何通过过滤标签来识别一组对象。标签选择符是 Kubernetes 中的核心分组原语。
API 目前支持两种类型的选择符:基于等值的和基于集合的。可以由逗号分隔的多个需求组成。

基于等值的需求

可对标签的通过=、== 和 != 三种运算符进行筛选,前两个表示相等(并且是同义词),后者表示不相等。、
例如,environment=production,tier!=frontend,很简单,不多说。

基于集合的需求

支持对标签的使用三种操作符:in、notin 和 exists,程序员都能看懂,不多说。
例如,environment in (production, qa)tier notin (frontend, backend)

1.2 kubectl 中使用

使用kubectl label --help 可查看查询帮助,-L-l, --selector是用于标签的可选项。

新增和更新标签

新增和更新一个对象的标签,都使用kubectl label命令,如果原标签不存在则会新增。
例如,对名为 nginx-test 的 Pod 新增一个 tier=backend 标签:

kubectl label pods nginx-test tier=backend

如果原标签已存在,要更新则要加一个--overwrite可选项才会更新,否则会报错。例如,要更新名为 nginx-test 的 Pod 的 env 标签值为 prd:

kubectl label pods nginx-test --overwrite env=prd

查看标签值

使用kubectl get --help 查看帮助。
要在查看资源的同时展示标签,可添加--show-labels可选项。例如,查看名为 nginx-test 的 Pod(可以不指定查所有 Pod)包括标签的信息:

kubectl get pod nginx-test --show-labels

要单独查看某一资源的所有标签值,使用kubectl label命令,加上--list=true可选项。例如,要查看名为 nginx-test 的标签:

kubectl label pods nginx-test --list=true

其结果可能为:

app=nginx-test
env=uat

要查看某一类或某一个指定资源的指定标签值,可用-L可选项。例如,要查看所有 pod 的 app、env 标签的值:

kubectl get pods -Lapp -Lenv

要查看名为 nginx-test 的 Pod 的 app、env 标签值:

kubectl get pods nginx-test -Lapp -Lenv

使用标签过滤查询

-l, --selector='':Selector (label query) to filter on, supports '=', '==', '!=', 'in', 'notin'.(e.g. -lkey1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified labelconstraints.

即,标签是使用-l--selector可选项来接受标签选择符(注意,区分大小写),例如:

kubectl get pods -l app=nginx-test,env=uat

kubectl get pods -selector nginx-test,env=uat

删除标签

在标签的后加-即表示删除。例如,要删除 nginx-test 的 tier 标签:

kubectl label pods nginx-test tier-

要删除所有 Pod 的标签,添加个--all可选项:

kubectl label pods tier-

2. 注解

注解可以为对象附加任意的非标识的元数据,客户端程序(例如工具和库)能够获取这些元数据信息。
注解和标签本质都是“键值对”,都可以将元数据附加到 Kubernetes 对象,但注解不用于标识和选择对象。 注解中的元数据,可以很小,也可以很大,可以是结构化的,也可以是非结构化的(例如可以是 json数据),能够包含标签不允许的字符。 可以在同一对象的元数据中同时使用标签和注解。

官方文档对注解的使用场景说明:

  • 由声明性配置所管理的字段。 将这些字段附加为注解,能够将它们与客户端或服务端设置的默认值、 自动生成的字段以及通过自动调整大小或自动伸缩系统设置的字段区分开来。
  • 构建、发布或镜像信息(如时间戳、发布 ID、Git 分支、PR 数量、镜像哈希、仓库地址)。
  • 指向日志记录、监控、分析或审计仓库的指针。
  • 可用于调试目的的客户端库或工具信息:例如,名称、版本和构建信息。
  • 用户或者工具/系统的来源信息,例如来自其他生态系统组件的相关对象的 URL。
  • 轻量级上线工具的元数据信息:例如,配置或检查点。
  • 负责人员的电话或呼机号码,或指定在何处可以找到该信息的目录条目,如团队网站。
  • 从用户到最终运行的指令,以修改行为或使用非标准功能。

可以看到,注解主要用来标识对象的非功能性信息,该信息可用来更全面地了解对象,而不会对对象的行为起作用
例如,给 Pod 对象添加镜像源地址注解 metadata.annotations.imageregistry:

apiVersion: v1
kind: Pod
metadata:name: annotations-demoannotations:imageregistry: "https://hub.docker.com/"
spec:...

新增和更新注解

使用kubectl annotate --help查看文档帮助。
使用kubectl annotate命令给对象添加注解。例如要给一个名为 nginx-deploy 的 deployment 添加注解 desc:

kubectl annotate deploy nginx-deploy desc=‘这是一个测试注解’

如果该注解原来不存在则新增,如果已经存在且最新的值与原来的值相同,则不更新,如果最新值与原来的值不同,则会报错;如果要覆盖更新原来的值,则要加--overwrite可选项:

kubectl annotate deploy nginx-deploy --overwrite desc=‘这是一个新测试注解’

查询注解

查询一个对象的所有注解,需要加上--list可选项。例如,查询 nginx-deploy 注解:

kubectl annotate deploy nginx-deploy --list

删除注解

同删除标签一样,只需要在要删除的注解键后面加-即可。例如,要删掉 nginx-deploy 的 desc 注解:

kubectl annotate deploy nginx-deploy desc-

参考

[1] Kubernetes 文档:标签和选择算符
[2] Kubernetes 文档:注解

http://www.xdnf.cn/news/5991.html

相关文章:

  • 【软件测试】第一章·软件测试概述
  • 行动算子(知识)
  • GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)
  • 服务器中存储空间不足该怎么办?
  • IP协议的特性
  • 大白话解释联邦学习
  • skolelinux系统详解
  • Proxmox VE 8.4.0显卡直通完整指南:NVIDIA Tesla T4 实战
  • 什么是懒加载?
  • 06_java常见集合类底层实现
  • unity 制作某个旋转动画
  • 分割一切(SAM) 论文阅读:Segment Anything
  • 用vue和go实现登录加密
  • 科研领域开源情报应用:从全球信息网络到创新决策
  • 微机原理|| 流水灯实验
  • 两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
  • 【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
  • Apifox使用方法
  • Xianyu AutoAgent,AI闲鱼客服机器人
  • 无人机信号监测系统技术解析
  • codeforcesE. Anna and the Valentine‘s Day Gift
  • 在 STM32 上使用 register 关键字
  • 部署大模型:解决ollama.service: Failed with result ‘exit-code‘的问题
  • ROS多机集群组网通信(四)——Ubuntu 20.04图形化配置 Ad-Hoc组网通信指南
  • element-plus自动导入插件
  • 使用DevEco Studio性能分析工具高效解决鸿蒙原生应用内存问题
  • python的命令库Envoy
  • 【树莓派4B】对树莓派4B进行换源
  • 关于索引的使用
  • Fiori学习专题四十一:表单控件