自定义资源定义

CustomResourceDefinition 表示应该在 API 服务器上公开的资源。

apiVersion: apiextensions.k8s.io/v1

import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"

自定义资源定义

CustomResourceDefinition 表示应该在 API 服务器上公开的资源。其名称必须采用 <.spec.name>.<.spec.group> 格式。


CustomResourceDefinitionSpec

CustomResourceDefinitionSpec 描述了用户希望其资源如何显示


  • group (string), 必需

    group 是已定义自定义资源的 API 组。自定义资源在 /apis/\<group>/... 下提供。必须与 CustomResourceDefinition 的名称匹配(格式为 \<names.plural>.\<group>)。

  • names (CustomResourceDefinitionNames), 必需

    names 指定自定义资源的资源和种类名称。

    CustomResourceDefinitionNames 指示用于服务此 CustomResourceDefinition 的名称

    • names.kind (string), 必需

      kind 是资源的序列化种类。通常为驼峰式大小写且为单数形式。自定义资源实例将在 API 调用中使用此值作为 kind 属性。

    • names.plural (string), 必需

      plural 是要服务的资源的复数名称。自定义资源在 /apis/\<group>/\<version>/.../\<plural> 下提供。必须与 CustomResourceDefinition 的名称匹配(格式为 \<names.plural>.\<group>)。必须全部为小写字母。

    • names.categories ([]string)

      原子性的:将在合并期间被替换

      categories 是此自定义资源所属的分组资源列表(例如“all”)。这将发布在 API 发现文档中,并由客户端用于支持诸如 kubectl get all 之类的调用。

    • names.listKind (string)

      listKind 是此资源列表的序列化种类。默认为 "kindList"。

    • names.shortNames ([]string)

      原子性的:将在合并期间被替换

      shortNames 是资源的简称,在 API 发现文档中公开,并由客户端用于支持诸如 kubectl get \<shortname> 之类的调用。必须全部为小写字母。

    • names.singular (string)

      singular 是资源的单数名称。必须全部为小写字母。默认为小写的 kind

  • scope (string), 必需

    scope 指示定义的自定义资源是集群范围还是命名空间范围。允许的值为 ClusterNamespaced

  • versions ([]CustomResourceDefinitionVersion), 必需

    原子性的:将在合并期间被替换

    versions 是已定义自定义资源的所有 API 版本的列表。版本名称用于计算 API 发现中列出的已服务版本的顺序。如果版本字符串是“类 kube”的,它将在非“类 kube”版本字符串上方排序,后者按字典顺序排序。“类 kube”版本以“v”开头,然后是数字(主版本),然后是可选字符串“alpha”或“beta”和另一个数字(次版本)。这些版本首先按 GA > beta > alpha(其中 GA 是没有后缀(如 beta 或 alpha)的版本)排序,然后按主版本比较,再按次版本比较。版本排序列表示例:v10、v2、v1、v11beta2、v10beta3、v3beta1、v12alpha1、v11alpha2、foo1、foo10。

    CustomResourceDefinitionVersion 描述 CRD 的版本。

    • versions.name (string), 必需

      name 是版本名称,例如“v1”、“v2beta1”等。如果 served 为 true,则自定义资源将在 /apis/\<group>/\<version>/... 下的此版本中提供。

    • versions.served (boolean), 必需

      served 是一个标志,用于启用/禁用此版本通过 REST API 提供服务

    • versions.storage (boolean), 必需

      storage 指示在将自定义资源持久化到存储时应使用此版本。必须只有一个版本的 storage=true。

    • versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)

      原子性的:将在合并期间被替换

      additionalPrinterColumns 指定在表格输出中返回的附加列。有关详细信息,请参阅 https://kubernetes.ac.cn/docs/reference/using-api/api-concepts/#receiving-resources-as-tables。如果未指定任何列,则使用显示自定义资源生存期的单列。

      CustomResourceColumnDefinition 指定用于服务器端打印的列。

      • versions.additionalPrinterColumns.jsonPath (string), 必需

        jsonPath 是一个简单的 JSON 路径(即使用数组表示法),它针对每个自定义资源进行评估以生成此列的值。

      • versions.additionalPrinterColumns.name (string), 必需

        name 是列的可读名称。

      • versions.additionalPrinterColumns.type (string), 必需

        type 是此列的 OpenAPI 类型定义。有关详细信息,请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types

      • versions.additionalPrinterColumns.description (string)

        description 是此列的可读描述。

      • versions.additionalPrinterColumns.format (string)

        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 (boolean)

      deprecated 指示此版本的自定义资源 API 已弃用。设置为 true 时,对此版本的 API 请求会在服务器响应中收到警告标头。默认为 false。

    • versions.deprecationWarning (string)

      deprecationWarning 覆盖返回给 API 客户端的默认警告。仅当 deprecated 为 true 时才能设置。默认警告指示此版本已弃用,并建议使用稳定性相同或更高的新服务版本(如果存在)。

    • versions.schema (CustomResourceValidation)

      schema 描述了用于验证、修剪和默认此版本自定义资源的架构。

      CustomResourceValidation 是 CustomResources 的验证方法列表。

      • versions.schema.openAPIV3Schema (JSONSchemaProps)

        openAPIV3Schema 是用于验证和修剪的 OpenAPI v3 架构。

    • versions.selectableFields ([]SelectableField)

      原子性的:将在合并期间被替换

      selectableFields 指定可用作字段选择器的字段的路径。最多允许 8 个可选字段。请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/field-selectors

      SelectableField 指定可以使用字段选择器的字段的 JSON 路径。

      • versions.selectableFields.jsonPath (string), 必需

        jsonPath 是一个简单的 JSON 路径,它针对每个自定义资源进行评估以生成字段选择器值。仅允许不带数组表示法的 JSON 路径。必须指向字符串、布尔值或整数类型的字段。允许使用具有枚举值的类型和具有格式的字符串。如果 jsonPath 指的是资源中不存在的字段,则 jsonPath 将计算为空字符串。不得指向元数据字段。必需。

    • versions.subresources (CustomResourceSubresources)

      subresources 指定此版本的已定义自定义资源具有哪些子资源。

      CustomResourceSubresources 定义 CustomResources 的状态和规模子资源。

      • versions.subresources.scale (CustomResourceSubresourceScale)

        scale 指示自定义资源应提供一个返回 autoscaling/v1 Scale 对象的 /scale 子资源。

        CustomResourceSubresourceScale 定义如何为 CustomResources 提供 scale 子资源。

        • versions.subresources.scale.specReplicasPath (string), 必需

          specReplicasPath 定义自定义资源中与 Scale spec.replicas 对应的 JSON 路径。仅允许不带数组表示法的 JSON 路径。必须是 .spec 下的 JSON 路径。如果自定义资源中给定路径下没有值,则 /scale 子资源将在 GET 上返回错误。

        • versions.subresources.scale.statusReplicasPath (string), 必需

          statusReplicasPath 定义自定义资源中与 Scale status.replicas 对应的 JSON 路径。仅允许不带数组表示法的 JSON 路径。必须是 .status 下的 JSON 路径。如果自定义资源中给定路径下没有值,则 /scale 子资源中的 status.replicas 值将默认为 0。

        • versions.subresources.scale.labelSelectorPath (string)

          labelSelectorPath 定义了自定义资源中与 Scale status.selector 对应的 JSON 路径。只允许不带数组符号的 JSON 路径。必须是 .status.spec 下的 JSON 路径。必须设置为与 HorizontalPodAutoscaler 一起使用。此 JSON 路径指向的字段必须是字符串字段(而不是复杂的 selector 结构),其中包含字符串形式的序列化标签选择器。更多信息: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 子资源。状态由 CustomResource 中的 .status JSON 路径表示。设置后,* 为自定义资源公开 /status 子资源 * 对 /status 子资源的 PUT 请求采用自定义资源对象,并忽略除 status 部分之外的任何更改 * 对自定义资源的 PUT/POST/PATCH 请求忽略 status 部分的更改

  • conversion (CustomResourceConversion)

    conversion 定义 CRD 的转换设置。

    CustomResourceConversion 描述了如何转换不同版本的 CR。

    • conversion.strategy (string), 必需

      strategy 指定自定义资源如何在版本之间转换。允许的值为:- "None":转换器仅更改 apiVersion,不会触及自定义资源中的任何其他字段。- "Webhook":API 服务器将调用外部 webhook 来执行转换。此选项需要其他信息。这要求 spec.preserveUnknownFields 为 false,并且 spec.conversion.webhook 已设置。

    • conversion.webhook (WebhookConversion)

      webhook 描述了如何调用转换 webhook。当 strategy 设置为 "Webhook" 时必需。

      WebhookConversion 描述了如何调用转换 webhook

      • conversion.webhook.conversionReviewVersions ([]string), 必需

        原子性的:将在合并期间被替换

        conversionReviewVersions 是 Webhook 预期的 ConversionReview 版本的有序列表。API 服务器将使用它支持的列表中的第一个版本。如果 API 服务器不支持此列表中指定的任何版本,则自定义资源的转换将失败。如果持久化的 Webhook 配置指定了允许的版本,但不包含 API 服务器已知的任何版本,则对 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 或 url。

          如果 webhook 在集群内运行,则应使用 service

          ServiceReference 持有对 Service.legacy.k8s.io 的引用

          • conversion.webhook.clientConfig.service.name (string), 必需

            name 是服务的名称。必需

          • conversion.webhook.clientConfig.service.namespace (string), 必需

            namespace 是服务的命名空间。必需

          • conversion.webhook.clientConfig.service.path (string)

            path 是将联系 webhook 的可选 URL 路径。

          • conversion.webhook.clientConfig.service.port (int32)

            port 是将联系 webhook 的可选服务端口。port 应为有效的端口号(1-65535,包括)。默认为 443 以实现向后兼容。

        • conversion.webhook.clientConfig.url (string)

          url 以标准 URL 格式 (scheme://host:port/path) 给出 webhook 的位置。必须恰好指定 urlservice 之一。

          host 不应引用在集群中运行的服务;请改用 service 字段。主机可能通过某些 apiserver 中的外部 DNS 解析(例如,kube-apiserver 无法解析集群内 DNS,因为这将违反分层原则)。host 也可能是一个 IP 地址。

          请注意,使用 localhost127.0.0.1 作为 host 是有风险的,除非您非常小心地在运行 apiserver 的所有主机上运行此 webhook,这些 apiserver 可能需要调用此 webhook。此类安装可能不具有可移植性,即不容易在新集群中启动。

          方案必须是 "https";URL 必须以 "https://" 开头。

          路径是可选的,如果存在,可以是 URL 中允许的任何字符串。您可以使用该路径将任意字符串传递给 webhook,例如集群标识符。

          不允许尝试使用用户或基本身份验证,例如 "user:password@"。片段("#...")和查询参数("?...")也不允许。

  • preserveUnknownFields (boolean)

    preserveUnknownFields 指示在持久化到存储时,应保留 OpenAPI 模式中未指定的 对象字段。apiVersion、kind、metadata 和 metadata 中的已知字段始终保留。此字段已弃用,改为在 spec.versions[*].schema.openAPIV3Schema 中将 x-preserve-unknown-fields 设置为 true。有关详细信息,请参阅 https://kubernetes.ac.cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning

JSONSchemaProps

JSONSchemaProps 是遵循规范草案 4 的 JSON-Schema (https://json-schema.fullstack.org.cn/)


  • $ref (string)

  • $schema (string)

  • additionalItems (JSONSchemaPropsOrBool)

    JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。

  • additionalProperties (JSONSchemaPropsOrBool)

    JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。

  • allOf ([]JSONSchemaProps)

    原子性的:将在合并期间被替换

  • anyOf ([]JSONSchemaProps)

    原子性的:将在合并期间被替换

  • default (JSON)

    default 是未定义对象字段的默认值。默认值是 CustomResourceDefaulting 功能门控下的测试功能。默认值要求 spec.preserveUnknownFields 为 false。

    JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。

  • definitions (map[string]JSONSchemaProps)

  • dependencies (map[string]JSONSchemaPropsOrStringArray)

    JSONSchemaPropsOrStringArray 表示 JSONSchemaProps 或字符串数组。

  • description (string)

  • 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 (boolean)

  • exclusiveMinimum (boolean)

  • externalDocs (ExternalDocumentation)

    ExternalDocumentation 允许引用外部资源以获取扩展文档。

    • externalDocs.description (string)

    • externalDocs.url (string)

  • format (string)

    format 是 OpenAPI v3 格式字符串。未知格式将被忽略。将验证以下格式

    • bsonobjectid:bson 对象 ID,即 24 个字符的十六进制字符串 - uri:由 Golang net/url.ParseRequestURI 解析的 URI - email:由 Golang net/mail.ParseAddress 解析的电子邮件地址 - hostname:互联网主机名的有效表示形式,如 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,由正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$ 定义 - uuid3:允许大写的 UUID3,由正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$ 定义 - uuid4:允许大写的 UUID4,由正则表达式 (?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,由正则表达式 (?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:由正则表达式 ^(?: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:遵循正则表达式 ^\d{3}[- ]?\d{2}[- ]?\d{4}$ 的美国社会安全号码 - hexcolor:十六进制颜色代码,例如 "#FFFFFF: 遵循正则表达式 ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ - rgbcolor:RGB 颜色代码,例如 "rgb(255,255,2559" - 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 (string)

  • 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 (boolean)

  • oneOf ([]JSONSchemaProps)

    原子性的:将在合并期间被替换

  • pattern (string)

  • 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** (布尔值)

    `x-kubernetes-int-or-string` 指定该值是整数或字符串。如果为 `true`,则允许空类型,并且如果遵循以下模式之一,则允许在 `anyOf` 的子级中使用 `type`:

    1. `anyOf`
      • `type: integer`
      • `type: string`
    2. `allOf`
      • `anyOf`
        • `type: integer`
        • `type: string`
      • ... 零个或多个
  • **x-kubernetes-list-map-keys** ([]string)

    原子性的:将在合并期间被替换

    `x-kubernetes-list-map-keys` 通过指定用作映射索引的键,使用 `x-kubernetes-list-type` 为 `map` 的数组添加注释。

    此标签必须仅用于 `x-kubernetes-list-type` 扩展设置为 `map` 的列表。此外,为此属性指定的值必须是子结构的标量类型字段(不支持嵌套)。

    指定的属性必须是必需的或具有默认值,以确保所有列表项都存在这些属性。

  • **x-kubernetes-list-type** (字符串)

    `x-kubernetes-list-type` 注释数组以进一步描述其拓扑。此扩展名必须仅用于列表,并且可能具有 3 个可能的值:

    1. `atomic`:该列表被视为单个实体,如标量。原子列表将在更新时被完全替换。此扩展名可用于任何类型的列表(结构、标量等)。
    2. `set`:集合是不允许多个项目具有相同值的列表。每个值必须是标量,具有 `x-kubernetes-map-type` 为 `atomic` 的对象,或具有 `x-kubernetes-list-type` 为 `atomic` 的数组。
    3. `map`:这些列表类似于映射,因为它们的元素具有用于标识它们的非索引键。合并后将保留顺序。`map` 标签必须仅用于元素类型为对象的列表。数组默认为 `atomic`。
  • **x-kubernetes-map-type** (字符串)

    `x-kubernetes-map-type` 注释对象以进一步描述其拓扑。此扩展名必须仅在类型为 `object` 时使用,并且可能具有 2 个可能的值:

    1. `granular`:这些映射是实际的映射(键值对),并且每个字段彼此独立(它们可以由单独的操作者操作)。这是所有映射的默认行为。
    2. `atomic`:该列表被视为单个实体,如标量。原子映射将在更新时被完全替换。
  • **x-kubernetes-preserve-unknown-fields** (布尔值)

    `x-kubernetes-preserve-unknown-fields` 阻止 API 服务器解码步骤修剪验证架构中未指定的字段。这将递归地影响字段,但如果在架构中指定了嵌套属性或 `additionalProperties`,则会切换回正常的修剪行为。可以是 `true` 或未定义。禁止使用 `false`。

  • **x-kubernetes-validations** ([]ValidationRule)

    补丁策略:在键 `rule` 上合并

    映射:合并期间将保留键 `rule` 上的唯一值

    `x-kubernetes-validations` 描述了用 CEL 表达式语言编写的验证规则列表。

    ValidationRule 描述了用 CEL 表达式语言编写的验证规则。

    • **x-kubernetes-validations.rule** (字符串),必需

      `Rule` 表示将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec `Rule` 的作用域是架构中 `x-kubernetes-validations` 扩展的位置。CEL 表达式中的 `self` 变量绑定到作用域值。示例:- 作用域为具有状态子资源的资源根的规则:`{"rule": "self.status.actual <= self.spec.maxDesired"}`

      如果 `Rule` 的作用域是具有属性的对象,则可以通过 `self.field` 选择对象的属性,并可以通过 `has(self.field)` 检查字段是否存在。空值字段在 CEL 表达式中被视为不存在的字段。如果 `Rule` 的作用域是具有 `additionalProperties`(即映射)的对象,则可以通过 `self[mapKey]` 访问映射的值,可以通过 `mapKey in self` 检查映射包含,并且可以通过 CEL 宏和函数(例如 `self.all(...)`)访问映射的所有条目。如果 `Rule` 的作用域是数组,则可以通过 `self[i]` 以及宏和函数访问数组的元素。如果 `Rule` 的作用域是标量,则 `self` 绑定到标量值。示例:- 作用域为对象映射的规则:`{"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` 注释的对象访问。无法访问其他元数据属性。

      通过 `x-kubernetes-preserve-unknown-fields` 保留在自定义资源中的未知数据在 CEL 表达式中不可访问。这包括:- 由具有 `x-kubernetes-preserve-unknown-fields` 的对象架构保留的未知字段值。- 属性架构为“未知类型”的对象属性。“未知类型”递归定义为:

      • 没有类型且 `x-kubernetes-preserve-unknown-fields` 设置为 `true` 的架构
      • 项目架构为“未知类型”的数组
      • `additionalProperties` 架构为“未知类型”的对象

      只有格式为 `[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 可选变量,其 `value()` 与 `self` 类型相同。有关详细信息,请参阅 `optionalOldSelf` 字段的文档。

      默认情况下,转换规则仅应用于更新请求,如果找不到旧值,则会跳过。您可以通过将 `optionalOldSelf` 设置为 `true` 来选择无条件评估的转换规则。

    • **x-kubernetes-validations.fieldPath** (字符串)

      `fieldPath` 表示验证失败时返回的字段路径。它必须是作用域为此架构中 `x-kubernetes-validations` 扩展位置的相对 JSON 路径(即使用数组表示法),并引用现有字段。例如,当验证检查映射 `testMap` 下的特定属性 `foo` 时,`fieldPath` 可以设置为 `.testMap.foo`。如果验证检查两个列表必须具有唯一属性,则 `fieldPath` 可以设置为任一列表:例如 `.testList`。它不支持列表数字索引。它目前支持子操作以引用现有字段。有关更多信息,请参阅Kubernetes 中的 JSONPath 支持。不支持数组的数字索引。对于包含特殊字符的字段名称,使用 `['specialName']` 来引用字段名称。例如,对于列表 `testList` 中出现的属性 `foo.34$`,`fieldPath` 可以设置为 `.testList['foo.34$']`。

    • **x-kubernetes-validations.message** (字符串)

      `Message` 表示验证失败时显示的消息。如果规则包含换行符,则消息是必需的。消息不得包含换行符。如果未设置,则消息为“failed rule: {Rule}”。例如“必须是与 spec.host 匹配的主机的 URL”。

    • **x-kubernetes-validations.messageExpression** (字符串)

      `MessageExpression` 声明一个 CEL 表达式,该表达式计算结果为此规则失败时返回的验证失败消息。由于 `messageExpression` 用作失败消息,因此它必须计算结果为字符串。如果规则中同时存在 `message` 和 `messageExpression`,则如果验证失败,将使用 `messageExpression`。如果 `messageExpression` 导致运行时错误,则会记录运行时错误,并生成验证失败消息,如同未设置 `messageExpression` 字段一样。如果 `messageExpression` 计算结果为空字符串、仅包含空格的字符串或包含换行符的字符串,则也会生成验证失败消息,如同未设置 `messageExpression` 字段一样,并且将记录 `messageExpression` 生成了空字符串/仅包含空格的字符串/包含换行符的字符串的事实。`messageExpression` 可以访问与规则相同的所有变量;唯一的区别是返回类型。示例:“x 必须小于最大值(”+string(self.max)+“)”。

    • **x-kubernetes-validations.optionalOldSelf** (布尔值)

      `optionalOldSelf` 用于选择即使在首次创建对象或缺少旧对象的值时也要评估的转换规则。

      启用后,`oldSelf` 将是一个 CEL 可选项,如果没有旧值或对象是初始创建的,则其值为 `None`。

      您可以使用 `oldSelf.hasValue()` 检查 `oldSelf` 的存在,并在检查后使用 `oldSelf.value()` 解包它。有关可选类型的更多信息,请查看 CEL 文档:https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypes

      除非在 `rule` 中使用 `oldSelf`,否则可能无法设置。

    • x-kubernetes-validations.reason (字符串)

      reason 提供了一个机器可读的验证失败原因,当请求未通过此验证规则时,该原因将返回给调用者。返回给调用者的 HTTP 状态代码将与第一个失败的验证规则的原因匹配。当前支持的原因包括:"FieldValueInvalid"、"FieldValueForbidden"、"FieldValueRequired"、"FieldValueDuplicate"。如果未设置,则默认为 "FieldValueInvalid"。将来添加的所有原因都必须被客户端在读取此值时接受,并且未知原因应被视为 FieldValueInvalid。

CustomResourceDefinitionStatus

CustomResourceDefinitionStatus 指示 CustomResourceDefinition 的状态。


  • acceptedNames (CustomResourceDefinitionNames)

    acceptedNames 是实际用于服务发现的名称。它们可能与规范中的名称不同。

    CustomResourceDefinitionNames 指示用于服务此 CustomResourceDefinition 的名称

    • acceptedNames.kind (字符串),必需

      kind 是资源的序列化种类。通常为驼峰式大小写且为单数形式。自定义资源实例将在 API 调用中使用此值作为 kind 属性。

    • acceptedNames.plural (字符串),必需

      plural 是要服务的资源的复数名称。自定义资源在 /apis/\<group>/\<version>/.../\<plural> 下提供。必须与 CustomResourceDefinition 的名称匹配(格式为 \<names.plural>.\<group>)。必须全部为小写字母。

    • acceptedNames.categories ([]string)

      原子性的:将在合并期间被替换

      categories 是此自定义资源所属的分组资源列表(例如“all”)。这将发布在 API 发现文档中,并由客户端用于支持诸如 kubectl get all 之类的调用。

    • acceptedNames.listKind (字符串)

      listKind 是此资源列表的序列化种类。默认为 "kindList"。

    • acceptedNames.shortNames ([]string)

      原子性的:将在合并期间被替换

      shortNames 是资源的简称,在 API 发现文档中公开,并由客户端用于支持诸如 kubectl get \<shortname> 之类的调用。必须全部为小写字母。

    • acceptedNames.singular (字符串)

      singular 是资源的单数名称。必须全部为小写字母。默认为小写的 kind

  • conditions ([]CustomResourceDefinitionCondition)

    映射:在合并期间将保留键类型上的唯一值。

    conditions 指示 CustomResourceDefinition 特定方面的状态。

    CustomResourceDefinitionCondition 包含此 Pod 当前状况的详细信息。

    • conditions.status (字符串),必需

      status 是条件的状态。可以是 True、False 或 Unknown。

    • conditions.type (字符串),必需

      type 是条件的类型。类型包括 Established、NamesAccepted 和 Terminating。

    • conditions.lastTransitionTime (Time)

      lastTransitionTime 是条件从一种状态转换到另一种状态的最后一次时间。

      Time 是 time.Time 的包装器,它支持正确的 YAML 和 JSON 编组。为 time 包提供的许多工厂方法都提供了包装器。

    • conditions.message (字符串)

      message 是一条人类可读的消息,指示有关上次转换的详细信息。

    • conditions.reason (字符串)

      reason 是条件上次转换的唯一、单字、驼峰式原因。

  • storedVersions ([]string)

    原子性的:将在合并期间被替换

    storedVersions 列出了曾经持久化的所有 CustomResources 版本。跟踪这些版本允许 etcd 中存储版本的迁移路径。该字段是可变的,因此迁移控制器可以完成到另一个版本的迁移(确保存储中没有旧对象),然后从此列表中删除其余版本。当版本存在于此列表中时,可能无法从 `spec.versions` 中删除它们。

CustomResourceDefinitionList

CustomResourceDefinitionList 是 CustomResourceDefinition 对象的列表。


操作


`get` 读取指定的 CustomResourceDefinition。

HTTP 请求

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}

参数

  • name (*路径中*):字符串,必需

    CustomResourceDefinition 的名称

  • pretty (*查询中*):字符串

    pretty

响应

200 (CustomResourceDefinition): OK

401: 未授权

`get` 读取指定 CustomResourceDefinition 的状态。

HTTP 请求

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status

参数

  • name (*路径中*):字符串,必需

    CustomResourceDefinition 的名称

  • pretty (*查询中*):字符串

    pretty

响应

200 (CustomResourceDefinition): OK

401: 未授权

`list` 列出或观察 CustomResourceDefinition 类型的对象。

HTTP 请求

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions

参数

响应

200 (CustomResourceDefinitionList): OK

401: 未授权

`create` 创建一个 CustomResourceDefinition。

HTTP 请求

POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions

参数

响应

200 (CustomResourceDefinition): OK

201 (CustomResourceDefinition): Created

202 (CustomResourceDefinition): Accepted

401: 未授权

`update` 替换指定的 CustomResourceDefinition。

HTTP 请求

PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}

参数

响应

200 (CustomResourceDefinition): OK

201 (CustomResourceDefinition): Created

401: 未授权

`update` 替换指定 CustomResourceDefinition 的状态。

HTTP 请求

PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status

参数

响应

200 (CustomResourceDefinition): OK

201 (CustomResourceDefinition): Created

401: 未授权

`patch` 部分更新指定的 CustomResourceDefinition。

HTTP 请求

PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}

参数

  • name (*路径中*):字符串,必需

    CustomResourceDefinition 的名称

  • body: Patch,必需

  • dryRun (*查询中*):字符串

    dryRun

  • fieldManager (*查询中*):字符串

    fieldManager

  • fieldValidation(*查询中*):字符串

    fieldValidation

  • force (*查询中*):布尔值

    force

  • pretty (*查询中*):字符串

    pretty

响应

200 (CustomResourceDefinition): OK

201 (CustomResourceDefinition): Created

401: 未授权

`patch` 部分更新指定 CustomResourceDefinition 的状态。

HTTP 请求

PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status

参数

  • name (*路径中*):字符串,必需

    CustomResourceDefinition 的名称

  • body: Patch,必需

  • dryRun (*查询中*):字符串

    dryRun

  • fieldManager (*查询中*):字符串

    fieldManager

  • fieldValidation(*查询中*):字符串

    fieldValidation

  • force (*查询中*):布尔值

    force

  • pretty (*查询中*):字符串

    pretty

响应

200 (CustomResourceDefinition): OK

201 (CustomResourceDefinition): Created

401: 未授权

`delete` 删除 CustomResourceDefinition。

HTTP 请求

DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}

参数

  • name (*路径中*):字符串,必需

    CustomResourceDefinition 的名称

  • body: DeleteOptions

  • dryRun (*查询中*):字符串

    dryRun

  • gracePeriodSeconds (*查询中*):整数

    gracePeriodSeconds

  • pretty (*查询中*):字符串

    pretty

  • propagationPolicy (*查询中*):字符串

    propagationPolicy

响应

200 (Status): OK

202 (Status): Accepted

401: 未授权

`deletecollection` 删除 CustomResourceDefinition 的集合。

HTTP 请求

DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions

参数

响应

200 (Status): OK

401: 未授权

此页面自动生成。

如果您计划报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

上次修改时间:2024 年 8 月 28 日下午 6:01(太平洋标准时间):更新 v1.31 的生成的 API 参考 (8ba98c79c1)