CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition 代表一个应该在 API Server 上暴露的资源。其名称必须是 <.spec.name>.<.spec.group> 的格式。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata (ObjectMeta)
标准对象的元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (CustomResourceDefinitionSpec), 必需
spec 描述了用户希望资源如何呈现
status (CustomResourceDefinitionStatus)
status 指示了 CustomResourceDefinition 的实际状态
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec 描述了用户希望其资源如何呈现
group (字符串), 必需
group 是已定义定制资源的 API 组。定制资源在
/apis/\<group>/...
下提供服务。必须与 CustomResourceDefinition 的名称匹配(格式为\<names.plural>.\<group>
)。names (CustomResourceDefinitionNames), 必需
names 指定定制资源的资源和 Kind 名称。
CustomResourceDefinitionNames 表示为该定制资源定义提供服务的名称
names.kind (字符串), 必需
kind 是资源的序列化 Kind。通常为驼峰命名法 (CamelCase) 和单数形式。定制资源实例将在 API 调用中使用此值作为
kind
属性。names.plural (字符串), 必需
plural 是资源的服务端复数名称。定制资源在
/apis/\<group>/\<version>/.../\<plural>
下提供服务。必须与 CustomResourceDefinition 的名称匹配(格式为\<names.plural>.\<group>
)。必须全部为小写。names.categories ([]string)
原子性:合并期间将被替换
categories 是此定制资源所属的已分组资源的列表(例如,“all”)。此列表发布在 API Discovery 文档中,供客户端用于支持
kubectl get all
等调用。names.listKind (字符串)
listKind 是此资源的列表的序列化 Kind。默认为“
kind
List”。names.shortNames ([]string)
原子性:合并期间将被替换
shortNames 是资源的短名称,暴露在 API Discovery 文档中,供客户端用于支持
kubectl get \<shortname>
等调用。必须全部为小写。names.singular (字符串)
singular 是资源的单数名称。必须全部为小写。默认为小写形式的
kind
。
scope (字符串), 必需
scope 指示已定义的定制资源是集群范围还是命名空间范围。允许的值为
Cluster
和Namespaced
。versions ([]CustomResourceDefinitionVersion), 必需
原子性:合并期间将被替换
versions 是已定义定制资源的所有 API 版本的列表。版本名称用于计算服务版本在 API Discovery 中列出的顺序。如果版本字符串为“kube-like”,它将排在非“kube-like”版本字符串之前,后者按字典顺序排序。“Kube-like”版本以“v”开头,后跟一个数字(主版本号),然后可选地跟字符串“alpha”或“beta”以及另一个数字(次版本号)。这些版本首先按 GA > beta > alpha 排序(GA 是没有 beta 或 alpha 等后缀的版本),然后按主版本号、次版本号进行比较。一个排序后的版本列表示例:v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10。
CustomResourceDefinitionVersion 描述了 CRD 的一个版本。
versions.name (字符串), 必需
name 是版本名称,例如“v1”、“v2beta1”等。如果
served
为 true,定制资源将在/apis/\<group>/\<version>/...
下通过此版本提供服务。versions.served (布尔值), 必需
served 是一个标志,用于启用/禁用此版本是否通过 REST API 提供服务
versions.storage (布尔值), 必需
storage 指示持久化定制资源到存储时应使用此版本。必须且只能有一个版本的 storage=true。
versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
原子性:合并期间将被替换
additionalPrinterColumns 指定在 Table 输出中返回的额外列。详细信息请参阅 https://kubernetes.ac.cn/docs/reference/using-api/api-concepts/#receiving-resources-as-tables。如果未指定列,则使用显示定制资源年龄的单列。
CustomResourceColumnDefinition 指定用于服务端打印的列。
versions.additionalPrinterColumns.jsonPath (字符串), 必需
jsonPath 是一个简单的 JSON Path (即带数组表示法),用于针对每个定制资源进行评估以产生此列的值。
versions.additionalPrinterColumns.name (字符串), 必需
name 是该列的可读名称。
versions.additionalPrinterColumns.type (字符串), 必需
type 是该列的 OpenAPI 类型定义。详细信息请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types。
versions.additionalPrinterColumns.description (字符串)
description 是该列的可读描述。
versions.additionalPrinterColumns.format (字符串)
format 是该列的可选 OpenAPI 类型定义。将“name”格式应用于主要标识符列,以帮助客户端识别哪一列是资源名称。详细信息请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types。
versions.additionalPrinterColumns.priority (int32)
priority 是一个整数,定义了此列与其他列相比的相对重要性。较低的数字表示较高的优先级。在空间有限的情况下可能被省略的列应赋予大于 0 的优先级。
versions.deprecated (布尔值)
deprecated 指示此版本的定制资源 API 已弃用。当设置为 true 时,对此版本的 API 请求会在服务器响应中收到警告头。默认为 false。
versions.deprecationWarning (字符串)
deprecationWarning 覆盖返回给 API 客户端的默认警告。只能在
deprecated
为 true 时设置。默认警告表示此版本已弃用,并建议使用具有相同或更高稳定性的最新服务版本(如果存在)。versions.schema (CustomResourceValidation)
schema 描述了用于验证、修剪和默认处理此版本的定制资源的 schema。
CustomResourceValidation 是 CustomResources 的验证方法列表。
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema 是用于验证和修剪的 OpenAPI v3 schema。
versions.selectableFields ([]SelectableField)
原子性:合并期间将被替换
selectableFields 指定可用作字段选择器的字段路径。最多允许 8 个可选字段。详细信息请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/field-selectors
SelectableField 指定可用作字段选择器的字段的 JSON 路径。
versions.selectableFields.jsonPath (字符串), 必需
jsonPath 是一个简单的 JSON Path,用于针对每个定制资源进行评估以产生字段选择器值。仅允许不带数组表示法的 JSON Path。必须指向 string, boolean 或 integer 类型的字段。允许带有枚举值和带格式的字符串类型。如果 jsonPath 指向资源中不存在的字段,则 jsonPath 评估为空字符串。不得指向元数据字段。必需。
versions.subresources (CustomResourceSubresources)
subresources 指定此版本的已定义定制资源有哪些子资源。
CustomResourceSubresources 定义了 CustomResources 的 status 和 scale 子资源。
versions.subresources.scale (CustomResourceSubresourceScale)
scale 指示定制资源应提供一个
/scale
子资源,该子资源返回一个autoscaling/v1
Scale 对象。CustomResourceSubresourceScale 定义了如何为 CustomResources 提供 scale 子资源。
versions.subresources.scale.specReplicasPath (字符串), 必需
specReplicasPath 定义了定制资源内部与 Scale
spec.replicas
相对应的 JSON Path。仅允许不带数组表示法的 JSON Path。必须是.spec
下的 JSON Path。如果在定制资源中给定路径下没有值,则/scale
子资源在 GET 请求时将返回错误。versions.subresources.scale.statusReplicasPath (字符串), 必需
statusReplicasPath 定义了定制资源内部与 Scale
status.replicas
相对应的 JSON Path。仅允许不带数组表示法的 JSON Path。必须是.status
下的 JSON Path。如果在定制资源中给定路径下没有值,则/scale
子资源中的status.replicas
值默认为 0。versions.subresources.scale.labelSelectorPath (字符串)
labelSelectorPath 定义了定制资源内部与 Scale
status.selector
相对应的 JSON Path。仅允许不带数组表示法的 JSON Path。必须是.status
或.spec
下的 JSON Path。必须设置此字段才能与 HorizontalPodAutoscaler 一起工作。此 JSON Path 指向的字段必须是一个字符串字段(而不是复杂的选择器结构),其中包含一个序列化的标签选择器字符串。更多信息:https://kubernetes.ac.cn/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource 如果在定制资源中给定路径下没有值,则/scale
子资源中的status.selector
值默认为空字符串。
versions.subresources.status (CustomResourceSubresourceStatus)
status 指示定制资源应提供一个
/status
子资源。启用后:1. 对定制资源主端点的请求会忽略对象status
字段的更改。2. 对定制资源/status
子资源的请求会忽略对象除status
字段外的任何更改。CustomResourceSubresourceStatus 定义了如何为 CustomResources 提供 status 子资源。Status 由 CustomResource 内部的
.status
JSON Path 表示。设置后,* 将为定制资源暴露一个 /status 子资源 * 对 /status 子资源的 PUT 请求接收一个定制资源对象,并忽略除 status 字段外的任何更改 * 对定制资源的 PUT/POST/PATCH 请求忽略 status 字段的更改
conversion (CustomResourceConversion)
conversion 定义了 CRD 的转换设置。
CustomResourceConversion 描述了如何转换 CR 的不同版本。
conversion.strategy (字符串), 必需
strategy 指定了定制资源如何在版本之间转换。允许的值有: -
"None"
: 转换器仅更改 apiVersion,不触及定制资源中的任何其他字段。 -"Webhook"
: API Server 将调用外部 Webhook 进行转换。此选项需要附加信息。这要求 spec.preserveUnknownFields 为 false,且 spec.conversion.webhook 已设置。conversion.webhook (WebhookConversion)
webhook 描述了如何调用转换 Webhook。当
strategy
设置为"Webhook"
时必需。WebhookConversion 描述了如何调用转换 Webhook
conversion.webhook.conversionReviewVersions ([]string), 必需
原子性:合并期间将被替换
conversionReviewVersions 是 Webhook 期望的优先的
ConversionReview
版本有序列表。API Server 将使用列表中它支持的第一个版本。如果此列表中指定的版本都不受 API Server 支持,则定制资源的转换将失败。如果持久化的 Webhook 配置指定了允许的版本但不包含 API Server 已知的任何版本,则对 Webhook 的调用将失败。conversion.webhook.clientConfig (WebhookClientConfig)
clientConfig 是当 strategy 为
Webhook
时,如何调用 Webhook 的说明。WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息。
conversion.webhook.clientConfig.caBundle ([]byte)
caBundle 是一个 PEM 编码的 CA 包,用于验证 Webhook 的服务器证书。如果未指定,则使用 apiserver 上的系统信任根。
conversion.webhook.clientConfig.service (ServiceReference)
service 是对此 Webhook 对应的 Service 的引用。service 或 url 必须指定一个。
如果 Webhook 在集群内部运行,则应使用
service
。ServiceReference 包含对 Service.legacy.k8s.io 的引用
conversion.webhook.clientConfig.service.name (字符串), 必需
name 是 Service 的名称。必需
conversion.webhook.clientConfig.service.namespace (字符串), 必需
namespace 是 Service 的命名空间。必需
conversion.webhook.clientConfig.service.path (字符串)
path 是 Webhook 将被联系的可选 URL 路径。
conversion.webhook.clientConfig.service.port (int32)
port 是 Webhook 将被联系的可选 Service 端口。
port
应该是一个有效的端口号(包含 1-65535)。为了向后兼容,默认为 443。
conversion.webhook.clientConfig.url (字符串)
url 以标准 URL 形式(
scheme://host:port/path
)给出 Webhook 的位置。必须且只能指定url
或service
中的一个。host
不应指向集群中运行的 Service;请改用service
字段。在某些 apiserver 中(例如,kube-apiserver
不能解析集群内部 DNS,因为这违反了分层原则),host
可能通过外部 DNS 解析。host
也可以是 IP 地址。请注意,使用
localhost
或127.0.0.1
作为host
是有风险的,除非您非常谨慎地在所有运行 apiserver 且可能需要调用此 Webhook 的主机上运行此 Webhook。此类安装可能不可移植,即不容易在新的集群中启动。方案 (scheme) 必须是“https”;URL 必须以“https://”开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。您可以使用路径向 Webhook 传递任意字符串,例如集群标识符。
不允许尝试使用用户或基本认证,例如 "user:password@"。不允许使用片段 (“#...”) 和查询参数 (“?...)。
preserveUnknownFields (布尔值)
preserveUnknownFields 指示在持久化到存储时,应保留 OpenAPI schema 中未指定的对象字段。apiVersion、kind、metadata 和 metadata 中已知字段总是保留。此字段已弃用,建议在
spec.versions[*].schema.openAPIV3Schema
中将x-preserve-unknown-fields
设置为 true 来代替。详细信息请参阅 https://kubernetes.ac.cn/docs/tasks/extend-kubernetes/custom-resource-definitions/#field-pruning。
JSONSchemaProps
JSONSchemaProps 遵循 JSON-Schema 规范草案 4 (https://json-schema.fullstack.org.cn/)。
$ref (字符串)
$schema (字符串)
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 代表 JSONSchemaProps 或布尔值。对于布尔属性,默认为 true。
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 代表 JSONSchemaProps 或布尔值。对于布尔属性,默认为 true。
allOf ([]JSONSchemaProps)
原子性:合并期间将被替换
anyOf ([]JSONSchemaProps)
原子性:合并期间将被替换
default (JSON)
default 是未定义对象字段的默认值。默认值设置是 CustomResourceDefaulting 功能门控下的一个 beta 特性。默认值设置要求 spec.preserveUnknownFields 为 false。
JSON 代表任何有效的 JSON 值。支持以下类型:bool, int64, float64, string, []interface{}, map[string]interface{} 和 nil。
definitions (map[string]JSONSchemaProps)
dependencies (map[string]JSONSchemaPropsOrStringArray)
description (字符串)
enum ([]JSON)
原子性:合并期间将被替换
JSON 代表任何有效的 JSON 值。支持以下类型:bool, int64, float64, string, []interface{}, map[string]interface{} 和 nil。
example (JSON)
JSON 代表任何有效的 JSON 值。支持以下类型:bool, int64, float64, string, []interface{}, map[string]interface{} 和 nil。
exclusiveMaximum (布尔值)
exclusiveMinimum (布尔值)
externalDocs (ExternalDocumentation)
ExternalDocumentation 允许引用外部资源以获取扩展文档。
externalDocs.description (字符串)
externalDocs.url (字符串)
format (字符串)
format 是一个 OpenAPI v3 格式字符串。未知格式将被忽略。验证以下格式:
- bsonobjectid: 一个 bson 对象 ID,即一个 24 个字符的十六进制字符串 - uri: Golang net/url.ParseRequestURI 解析的 URI - email: Golang net/mail.ParseAddress 解析的电子邮件地址 - hostname: Internet 主机名的有效表示形式,如 RFC 1034 第 3.1 节 [RFC1034] 所定义。 - ipv4: Golang net.ParseIP 解析的 IPv4 IP - ipv6: Golang net.ParseIP 解析的 IPv6 IP - cidr: Golang net.ParseCIDR 解析的 CIDR - mac: Golang net.ParseMAC 解析的 MAC 地址 - uuid: 允许大写的 UUID,由 regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$ 定义 - uuid3: 允许大写的 UUID3,由 regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$ 定义 - uuid4: 允许大写的 UUID4,由 regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ 定义 - uuid5: 允许大写的 UUID5,由 regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ 定义 - isbn: ISBN10 或 ISBN13 数字字符串,如 "0321751043" 或 "978-0321751041" - isbn10: ISBN10 数字字符串,如 "0321751043" - isbn13: ISBN13 数字字符串,如 "978-0321751041" - creditcard: 信用卡号,由 regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$ 定义,可混合非数字字符 - ssn: U.S. 社会安全号码,遵循 regex ^\d{3}[- ]?\d{2}[- ]?\d{4}$ - hexcolor: 十六进制颜色代码,如 "#FFFFFF",遵循 regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ - rgbcolor: RGB 颜色代码,如 rgb(255,255,255) - byte: base64 编码的二进制数据 - password: 任何类型的字符串 - date: 日期字符串,如 "2006-01-02",由 RFC3339 中的 full-date 定义 - duration: 持续时间字符串,如 "22 ns",由 Golang time.ParseDuration 解析或与 Scala 持续时间格式兼容 - datetime: 日期时间字符串,如 "2014-12-15T19:30:20.000Z",由 RFC3339 中的 date-time 定义。
id (字符串)
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray 表示一个可以是 JSONSchemaProps 或 JSONSchemaProps 数组的值。主要用于序列化目的。
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps)
nullable (布尔值)
oneOf ([]JSONSchemaProps)
原子性:合并期间将被替换
pattern (字符串)
patternProperties (map[string]JSONSchemaProps)
properties (map[string]JSONSchemaProps)
required ([]string)
原子性:合并期间将被替换
title (string)
type (string)
uniqueItems (boolean)
x-kubernetes-embedded-resource (boolean)
x-kubernetes-embedded-resource 定义了该值是一个嵌入式的 Kubernetes runtime.Object,带有 TypeMeta 和 ObjectMeta。类型必须是 object。允许进一步限制嵌入的对象。kind、apiVersion 和 metadata 会自动验证。x-kubernetes-preserve-unknown-fields 可以为 true,但如果对象完全指定(包括 kind、apiVersion、metadata),则不必为 true。
x-kubernetes-int-or-string (boolean)
x-kubernetes-int-or-string 指定该值是整数或字符串。如果为 true,则允许空类型,并且如果遵循以下模式之一,则允许将 type 作为 anyOf 的子项
- anyOf
- type: integer
- type: string
- allOf
- anyOf
- type: integer
- type: string
- ... 零个或多个
- anyOf
- anyOf
x-kubernetes-list-map-keys ([]string)
原子性:合并期间将被替换
x-kubernetes-list-map-keys 通过指定用作 map 索引的键,使用 x-kubernetes-list-type
map
标注一个数组。此标记只能用于已将 "x-kubernetes-list-type" 扩展设置为 "map" 的列表。此外,为此属性指定的值必须是子结构的标量类型字段(不支持嵌套)。
指定的属性必须是必需的或具有默认值,以确保所有列表项都存在这些属性。
x-kubernetes-list-type (string)
x-kubernetes-list-type 标注一个数组以进一步描述其拓扑。此扩展只能用于列表,可能有 3 个可能的值
atomic
:列表被视为单个实体,类似于标量。原子列表更新时会被完全替换。此扩展可用于任何类型的列表(struct、scalar 等)。set
:集合 (`set`) 是不能有多个相同值项的列表。每个值必须是标量、具有 x-kubernetes-map-typeatomic
的对象或具有 x-kubernetes-list-typeatomic
的数组。map
:这些列表类似于 map,因为它们的元素具有用于标识它们的非索引键。合并时保留顺序。此 map 标记只能用于元素类型为 object 的列表。数组默认为 atomic。
x-kubernetes-map-type (string)
x-kubernetes-map-type 标注一个对象以进一步描述其拓扑。此扩展只能在 type 为 object 时使用,可能有 2 个可能的值
granular
:这些 map 是实际的 map(键值对),每个字段彼此独立(它们可以由不同的参与者操作)。这是所有 map 的默认行为。atomic
:该列表被视为单个实体,类似于标量。原子 map 更新时会被完全替换。
x-kubernetes-preserve-unknown-fields (boolean)
x-kubernetes-preserve-unknown-fields 阻止 API 服务器解码步骤修剪验证 schema 中未指定的字段。这会递归地影响字段,但如果在 schema 中指定了嵌套属性或 additionalProperties,则会切换回正常的修剪行为。它可以是 true 或 undefined。False 是禁止的。
x-kubernetes-validations ([]ValidationRule)
Patch 策略:按键
rule
合并Map:合并时将保留键 rule 的唯一值
x-kubernetes-validations 描述了以 CEL 表达式语言编写的验证规则列表。
ValidationRule 描述了以 CEL 表达式语言编写的验证规则。
x-kubernetes-validations.rule (string),必需
Rule 表示将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec Rule 的作用域为 schema 中 x-kubernetes-validations 扩展的位置。CEL 表达式中的
self
变量绑定到作用域值。示例:- 规则作用域为具有 status 子资源的资源的根:{"rule": "self.status.actual <= self.spec.maxDesired"}如果 Rule 作用域为具有属性的对象,则可以通过
self.field
选择对象的 Accessible 属性,并通过has(self.field)
检查字段存在性。具有 Null 值的字段在 CEL 表达式中被视为不存在的字段。如果 Rule 作用域为具有 additionalProperties(即 map)的对象,则可以通过self[mapKey]
访问 map 的值,可以通过mapKey in self
检查 map 包含性,并且 map 的所有条目都可以通过 CEL 宏和函数(如self.all(...)
)访问。如果 Rule 作用域为数组,则可以通过self[i]
以及通过宏和函数访问数组元素。如果 Rule 作用域为标量,则self
绑定到标量值。示例:- 规则作用域为对象 map:{"rule": "self.components['Widget'].priority < 10"} - 规则作用域为整数列表:{"rule": "self.values.all(value, value >= 0 && value < 100)"} - 规则作用域为字符串值:{"rule": "self.startsWith('kube')"}apiVersion
、kind
、metadata.name
和metadata.generateName
始终可以从对象的根以及任何带有 x-kubernetes-embedded-resource 标注的对象访问。不可访问其他 metadata 属性。通过 x-kubernetes-preserve-unknown-fields 在自定义资源中保留的未知数据在 CEL 表达式中不可访问。这包括:- 对象 schema 带有 x-kubernetes-preserve-unknown-fields 时保留的未知字段值。- 属性 schema 为“未知类型”的对象属性。“未知类型”递归定义如下
- 没有 type 且 x-kubernetes-preserve-unknown-fields 设置为 true 的 schema
- items schema 为“未知类型”的数组
- additionalProperties schema 为“未知类型”的对象
只有 [a-zA-Z_.-/][a-zA-Z0-9_.-/]* 形式的属性名可访问。在表达式中访问时,可访问的属性名根据以下规则进行转义:- '' 转义为 'underscores' - '.' 转义为 'dot' - '-' 转义为 'dash' - '/' 转义为 'slash' - 与 CEL 保留关键字完全匹配的属性名转义为 '{keyword}__"。关键字包括:"true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", "import", "let", "loop", "package", "namespace", "return"。示例
- 访问名为 "namespace" 的属性的规则:{"rule": "self.namespace > 0"}
- 访问名为 "x-prop" 的属性的规则:{"rule": "self.x__dash__prop > 0"}
- 访问名为 "redact__d" 的属性的规则:{"rule": "self.redact__underscores__d > 0"}
x-kubernetes-list-type 为 'set' 或 'map' 的数组的相等性检查忽略元素顺序,即 [1, 2] == [2, 1]。x-kubernetes-list-type 的数组的连接操作使用列表类型的语义
- 'set':
X + Y
执行并集操作,保留X
中所有元素的数组位置,并追加Y
中非交叉的元素,保留其部分顺序。 - 'map':
X + Y
执行合并操作,保留X
中所有键的数组位置,但在X
和Y
的键集相交时,值会被Y
中的值覆盖。Y
中具有非交叉键的元素会被追加,保留其部分顺序。
如果
rule
使用了oldSelf
变量,则隐式地是一个transition rule
。默认情况下,
oldSelf
变量与self
类型相同。当optionalOldSelf
为 true 时,oldSelf
变量是一个 CEL optional 变量,其 value() 与self
类型相同。有关详细信息,请参阅optionalOldSelf
字段的文档。过渡规则默认仅在 UPDATE 请求时应用,如果找不到旧值则跳过。通过将
optionalOldSelf
设置为 true,可以选择无条件评估过渡规则。x-kubernetes-validations.fieldPath (string)
fieldPath 表示验证失败时返回的字段路径。它必须是一个相对 JSON 路径(即带有数组表示法),作用域为 schema 中此 x-kubernetes-validations 扩展的位置,并引用现有字段。例如,当验证检查 map
testMap
下的特定属性foo
时,fieldPath 可以设置为.testMap.foo
如果验证检查两个列表必须具有唯一属性,fieldPath 可以设置为其中任一列表:例如.testList
它不支持列表的数字索引。目前它支持子操作来引用现有字段。有关更多信息,请参阅 Kubernetes 中的 JSONPath 支持。不支持数组的数字索引。对于包含特殊字符的字段名,使用['specialName']
来引用字段名。例如,对于出现在列表testList
中的属性foo.34$
,fieldPath 可以设置为.testList['foo.34$']
x-kubernetes-validations.message (string)
message 表示验证失败时显示的消息。如果 Rule 包含换行符,则 message 是必需的。message 不得包含换行符。如果未设置,则消息为 "failed rule: {Rule}"。例如,“必须是主机与 spec.host 匹配的 URL”
x-kubernetes-validations.messageExpression (string)
messageExpression 声明一个 CEL 表达式,该表达式在规则失败时评估为返回的验证失败消息。由于 messageExpression 用作失败消息,它必须评估为字符串。如果规则上同时存在 message 和 messageExpression,则在验证失败时将使用 messageExpression。如果 messageExpression 导致运行时错误,则会记录运行时错误,并像未设置 messageExpression 字段一样生成验证失败消息。如果 messageExpression 评估为空字符串、仅包含空格的字符串或包含换行符的字符串,则也会像未设置 messageExpression 字段一样生成验证失败消息,并且会记录 messageExpression 生成了空字符串/仅包含空格的字符串/包含换行符的字符串的事实。messageExpression 可以访问与 rule 相同的所有变量;唯一的区别是返回类型。示例:"x 必须小于最大值 ("+string(self.max)+")"
x-kubernetes-validations.optionalOldSelf (boolean)
optionalOldSelf 用于选择在对象首次创建时或旧对象缺少值时也评估过渡规则。
启用后,
oldSelf
将是一个 CEL optional 变量,如果不存在旧值或对象最初创建时,其值将为None
。您可以使用
oldSelf.hasValue()
检查 oldSelf 的存在,并在检查后使用oldSelf.value()
解包它。有关 Optional 类型的更多信息,请查阅 CEL 文档:https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypes除非
rule
中使用了oldSelf
,否则不得设置。x-kubernetes-validations.reason (string)
reason 提供一个机器可读的验证失败原因,在请求未能通过此验证规则时返回给调用者。返回给调用者的 HTTP 状态码将与第一个失败的验证规则的原因匹配。当前支持的原因包括:"FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate"。如果未设置,默认为 "FieldValueInvalid"。未来添加的所有原因在客户端读取此值时必须被接受,未知原因应被视为 FieldValueInvalid。
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus 指示 CustomResourceDefinition 的状态
acceptedNames (CustomResourceDefinitionNames)
acceptedNames 是实际用于服务发现的名称。它们可能与 spec 中的名称不同。
CustomResourceDefinitionNames 表示为该定制资源定义提供服务的名称
acceptedNames.kind (string),必需
kind 是资源的序列化 Kind。通常为驼峰命名法 (CamelCase) 和单数形式。定制资源实例将在 API 调用中使用此值作为
kind
属性。acceptedNames.plural (string),必需
plural 是资源的服务端复数名称。定制资源在
/apis/\<group>/\<version>/.../\<plural>
下提供服务。必须与 CustomResourceDefinition 的名称匹配(格式为\<names.plural>.\<group>
)。必须全部为小写。acceptedNames.categories ([]string)
原子性:合并期间将被替换
categories 是此定制资源所属的已分组资源的列表(例如,“all”)。此列表发布在 API Discovery 文档中,供客户端用于支持
kubectl get all
等调用。acceptedNames.listKind (string)
listKind 是此资源的列表的序列化 Kind。默认为“
kind
List”。acceptedNames.shortNames ([]string)
原子性:合并期间将被替换
shortNames 是资源的短名称,暴露在 API Discovery 文档中,供客户端用于支持
kubectl get \<shortname>
等调用。必须全部为小写。acceptedNames.singular (string)
singular 是资源的单数名称。必须全部为小写。默认为小写形式的
kind
。
conditions ([]CustomResourceDefinitionCondition)
Map:合并时将保留键 type 的唯一值
conditions 指示 CustomResourceDefinition 特定方面的状态
CustomResourceDefinitionCondition 包含此 pod 当前条件的详细信息。
conditions.status (string),必需
status 是条件的 status。可以是 True、False、Unknown。
conditions.type (string),必需
type 是条件的类型。类型包括 Established、NamesAccepted 和 Terminating。
conditions.lastTransitionTime (Time)
lastTransitionTime 条件上次从一个 status 过渡到另一个 status 的时间。
Time 是 time.Time 的包装器,支持正确地序列化为 YAML 和 JSON。time 包提供的许多工厂方法都有相应的包装器。
conditions.message (string)
message 是人类可读的消息,指示上次过渡的详细信息。
conditions.reason (string)
reason 是条件上次过渡的唯一、单个单词的 CamelCase 原因。
storedVersions ([]string)
原子性:合并期间将被替换
storedVersions 列出所有曾经持久化的 CustomResources 版本。跟踪这些版本为 etcd 中存储的版本提供了迁移路径。该字段是可变的,因此迁移控制器可以完成向另一个版本的迁移(确保存储中没有留下旧对象),然后从该列表中删除其余版本。当版本在此列表中存在时,不能从
spec.versions
中删除。
CustomResourceDefinitionList
CustomResourceDefinitionList 是 CustomResourceDefinition 对象的列表。
items ([]CustomResourceDefinition),必需
items 列出单个 CustomResourceDefinition 对象
apiVersion (string)
APIVersion 定义此对象表示的版本化 schema。服务器应将可识别的 schema 转换为最新的内部值,并可能拒绝不可识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind 是一个字符串值,表示此对象表示的 REST 资源。服务器可以从客户端提交请求的端点推断出此值。不可更新。使用 CamelCase。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
标准对象的元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
操作
get
读取指定的 CustomResourceDefinition
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
401:未授权
get
读取指定 CustomResourceDefinition 的 status
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
401:未授权
list
列出或监听 kind 为 CustomResourceDefinition 的对象
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
allowWatchBookmarks (在 query 中):boolean
continue (在 query 中):string
fieldSelector (在 query 中):string
labelSelector (在 query 中):string
limit (在 query 中):integer
pretty (在 query 中):string
resourceVersion (在 query 中):string
resourceVersionMatch (在 query 中):string
sendInitialEvents (在 query 中):boolean
timeoutSeconds (在 query 中):integer
watch (在 query 中):boolean
响应
200 (CustomResourceDefinitionList):OK
401:未授权
create
创建一个 CustomResourceDefinition
HTTP 请求
POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
body:CustomResourceDefinition,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
201 (CustomResourceDefinition):已创建
202 (CustomResourceDefinition):已接受
401:未授权
update
替换指定的 CustomResourceDefinition
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
body:CustomResourceDefinition,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
201 (CustomResourceDefinition):已创建
401:未授权
update
替换指定 CustomResourceDefinition 的 status
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
body:CustomResourceDefinition,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
201 (CustomResourceDefinition):已创建
401:未授权
patch
部分更新指定的 CustomResourceDefinition
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
body:Patch,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
force (在 query 中):boolean
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
201 (CustomResourceDefinition):已创建
401:未授权
patch
部分更新指定 CustomResourceDefinition 的 status
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
body:Patch,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
force (在 query 中):boolean
pretty (在 query 中):string
响应
200 (CustomResourceDefinition):OK
201 (CustomResourceDefinition):已创建
401:未授权
delete
删除一个 CustomResourceDefinition
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (在 path 中):string,必需
CustomResourceDefinition 的名称
body:DeleteOptions
dryRun (在 query 中):string
gracePeriodSeconds (在 query 中):integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中):boolean
pretty (在 query 中):string
propagationPolicy (在 query 中):string
响应
200 (Status):OK
202 (Status):已接受
401:未授权
deletecollection
删除 CustomResourceDefinition 集合
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
body:DeleteOptions
continue (在 query 中):string
dryRun (在 query 中):string
fieldSelector (在 query 中):string
gracePeriodSeconds (在 query 中):integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中):boolean
labelSelector (在 query 中):string
limit (在 query 中):integer
pretty (在 query 中):string
propagationPolicy (在 query 中):string
resourceVersion (在 query 中):string
resourceVersionMatch (在 query 中):string
sendInitialEvents (在 query 中):boolean
timeoutSeconds (在 query 中):integer
响应
200 (Status):OK
401:未授权
此页面是自动生成的。
如果您打算报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。