所属技术领域:
K8s
|名词定义|
Annotations(注解) 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如 deployment 使用 annotations 来记录 rolling update 的状态。
|技术特点|
将metadata附加到对象
您可以使用标签或注释将元数据附加到Kubernetes对象。标签可用于选择对象并查找满足特定条件的对象的集合。相反,注释不用于标识和选择对象。批注中的元数据可以是大小的,结构化的或非结构化的,并且可以包含标签不允许的字符。
像标签一样的注释是键/值映射:
"metadata": {
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
}
以下是一些可以记录在注释中的信息示例:
由声明性配置层管理的字段。将这些字段附加为注释可以将它们与客户端或服务器设置的默认值,自动生成的字段以及通过自动调整大小或自动缩放系统设置的字段区分开。
生成,发布或映像信息,例如时间戳,发行ID,git分支,PR号,图像哈希和注册表地址。
指向日志,监视,分析或审核存储库的指针。
可用于调试目的的客户端库或工具信息:例如,名称,版本和内部版本信息。
用户或工具/系统出处信息,例如来自其他生态系统组件的相关对象的URL。
轻量级推出工具元数据:例如,配置或检查点。
负责人的电话或寻呼机号码,或指定可在何处找到该信息的目录条目,例如团队网站。
从最终用户到实现的指令,以修改行为或使用非标准功能。
除了使用批注,您还可以将这种类型的信息存储在外部数据库或目录中,但这将使制作共享的客户端库和用于部署,管理,自省等工具变得更加困难。
语法和字符集
注释是键/值对。有效的注释键分为两部分:可选的前缀和名称,用斜杠(/)分隔。名称段是必需的,并且必须为63个字符或更少,以字母数字字符([a-z0-9A-Z])开头和结尾,并以短划线(-),下划线(_),点(.)和之间的字母数字组成。前缀是可选的。如果指定,则前缀必须是DNS子域:一系列由点(.)分隔的DNS标签,总计不超过253个字符,后跟斜杠(/)。
如果省略了前缀,则假定注释键对用户是私有的。自动化系统组件(例如kube-scheduler,kube-controller-manager,kube-apiserver,kubectl,或其他第三方自动化),这说明添加到最终用户的对象都必须指定一个前缀。
在kubernetes.io/和k8s.io/前缀保留给Kubernetes核心组件。
例如,这是带有注释的Pod的配置文件imageregistry: https://hub.docker.com/:
apiVersion: v1
kind: Pod
metadata:
name: annotations-demo
annotations:
imageregistry: "https://hub.docker.com/"
spec:
containers:
-
name: nginx
image: nginx:1.7.9
ports:- containerPort: 80
annotations 的例子
- containerPort: 80
一般是系统或者工具用来存储资源的非标示性信息,可以用来扩展资源的 spec/status 的描述,这里给了几个 annotations 的例子:
第一个例子,存储了阿里云负载器的证书 ID,我们可以看到 annotations 一样可以拥有域名的前缀,标注中也可以包含版本信息。第二个 annotation存储了 nginx 接入层的配置信息,我们可以看到 annotations 中包括“,”这样无法出现在 label 中的特殊字符。第三个 annotations 一般可以在 kubectl apply 命令行操作后的资源中看到, annotation 值是一个结构化的数据,实际上是一个 json 串,标记了上一次 kubectl 操作的资源的 json 的描述。
|资料来源|
名词定义:https://www.cnblogs.com/wplvqj/p/10535060.html
技术特点:https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/