Spec-Zone.ru › Kubernetes

CustomResourceDefinition

CustomResourceDefinition представляет ресурс, который должен быть доступен на API-сервере. Его имя ДОЛЖНО иметь формат <.spec.name>.<.spec.group>.
Документация по концепции CustomResourceDefinition
  • Пользовательские ресурсы
    1. Пользовательские ресурсы
    2. Пользовательские контроллеры
    3. Нужно ли добавлять пользовательский ресурс в кластер Kubernetes?
    4. Следует ли использовать ConfigMap или пользовательский ресурс?
    5. Добавление пользовательских ресурсов
    6. CustomResourceDefinitions
    7. Агрегация API-сервера
    8. Выбор способа добавления пользовательских ресурсов
    9. Подготовка к установке пользовательского ресурса
    10. Доступ к пользовательскому ресурсу
    11. Селекторы полей пользовательских ресурсов
    12. Дальнейшие действия

apiVersion: apiextensions.k8s.io/v1

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

CustomResourceDefinition

CustomResourceDefinition представляет ресурс, который должен быть доступен на API-сервере. Его имя ДОЛЖНО иметь формат <.spec.name>.<.spec.group>.

Поле Описание
apiVersion
string
APIVersion определяет схему этой версии представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: 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
ObjectMeta
Стандартные метаданные объекта. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec *
CustomResourceDefinitionSpec
spec описывает, как пользователь хочет видеть ресурсы
status
CustomResourceDefinitionStatus
status указывает фактическое состояние CustomResourceDefinition

CustomResourceDefinitionSpec

CustomResourceDefinitionSpec описывает, как пользователь хочет видеть свой ресурс

Поле Описание
conversion
CustomResourceConversion
conversion определяет параметры преобразования для CRD.
group *
string
group — это группа API определённого пользовательского ресурса. Пользовательские ресурсы доступны по адресу `/apis/\/...`. Должна совпадать с именем CustomResourceDefinition (в формате `\.\`).
names *
CustomResourceDefinitionNames
names задаёт имя ресурса и имя kind для пользовательского ресурса.
preserveUnknownFields
boolean
preserveUnknownFields указывает, следует ли сохранять при записи в хранилище поля объекта, не указанные в схеме OpenAPI. apiVersion, kind, metadata и известные поля внутри metadata сохраняются всегда. Это поле устарело; вместо него задайте `x-preserve-unknown-fields` равным true в `spec.versions[*].schema.openAPIV3Schema`. Подробнее: https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning.
scope *
string
scope указывает, относится ли определённый пользовательский ресурс к кластеру или пространству имён. Допустимые значения: `Cluster` и `Namespaced`.
versions *
CustomResourceDefinitionVersion array
versions — список всех версий API определённого пользовательского ресурса. Имена версий используются для вычисления порядка, в котором обслуживаемые версии перечисляются при обнаружении API. Если строка версии имеет формат «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.

CustomResourceDefinitionStatus

CustomResourceDefinitionStatus указывает состояние CustomResourceDefinition

Поле Описание
acceptedNames
CustomResourceDefinitionNames
acceptedNames — имена, фактически используемые для предоставления данных при обнаружении API. Они могут отличаться от имён в spec.
conditions
CustomResourceDefinitionCondition array
conditions указывают состояние отдельных аспектов CustomResourceDefinition
observedGeneration
integer
Поколение, обработанное контроллером CRD.
storedVersions
string array
storedVersions содержит список всех версий CustomResources, которые когда-либо сохранялись. Отслеживание этих версий позволяет выполнить миграцию сохранённых версий в etcd. Это поле можно изменять, чтобы контроллер миграции мог завершить перенос на другую версию (убедившись, что в хранилище не осталось старых объектов), а затем удалить остальные версии из этого списка. Версии нельзя удалять из `spec.versions`, пока они присутствуют в этом списке.

CustomResourceDefinitionList

CustomResourceDefinitionList — это список объектов CustomResourceDefinition.

Поле Описание
apiVersion
string
APIVersion определяет схему этой версии представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
items *
CustomResourceDefinition array
items содержит отдельные объекты CustomResourceDefinition
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

CustomResourceColumnDefinition

CustomResourceColumnDefinition задаёт столбец для вывода на стороне сервера.

Поле Описание
description
string
description — понятное человеку описание этого столбца.
format
string
format — необязательное определение типа OpenAPI для этого столбца. Формат 'name' применяется к столбцу основного идентификатора, чтобы помочь клиентам распознать имя ресурса в столбце. Подробнее: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types.
jsonPath *
string
jsonPath — простой путь JSON (то есть с нотацией массивов), который вычисляется для каждого пользовательского ресурса, чтобы получить значение для этого столбца.
name *
string
name — понятное человеку имя столбца.
priority
integer
priority — целое число, определяющее относительную важность этого столбца по сравнению с другими. Меньшие числа означают более высокий приоритет. Столбцам, которые можно скрывать при нехватке места, следует назначать приоритет больше 0.
type *
string
type — определение типа OpenAPI для этого столбца. Подробнее: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types.

CustomResourceConversion

CustomResourceConversion описывает преобразование между разными версиями CR.

Поле Описание
strategy *
string
strategy задаёт способ преобразования пользовательских ресурсов между версиями. Допустимые значения:
- `"None"`: преобразователь меняет только apiVersion и не затрагивает другие поля пользовательского ресурса.
- `"Webhook"`: API Server вызывает внешний вебхук для выполнения преобразования. Для этого параметра нужны дополнительные сведения. Значение spec.preserveUnknownFields должно быть равно false, а spec.conversion.webhook должно быть задано.
webhook
WebhookConversion
webhook описывает способ вызова вебхука преобразования. Обязателен, если для `strategy` задано значение `"Webhook"`.

CustomResourceDefinitionCondition

CustomResourceDefinitionCondition содержит сведения о текущем условии этого пода.

Поле Описание
lastTransitionTime
Time
lastTransitionTime — время последнего перехода условия из одного состояния в другое.
message
string
message — понятное человеку сообщение с подробностями о последнем переходе.
observedGeneration
integer
observedGeneration указывает значение .metadata.generation, на основании которого было установлено условие. Например, если текущее значение .metadata.generation равно 12, а значение .status.conditions[x].observedGeneration равно 9, условие устарело относительно текущего состояния экземпляра.
reason
string
reason — уникальная причина последнего перехода условия, состоящая из одного слова в формате CamelCase.
status *
string
status — состояние условия. Возможные значения: True, False, Unknown.
type *
string
type — тип условия. Типы включают Established, NamesAccepted и Terminating.

CustomResourceDefinitionNames

CustomResourceDefinitionNames указывает имена, используемые для предоставления этого CustomResourceDefinition

Поле Описание
categories
string array
categories — список групп ресурсов, к которым относится этот пользовательский ресурс (например, 'all'). Этот список публикуется в документах обнаружения API и используется клиентами для поддержки таких вызовов, как `kubectl get all`.
kind *
string
kind — сериализованное имя типа ресурса. Обычно оно записывается в CamelCase и имеет форму единственного числа. Экземпляры пользовательских ресурсов используют это значение в качестве атрибута `kind` в вызовах API.
listKind
string
listKind — сериализованное имя типа списка для этого ресурса. По умолчанию — "`kind`List".
plural *
string
plural — имя ресурса во множественном числе, используемое при предоставлении ресурса. Пользовательские ресурсы доступны по адресу `/apis/\/\/.../\`. Должно совпадать с именем CustomResourceDefinition (в формате `\.\`). Должно состоять только из строчных букв.
shortNames
string array
shortNames — краткие имена ресурса, доступные в документах обнаружения API и используемые клиентами для поддержки таких вызовов, как `kubectl get \`. Должны состоять только из строчных букв.
singular
string
singular — имя ресурса в единственном числе. Должно состоять только из строчных букв. По умолчанию используется имя `kind` в нижнем регистре.

CustomResourceDefinitionVersion

CustomResourceDefinitionVersion описывает версию CRD.

Поле Описание
additionalPrinterColumns
CustomResourceColumnDefinition array
additionalPrinterColumns задаёт дополнительные столбцы, возвращаемые в выводе Table. Подробнее: https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables. Если столбцы не заданы, используется один столбец, отображающий возраст пользовательского ресурса.
deprecated
boolean
deprecated указывает, что эта версия API пользовательского ресурса устарела. Если задано значение true, в ответ сервера на запросы API этой версии добавляется предупреждающий заголовок. По умолчанию — false.
deprecationWarning
string
deprecationWarning заменяет предупреждение по умолчанию, возвращаемое клиентам API. Может быть задано только при значении `deprecated`, равном true. Предупреждение по умолчанию сообщает об устаревании этой версии и рекомендует использовать самую новую обслуживаемую версию с таким же или более высоким уровнем стабильности, если она существует.
name *
string
name — имя версии, например «v1», «v2beta1» и т. д. Если `served` имеет значение true, пользовательские ресурсы этой версии доступны по адресу `/apis/\/\/...`.
schema
CustomResourceValidation
schema описывает схему, используемую для проверки, удаления неизвестных полей и назначения значений по умолчанию для этой версии пользовательского ресурса.
selectableFields
SelectableField array
selectableFields задаёт пути к полям, которые можно использовать в качестве селекторов полей. Разрешено не более 8 выбираемых полей. См. https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors
served *
boolean
served — флаг, включающий или отключающий предоставление этой версии через REST API
storage *
boolean
storage указывает, следует ли использовать эту версию при сохранении пользовательских ресурсов в хранилище. Ровно одна версия должна иметь значение storage=true.
subresources
CustomResourceSubresources
subresources задаёт подресурсы, доступные для этой версии определённого пользовательского ресурса.

CustomResourceSubresourceScale

CustomResourceSubresourceScale определяет способ предоставления подресурса scale для CustomResources.

Поле Описание
labelSelectorPath
string
labelSelectorPath задаёт путь JSON внутри пользовательского ресурса, соответствующий `status.selector` объекта Scale. Допускаются только пути JSON без нотации массивов. Путь JSON должен находиться внутри `.status` или `.spec`. Для работы с HorizontalPodAutoscaler это поле должно быть задано. Поле, на которое указывает этот путь JSON, должно быть строковым (а не структурой сложного селектора) и содержать сериализованный селектор меток в виде строки. Подробнее: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource. Если по указанному пути в пользовательском ресурсе нет значения, для `status.selector` в подресурсе `/scale` по умолчанию используется пустая строка.
specReplicasPath *
string
specReplicasPath задаёт путь JSON внутри пользовательского ресурса, соответствующий `spec.replicas` объекта Scale. Допускаются только пути JSON без нотации массивов. Путь JSON должен находиться внутри `.spec`. Если по указанному пути в пользовательском ресурсе нет значения, подресурс `/scale` вернёт ошибку при выполнении GET-запроса.
statusReplicasPath *
string
statusReplicasPath задаёт путь JSON внутри пользовательского ресурса, соответствующий `status.replicas` объекта Scale. Допускаются только пути JSON без нотации массивов. Путь JSON должен находиться внутри `.status`. Если по указанному пути в пользовательском ресурсе нет значения, для `status.replicas` в подресурсе `/scale` по умолчанию используется 0.

CustomResourceSubresourceStatus

CustomResourceSubresourceStatus определяет способ предоставления подресурса status для CustomResources. Состояние представлено JSON-путём .status внутри CustomResource. Если этот параметр задан: * для пользовательского ресурса предоставляется подресурс /status * PUT-запросы к подресурсу /status принимают объект пользовательского ресурса и игнорируют изменения всех частей, кроме раздела status * PUT/POST/PATCH-запросы к пользовательскому ресурсу игнорируют изменения раздела status

CustomResourceSubresources

CustomResourceSubresources определяет подресурсы status и scale для CustomResources.

Поле Описание
scale
CustomResourceSubresourceScale
scale указывает, что пользовательский ресурс должен предоставлять подресурс `/scale`, возвращающий объект Scale типа `autoscaling/v1`.
status
CustomResourceSubresourceStatus
status указывает, что пользовательский ресурс должен предоставлять подресурс `/status`. Если он включён: 1. запросы к основной конечной точке пользовательского ресурса игнорируют изменения раздела `status` объекта. 2. запросы к подресурсу `/status` пользовательского ресурса игнорируют изменения всех частей объекта, кроме раздела `status`.

CustomResourceValidation

CustomResourceValidation — это список методов проверки CustomResources.

Поле Описание
openAPIV3Schema
JSONSchemaProps
openAPIV3Schema — схема OpenAPI v3, используемая для проверки и удаления неизвестных полей.

ExternalDocumentation

ExternalDocumentation позволяет ссылаться на внешний ресурс с расширенной документацией.

Поле Описание
description
string
url
string

JSON

JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.

JSONSchemaProps

JSONSchemaProps — это схема JSON, соответствующая спецификации Draft 4 (http://json-schema.org/).

Поле Описание
$ref
string
$schema
string
additionalItems
JSONSchemaPropsOrBool
additionalProperties
JSONSchemaPropsOrBool
allOf
JSONSchemaProps array
anyOf
JSONSchemaProps array
default
JSON
default — значение по умолчанию для неопределённых полей объекта. Установка значений по умолчанию — бета-функция, доступная при включённом feature gate CustomResourceDefaulting. Для установки значений по умолчанию требуется, чтобы spec.preserveUnknownFields имело значение false.
definitions
object
dependencies
object
description
string
enum
JSON array
example
JSON
exclusiveMaximum
boolean
exclusiveMinimum
boolean
externalDocs
ExternalDocumentation
format
string
format — строка формата OpenAPI v3. Неизвестные форматы игнорируются. Проверяются следующие форматы: - bsonobjectid: идентификатор объекта BSON, т. е. 24-символьная шестнадцатеричная строка - uri: URI, разобранный функцией Golang net/url.ParseRequestURI - email: адрес электронной почты, разобранный функцией Golang net/mail.ParseAddress - hostname: допустимое представление имени интернет-хоста, определённое в RFC 1034, разделе 3.1 [RFC1034]. - ipv4: IPv4-адрес, разобранный функцией Golang net.ParseIP - ipv6: IPv6-адрес, разобранный функцией Golang net.ParseIP - cidr: CIDR, разобранный функцией Golang net.ParseCIDR - mac: MAC-адрес, разобранный функцией Golang net.ParseMAC - 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", определённая как full-date в RFC3339 - duration: строка длительности, например "22 ns", разобранная функцией Golang time.ParseDuration или совместимая с форматом длительности Scala - datetime: строка даты и времени, например "2014-12-15T19:30:20.000Z", определённая как date-time в RFC3339.
id
string
items
JSONSchemaPropsOrArray
maxItems
integer
maxLength
integer
maxProperties
integer
maximum
number
minItems
integer
minLength
integer
minProperties
integer
minimum
number
multipleOf
number
not
JSONSchemaProps
nullable
boolean
oneOf
JSONSchemaProps array
pattern
string
patternProperties
object
properties
object
required
string array
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).
x-kubernetes-int-or-string
boolean
x-kubernetes-int-or-string указывает, что это значение может быть целым числом или строкой. Если значение равно true, допускается пустой type, а type как дочерний элемент anyOf разрешён при использовании одного из следующих шаблонов: 1) anyOf: - type: integer - type: string 2) allOf: - anyOf: - type: integer - type: string - ... ноль или более элементов
x-kubernetes-list-map-keys
string array
x-kubernetes-list-map-keys аннотирует массив с типом списка x-kubernetes-list-type `map`, задавая ключи, используемые в качестве индекса карты. Этот тег ДОЛЖЕН использоваться только для списков, у которых расширение "x-kubernetes-list-type" имеет значение "map". Кроме того, указанные для этого атрибута значения должны быть полями скалярного типа в дочерней структуре (вложенность не поддерживается). Указанные свойства должны быть обязательными или иметь значение по умолчанию, чтобы обеспечить наличие этих свойств во всех элементах списка.
x-kubernetes-list-type
string
x-kubernetes-list-type аннотирует массив, чтобы подробнее описать его топологию. Это расширение следует использовать только для списков; оно может принимать одно из трёх значений: 1) `atomic`: список рассматривается как единое целое, подобно скалярному значению. Атомарные списки при обновлении заменяются целиком. Это расширение можно использовать для списков любого типа (структур, скалярных значений и т. д.). 2) `set`: множества — это списки, в которых не должно быть нескольких элементов с одинаковым значением. Каждый элемент должен быть скалярным значением, объектом с x-kubernetes-map-type `atomic` или массивом с x-kubernetes-list-type `atomic`. 3) `map`: такие списки подобны картам: их элементы имеют ключ, не являющийся индексом, который используется для их идентификации. При слиянии порядок сохраняется. Тег map можно использовать только для списков с элементами типа object. Для массивов по умолчанию используется atomic.
x-kubernetes-map-type
string
x-kubernetes-map-type аннотирует объект, чтобы подробнее описать его топологию. Это расширение следует использовать только при type со значением object; оно может принимать одно из двух значений: 1) `granular`: такие карты являются обычными картами (парами «ключ-значение»), а их поля независимы друг от друга (ими могут отдельно управлять разные участники). Это поведение по умолчанию для всех карт. 2) `atomic`: список рассматривается как единое целое, подобно скалярному значению. Атомарные карты при обновлении заменяются целиком.
x-kubernetes-preserve-unknown-fields
boolean
x-kubernetes-preserve-unknown-fields предотвращает удаление API-сервером полей, не указанных в схеме проверки, на этапе декодирования. Это поведение рекурсивно распространяется на поля, но переключается на обычное удаление полей, если во вложенных элементах схемы указаны properties или additionalProperties. Значение может быть true или не задано. Значение false запрещено.
x-kubernetes-validations
ValidationRule array
стратегия исправления: слияние по ключу rule
x-kubernetes-validations описывает список правил проверки, записанных на языке выражений CEL.

JSONSchemaPropsOrArray

JSONSchemaPropsOrArray представляет значение, которое может быть объектом JSONSchemaProps или массивом JSONSchemaProps. В основном используется для сериализации.

JSONSchemaPropsOrBool

JSONSchemaPropsOrBool представляет JSONSchemaProps или логическое значение. Для логического свойства по умолчанию используется значение true.

SelectableField

SelectableField задаёт JSON-путь к полю, которое можно использовать с селекторами полей.

Поле Описание
jsonPath *
string
jsonPath — это простой JSON-путь, который вычисляется для каждого пользовательского ресурса и возвращает значение селектора поля. Допускаются только JSON-пути без нотации массивов. Путь должен указывать на поле типа string, boolean или integer. Допускаются типы со значениями enum и строки с форматами. Если jsonPath указывает на отсутствующее в ресурсе поле, результатом вычисления jsonPath будет пустая строка. Путь не должен указывать на поля metdata. Обязательное поле.

ServiceReference

ServiceReference содержит ссылку на Service.legacy.k8s.io

Поле Описание
name *
string
name — имя сервиса. Обязательное поле
namespace *
string
namespace — пространство имён сервиса. Обязательное поле
path
string
path — необязательный путь URL, по которому будет вызываться веб-перехватчик.
port
integer
port — необязательный порт сервиса, по которому будет вызываться веб-перехватчик. `port` должен быть допустимым номером порта (от 1 до 65535 включительно). Для обратной совместимости по умолчанию используется 443.

ValidationRule

ValidationRule описывает правило проверки, записанное на языке выражений CEL.

Поле Описание
fieldPath
string
fieldPath задаёт путь к полю, возвращаемый при сбое проверки. Это должен быть относительный JSON-путь (то есть с нотацией массивов), ограниченный местом расположения этого расширения x-kubernetes-validations в схеме и указывающий на существующее поле. Например, если проверка определяет, что конкретный атрибут `foo` находится в карте `testMap`, для fieldPath можно задать `.testMap.foo`. Если проверка определяет, что два списка должны иметь уникальные атрибуты, для fieldPath можно указать любой из этих списков, например `.testList`. Числовые индексы элементов списка не поддерживаются. В настоящее время поддерживается операция обращения к существующему дочернему полю. Дополнительные сведения см. в разделе [Поддержка JSONPath в Kubernetes](https://kubernetes.io/docs/reference/kubectl/jsonpath/). Числовые индексы массива не поддерживаются. Чтобы обратиться к имени поля, содержащему специальные символы, используйте `['specialName']`. Например, если атрибут `foo.34$` находится в списке `testList`, для fieldPath можно задать `.testList['foo.34$']`
message
string
Message — сообщение, отображаемое при сбое проверки. Если Rule содержит переводы строки, сообщение обязательно. Сообщение не должно содержать переводов строки. Если значение не задано, используется сообщение "failed rule: {Rule}". Например: "должен быть URL, хост которого соответствует spec.host"
messageExpression
string
MessageExpression задаёт выражение CEL, результатом вычисления которого является сообщение об ошибке проверки, возвращаемое при сбое этого правила. Поскольку messageExpression используется как сообщение об ошибке, результатом его вычисления должна быть строка. Если для правила заданы и message, и messageExpression, при сбое проверки будет использоваться messageExpression. Если при вычислении messageExpression возникает ошибка времени выполнения, она записывается в журнал, а сообщение об ошибке проверки формируется так, как если бы поле messageExpression не было задано. Если результат вычисления messageExpression — пустая строка, строка, содержащая только пробелы, или строка с переводами строк, сообщение об ошибке проверки также формируется так, как если бы поле messageExpression не было задано; факт получения пустой строки, строки только с пробелами или строки с переводами строк записывается в журнал. messageExpression имеет доступ ко всем тем же переменным, что и правило; отличается только тип возвращаемого значения. Пример: "x должно быть меньше max ("+string(self.max)+")"
optionalOldSelf
boolean
optionalOldSelf используется, чтобы включить вычисление правила перехода даже при первоначальном создании объекта или если в старом объекте отсутствует значение. Если параметр включён, `oldSelf` будет необязательным значением CEL, равным `None`, если старого значения нет или объект создаётся впервые. Наличие oldSelf можно проверить с помощью `oldSelf.hasValue()`, а после проверки получить его значение с помощью `oldSelf.value()`. Дополнительные сведения см. в документации CEL о необязательных типах: https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypes. Параметр можно задать только в том случае, если в `rule` используется `oldSelf`.
reason
string
reason задаёт машиночитаемую причину сбоя проверки, которая возвращается вызывающей стороне при нарушении этого правила проверки запросом. Код состояния HTTP, возвращаемый вызывающей стороне, будет соответствовать причине первого правила проверки, завершившегося с ошибкой. В настоящее время поддерживаются следующие причины: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". Если значение не задано, по умолчанию используется "FieldValueInvalid". Клиенты должны принимать все причины, которые будут добавлены в будущем, при чтении этого значения; неизвестные причины следует обрабатывать как FieldValueInvalid.

Возможные значения перечисления:
- `"FieldValueDuplicate"` используется для сообщения о совпадении значений, которые должны быть уникальными (например, уникальных идентификаторов).
- `"FieldValueForbidden"` используется для сообщения о допустимых (с точки зрения правил форматирования) значениях, которые при некоторых условиях были бы приняты, но не разрешены при текущих условиях (например, политикой безопасности).
- `"FieldValueInvalid"` используется для сообщения о некорректных значениях (например, не соответствующих регулярному выражению, слишком длинных или выходящих за допустимые границы).
- `"FieldValueRequired"` используется для сообщения об отсутствующих обязательных значениях (например, пустых строках, значениях null или пустых массивах).
rule *
string
Rule задаёт выражение, которое будет вычисляться CEL. Ссылка: https://github.com/google/cel-spec Область действия Rule ограничена местом расположения расширения x-kubernetes-validations в схеме. Переменная `self` в выражении CEL привязана к значению в этой области. Пример: - Правило, область действия которого охватывает корень ресурса с подресурсом status: {"rule": "self.status.actual \<= self.spec.maxDesired"} Если область действия Rule охватывает объект со свойствами, к доступным свойствам объекта можно обращаться через поля с помощью `self.field`, а наличие поля можно проверить с помощью `has(self.field)`. Поля со значением null в выражениях 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. Другие свойства metadata недоступны. Неизвестные данные, сохраняемые в пользовательских ресурсах с помощью 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`, но заменяя значения элементами из `Y` для совпадающих наборов ключей `X` и `Y`. Элементы `Y` с непересекающимися ключами добавляются с сохранением их относительного порядка. Если в `rule` используется переменная `oldSelf`, правило неявно становится `правилом перехода`. По умолчанию переменная `oldSelf` имеет тот же тип, что и `self`. Если optionalOldSelf равно true, переменная `oldSelf` становится необязательной переменной CEL, значение value() которой имеет тот же тип, что и `self`. Подробности см. в документации к полю `optionalOldSelf`. По умолчанию правила перехода применяются только к запросам UPDATE и пропускаются, если старое значение не удалось найти. Чтобы включить безусловное вычисление правила перехода, задайте optionalOldSelf значение true.

WebhookClientConfig

WebhookClientConfig содержит сведения, необходимые для установки TLS-соединения с веб-перехватчиком.

Поле Описание
caBundle
string
caBundle — пакет сертификатов CA в кодировке PEM, который будет использоваться для проверки сертификата сервера веб-перехватчика. Если значение не задано, apiserver использует системные корневые сертификаты доверия.
service
ServiceReference
service — ссылка на сервис для этого веб-перехватчика. Необходимо указать либо service, либо url. Если веб-перехватчик работает внутри кластера, следует использовать `service`.
url
string
url задаёт адрес веб-перехватчика в стандартном формате URL (`scheme://host:port/path`). Необходимо указать ровно одно из значений: `url` или `service`. `host` не должен указывать на сервис, работающий в кластере; вместо этого используйте поле `service`. В некоторых apiserver имя хоста может разрешаться через внешнюю DNS (например, `kube-apiserver` не может разрешать имена внутренней DNS кластера, поскольку это нарушило бы многоуровневую архитектуру). `host` также может быть IP-адресом. Обратите внимание: использовать `localhost` или `127.0.0.1` в качестве `host` рискованно, если только вы не обеспечите работу этого веб-перехватчика на всех узлах, где запущен apiserver, которому может потребоваться к нему обратиться. Такие установки, скорее всего, будут непереносимыми, то есть их будет сложно развернуть в новом кластере. Схема должна быть "https"; URL должен начинаться с "https://". Путь необязателен и, если задан, может быть любой строкой, допустимой в URL. С помощью пути можно передать веб-перехватчику произвольную строку, например идентификатор кластера. Использовать имя пользователя или обычную аутентификацию, например "user:password@", запрещено. Фрагменты ("#...") и параметры запроса ("?...") также запрещены.

WebhookConversion

WebhookConversion описывает способ вызова веб-перехватчика преобразования

Поле Описание
clientConfig
WebhookClientConfig
clientConfig содержит инструкции по вызову веб-перехватчика, если для стратегии задано значение `Webhook`.
conversionReviewVersions *
string array
conversionReviewVersions — упорядоченный список предпочтительных версий `ConversionReview`, которые поддерживает веб-перехватчик. API-сервер использует первую версию из списка, которую он поддерживает. Если API-сервер не поддерживает ни одну из указанных в этом списке версий, преобразование пользовательского ресурса завершится ошибкой. Если в сохранённой конфигурации Webhook указаны разрешённые версии и ни одна из них не известна API-серверу, вызовы веб-перехватчика завершатся ошибкой.

© 2026 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2026 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/apiextensions/custom-resource-definition-v1/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API