CustomResourceDefinition
Документация по концепции CustomResourceDefinition
-
- Пользовательские ресурсы
- Пользовательские контроллеры
- Нужно ли добавлять пользовательский ресурс в кластер Kubernetes?
- Следует ли использовать ConfigMap или пользовательский ресурс?
- Добавление пользовательских ресурсов
- CustomResourceDefinitions
- Агрегация API-сервера
- Выбор способа добавления пользовательских ресурсов
- Подготовка к установке пользовательского ресурса
- Доступ к пользовательскому ресурсу
- Селекторы полей пользовательских ресурсов
- Дальнейшие действия
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition представляет ресурс, который должен быть доступен на API-сервере. Его имя ДОЛЖНО иметь формат <.spec.name>.<.spec.group>.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет схему этой версии представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
kindstring |
Kind — строковое значение, представляющее REST-ресурс, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Изменение не допускается. В CamelCase. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataObjectMeta |
Стандартные метаданные объекта. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata |
spec *CustomResourceDefinitionSpec |
spec описывает, как пользователь хочет видеть ресурсы |
statusCustomResourceDefinitionStatus |
status указывает фактическое состояние CustomResourceDefinition |
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec описывает, как пользователь хочет видеть свой ресурс
| Поле | Описание |
|---|---|
conversionCustomResourceConversion |
conversion определяет параметры преобразования для CRD. |
group *string |
group — это группа API определённого пользовательского ресурса. Пользовательские ресурсы доступны по адресу `/apis/\ |
names *CustomResourceDefinitionNames |
names задаёт имя ресурса и имя kind для пользовательского ресурса. |
preserveUnknownFieldsboolean |
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
| Поле | Описание |
|---|---|
acceptedNamesCustomResourceDefinitionNames |
acceptedNames — имена, фактически используемые для предоставления данных при обнаружении API. Они могут отличаться от имён в spec. |
conditionsCustomResourceDefinitionCondition array |
conditions указывают состояние отдельных аспектов CustomResourceDefinition |
observedGenerationinteger |
Поколение, обработанное контроллером CRD. |
storedVersionsstring array |
storedVersions содержит список всех версий CustomResources, которые когда-либо сохранялись. Отслеживание этих версий позволяет выполнить миграцию сохранённых версий в etcd. Это поле можно изменять, чтобы контроллер миграции мог завершить перенос на другую версию (убедившись, что в хранилище не осталось старых объектов), а затем удалить остальные версии из этого списка. Версии нельзя удалять из `spec.versions`, пока они присутствуют в этом списке. |
CustomResourceDefinitionList
CustomResourceDefinitionList — это список объектов CustomResourceDefinition.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет схему этой версии представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
items *CustomResourceDefinition array |
items содержит отдельные объекты CustomResourceDefinition |
kindstring |
Kind — строковое значение, представляющее REST-ресурс, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Изменение не допускается. В CamelCase. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataListMeta |
Стандартные метаданные объекта. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata |
CustomResourceColumnDefinition
CustomResourceColumnDefinition задаёт столбец для вывода на стороне сервера.
| Поле | Описание |
|---|---|
descriptionstring |
description — понятное человеку описание этого столбца. |
formatstring |
format — необязательное определение типа OpenAPI для этого столбца. Формат 'name' применяется к столбцу основного идентификатора, чтобы помочь клиентам распознать имя ресурса в столбце. Подробнее: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types. |
jsonPath *string |
jsonPath — простой путь JSON (то есть с нотацией массивов), который вычисляется для каждого пользовательского ресурса, чтобы получить значение для этого столбца. |
name *string |
name — понятное человеку имя столбца. |
priorityinteger |
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 должно быть задано. |
webhookWebhookConversion |
webhook описывает способ вызова вебхука преобразования. Обязателен, если для `strategy` задано значение `"Webhook"`. |
CustomResourceDefinitionCondition
CustomResourceDefinitionCondition содержит сведения о текущем условии этого пода.
| Поле | Описание |
|---|---|
lastTransitionTimeTime |
lastTransitionTime — время последнего перехода условия из одного состояния в другое. |
messagestring |
message — понятное человеку сообщение с подробностями о последнем переходе. |
observedGenerationinteger |
observedGeneration указывает значение .metadata.generation, на основании которого было установлено условие. Например, если текущее значение .metadata.generation равно 12, а значение .status.conditions[x].observedGeneration равно 9, условие устарело относительно текущего состояния экземпляра. |
reasonstring |
reason — уникальная причина последнего перехода условия, состоящая из одного слова в формате CamelCase. |
status *string |
status — состояние условия. Возможные значения: True, False, Unknown. |
type *string |
type — тип условия. Типы включают Established, NamesAccepted и Terminating. |
CustomResourceDefinitionNames
CustomResourceDefinitionNames указывает имена, используемые для предоставления этого CustomResourceDefinition
| Поле | Описание |
|---|---|
categoriesstring array |
categories — список групп ресурсов, к которым относится этот пользовательский ресурс (например, 'all'). Этот список публикуется в документах обнаружения API и используется клиентами для поддержки таких вызовов, как `kubectl get all`. |
kind *string |
kind — сериализованное имя типа ресурса. Обычно оно записывается в CamelCase и имеет форму единственного числа. Экземпляры пользовательских ресурсов используют это значение в качестве атрибута `kind` в вызовах API. |
listKindstring |
listKind — сериализованное имя типа списка для этого ресурса. По умолчанию — "`kind`List". |
plural *string |
plural — имя ресурса во множественном числе, используемое при предоставлении ресурса. Пользовательские ресурсы доступны по адресу `/apis/\ |
shortNamesstring array |
shortNames — краткие имена ресурса, доступные в документах обнаружения API и используемые клиентами для поддержки таких вызовов, как `kubectl get \ |
singularstring |
singular — имя ресурса в единственном числе. Должно состоять только из строчных букв. По умолчанию используется имя `kind` в нижнем регистре. |
CustomResourceDefinitionVersion
CustomResourceDefinitionVersion описывает версию CRD.
| Поле | Описание |
|---|---|
additionalPrinterColumnsCustomResourceColumnDefinition array |
additionalPrinterColumns задаёт дополнительные столбцы, возвращаемые в выводе Table. Подробнее: https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables. Если столбцы не заданы, используется один столбец, отображающий возраст пользовательского ресурса. |
deprecatedboolean |
deprecated указывает, что эта версия API пользовательского ресурса устарела. Если задано значение true, в ответ сервера на запросы API этой версии добавляется предупреждающий заголовок. По умолчанию — false. |
deprecationWarningstring |
deprecationWarning заменяет предупреждение по умолчанию, возвращаемое клиентам API. Может быть задано только при значении `deprecated`, равном true. Предупреждение по умолчанию сообщает об устаревании этой версии и рекомендует использовать самую новую обслуживаемую версию с таким же или более высоким уровнем стабильности, если она существует. |
name *string |
name — имя версии, например «v1», «v2beta1» и т. д. Если `served` имеет значение true, пользовательские ресурсы этой версии доступны по адресу `/apis/\ |
schemaCustomResourceValidation |
schema описывает схему, используемую для проверки, удаления неизвестных полей и назначения значений по умолчанию для этой версии пользовательского ресурса. |
selectableFieldsSelectableField array |
selectableFields задаёт пути к полям, которые можно использовать в качестве селекторов полей. Разрешено не более 8 выбираемых полей. См. https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors |
served *boolean |
served — флаг, включающий или отключающий предоставление этой версии через REST API |
storage *boolean |
storage указывает, следует ли использовать эту версию при сохранении пользовательских ресурсов в хранилище. Ровно одна версия должна иметь значение storage=true. |
subresourcesCustomResourceSubresources |
subresources задаёт подресурсы, доступные для этой версии определённого пользовательского ресурса. |
CustomResourceSubresourceScale
CustomResourceSubresourceScale определяет способ предоставления подресурса scale для CustomResources.
| Поле | Описание |
|---|---|
labelSelectorPathstring |
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.
| Поле | Описание |
|---|---|
scaleCustomResourceSubresourceScale |
scale указывает, что пользовательский ресурс должен предоставлять подресурс `/scale`, возвращающий объект Scale типа `autoscaling/v1`. |
statusCustomResourceSubresourceStatus |
status указывает, что пользовательский ресурс должен предоставлять подресурс `/status`. Если он включён: 1. запросы к основной конечной точке пользовательского ресурса игнорируют изменения раздела `status` объекта. 2. запросы к подресурсу `/status` пользовательского ресурса игнорируют изменения всех частей объекта, кроме раздела `status`. |
CustomResourceValidation
CustomResourceValidation — это список методов проверки CustomResources.
| Поле | Описание |
|---|---|
openAPIV3SchemaJSONSchemaProps |
openAPIV3Schema — схема OpenAPI v3, используемая для проверки и удаления неизвестных полей. |
ExternalDocumentation
ExternalDocumentation позволяет ссылаться на внешний ресурс с расширенной документацией.
| Поле | Описание |
|---|---|
descriptionstring |
|
urlstring |
JSON
JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.
JSONSchemaProps
JSONSchemaProps — это схема JSON, соответствующая спецификации Draft 4 (http://json-schema.org/).
| Поле | Описание |
|---|---|
$refstring |
|
$schemastring |
|
additionalItemsJSONSchemaPropsOrBool |
|
additionalPropertiesJSONSchemaPropsOrBool |
|
allOfJSONSchemaProps array |
|
anyOfJSONSchemaProps array |
|
defaultJSON |
default — значение по умолчанию для неопределённых полей объекта. Установка значений по умолчанию — бета-функция, доступная при включённом feature gate CustomResourceDefaulting. Для установки значений по умолчанию требуется, чтобы spec.preserveUnknownFields имело значение false. |
definitionsobject |
|
dependenciesobject |
|
descriptionstring |
|
enumJSON array |
|
exampleJSON |
|
exclusiveMaximumboolean |
|
exclusiveMinimumboolean |
|
externalDocsExternalDocumentation |
|
formatstring |
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. |
idstring |
|
itemsJSONSchemaPropsOrArray |
|
maxItemsinteger |
|
maxLengthinteger |
|
maxPropertiesinteger |
|
maximumnumber |
|
minItemsinteger |
|
minLengthinteger |
|
minPropertiesinteger |
|
minimumnumber |
|
multipleOfnumber |
|
notJSONSchemaProps |
|
nullableboolean |
|
oneOfJSONSchemaProps array |
|
patternstring |
|
patternPropertiesobject |
|
propertiesobject |
|
requiredstring array |
|
titlestring |
|
typestring |
|
uniqueItemsboolean |
|
x-kubernetes-embedded-resourceboolean |
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-stringboolean |
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-keysstring array |
x-kubernetes-list-map-keys аннотирует массив с типом списка x-kubernetes-list-type `map`, задавая ключи, используемые в качестве индекса карты. Этот тег ДОЛЖЕН использоваться только для списков, у которых расширение "x-kubernetes-list-type" имеет значение "map". Кроме того, указанные для этого атрибута значения должны быть полями скалярного типа в дочерней структуре (вложенность не поддерживается). Указанные свойства должны быть обязательными или иметь значение по умолчанию, чтобы обеспечить наличие этих свойств во всех элементах списка. |
x-kubernetes-list-typestring |
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-typestring |
x-kubernetes-map-type аннотирует объект, чтобы подробнее описать его топологию. Это расширение следует использовать только при type со значением object; оно может принимать одно из двух значений: 1) `granular`: такие карты являются обычными картами (парами «ключ-значение»), а их поля независимы друг от друга (ими могут отдельно управлять разные участники). Это поведение по умолчанию для всех карт. 2) `atomic`: список рассматривается как единое целое, подобно скалярному значению. Атомарные карты при обновлении заменяются целиком. |
x-kubernetes-preserve-unknown-fieldsboolean |
x-kubernetes-preserve-unknown-fields предотвращает удаление API-сервером полей, не указанных в схеме проверки, на этапе декодирования. Это поведение рекурсивно распространяется на поля, но переключается на обычное удаление полей, если во вложенных элементах схемы указаны properties или additionalProperties. Значение может быть true или не задано. Значение false запрещено. |
x-kubernetes-validationsValidationRule 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 — пространство имён сервиса. Обязательное поле |
pathstring |
path — необязательный путь URL, по которому будет вызываться веб-перехватчик. |
portinteger |
port — необязательный порт сервиса, по которому будет вызываться веб-перехватчик. `port` должен быть допустимым номером порта (от 1 до 65535 включительно). Для обратной совместимости по умолчанию используется 443. |
ValidationRule
ValidationRule описывает правило проверки, записанное на языке выражений CEL.
| Поле | Описание |
|---|---|
fieldPathstring |
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$']` |
messagestring |
Message — сообщение, отображаемое при сбое проверки. Если Rule содержит переводы строки, сообщение обязательно. Сообщение не должно содержать переводов строки. Если значение не задано, используется сообщение "failed rule: {Rule}". Например: "должен быть URL, хост которого соответствует spec.host" |
messageExpressionstring |
MessageExpression задаёт выражение CEL, результатом вычисления которого является сообщение об ошибке проверки, возвращаемое при сбое этого правила. Поскольку messageExpression используется как сообщение об ошибке, результатом его вычисления должна быть строка. Если для правила заданы и message, и messageExpression, при сбое проверки будет использоваться messageExpression. Если при вычислении messageExpression возникает ошибка времени выполнения, она записывается в журнал, а сообщение об ошибке проверки формируется так, как если бы поле messageExpression не было задано. Если результат вычисления messageExpression — пустая строка, строка, содержащая только пробелы, или строка с переводами строк, сообщение об ошибке проверки также формируется так, как если бы поле messageExpression не было задано; факт получения пустой строки, строки только с пробелами или строки с переводами строк записывается в журнал. messageExpression имеет доступ ко всем тем же переменным, что и правило; отличается только тип возвращаемого значения. Пример: "x должно быть меньше max ("+string(self.max)+")" |
optionalOldSelfboolean |
optionalOldSelf используется, чтобы включить вычисление правила перехода даже при первоначальном создании объекта или если в старом объекте отсутствует значение. Если параметр включён, `oldSelf` будет необязательным значением CEL, равным `None`, если старого значения нет или объект создаётся впервые. Наличие oldSelf можно проверить с помощью `oldSelf.hasValue()`, а после проверки получить его значение с помощью `oldSelf.value()`. Дополнительные сведения см. в документации CEL о необязательных типах: https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypes. Параметр можно задать только в том случае, если в `rule` используется `oldSelf`. |
reasonstring |
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-соединения с веб-перехватчиком.
| Поле | Описание |
|---|---|
caBundlestring |
caBundle — пакет сертификатов CA в кодировке PEM, который будет использоваться для проверки сертификата сервера веб-перехватчика. Если значение не задано, apiserver использует системные корневые сертификаты доверия. |
serviceServiceReference |
service — ссылка на сервис для этого веб-перехватчика. Необходимо указать либо service, либо url. Если веб-перехватчик работает внутри кластера, следует использовать `service`. |
urlstring |
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 описывает способ вызова веб-перехватчика преобразования
| Поле | Описание |
|---|---|
clientConfigWebhookClientConfig |
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/