CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition представляет ресурс, который должен быть экспонирован на сервере API. Его имя ДОЛЖНО быть в формате <.spec.name>.<.spec.group>.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
-
metadata (ObjectMeta)
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-
spec (CustomResourceDefinitionSpec), требуется
spec описывает, как пользователь хочет видеть ресурсы
-
status (CustomResourceDefinitionStatus)
status указывает фактическое состояние CustomResourceDefinition
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec описывает, как пользователь хочет видеть свой ресурс
-
group (строка), требуется
group — API-группа определенного пользовательского ресурса. Пользовательские ресурсы обслуживаются по адресу
/apis/\<group>/.... Должно совпадать с именем CustomResourceDefinition (в формате\<names.plural>.\<group>). -
names (CustomResourceDefinitionNames), требуется
names указывают имена ресурса и типа для пользовательского ресурса.
CustomResourceDefinitionNames указывает имена для обслуживания этого CustomResourceDefinition
-
names.kind (строка), требуется
kind — сериализованный тип ресурса. Обычно в формате CamelCase и единственного числа. Экземпляры пользовательских ресурсов будут использовать это значение как атрибут
kindв вызовах API. -
names.plural (строка), требуется
plural — множественное число имени ресурса для обслуживания. Пользовательские ресурсы обслуживаются по адресу
/apis/\<group>/\<version>/.../\<plural>. Должно совпадать с именем CustomResourceDefinition (в формате\<names.plural>.\<group>). Должно быть в нижнем регистре. -
names.categories ([]string)
Атомарно: будет заменено во время слияния
categories — список сгруппированных ресурсов, к которым относится этот пользовательский ресурс (например, 'all'). Это публикуется в документах обнаружения API и используется клиентами для поддержки вызовов, таких как
kubectl get all. -
names.listKind (строка)
listKind — сериализованный тип списка для этого ресурса. По умолчанию "
kindList". -
names.shortNames ([]string)
Атомарно: будет заменено во время слияния
shortNames — короткие имена ресурса, экспонируемые в документах обнаружения API и используемые клиентами для поддержки вызовов, таких как
kubectl get \<shortname>. Должно быть в нижнем регистре. -
names.singular (строка)
singular — единственное число имени ресурса. Должно быть в нижнем регистре. По умолчанию — строка
kind, переведенная в нижний регистр.
-
-
scope (строка), требуется
scope указывает, является ли определенный пользовательский ресурс кластерным или именованным. Допустимые значения:
ClusterиNamespaced.
-
версии ([]CustomResourceDefinitionVersion), обязательно
Атомарно: будет заменено во время слияния
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.
CustomResourceDefinitionVersion описывает версию для CRD.
-
versions.name (строка), обязательно
name — имя версии, например, «v1», «v2beta1» и т. д. Пользовательские ресурсы предоставляются в этой версии по адресу
/apis/\<group>/\<version>/..., еслиservedравно true. -
versions.served (булево), обязательно
served — флаг, позволяющий/запрещающий предоставление этой версии через REST API
-
versions.storage (булево), обязательно
storage указывает, что эта версия должна использоваться при сохранении пользовательских ресурсов в хранилище. Должна быть ровно одна версия со storage=true.
-
versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
Атомарно: будет заменено во время слияния
additionalPrinterColumns — дополнительные столбцы, возвращаемые в табличном выводе. Подробности см. в https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables. Если столбцы не указаны, используется один столбец, отображающий время создания пользовательского ресурса.
CustomResourceColumnDefinition определяет столбец для печати на стороне сервера.
-
versions.additionalPrinterColumns.jsonPath (строка), обязательно
jsonPath — простой JSON-путь (т. е. с обозначением массива), который вычисляется для каждого пользовательского ресурса, чтобы получить значение для этого столбца.
-
versions.additionalPrinterColumns.name (строка), обязательно
name — удобочитаемое имя столбца.
-
versions.additionalPrinterColumns.type (строка), обязательно
type — определение типа OpenAPI для этого столбца. Подробности см. в https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types.
-
versions.additionalPrinterColumns.description (строка)
description — удобочитаемое описание этого столбца.
-
versions.additionalPrinterColumns.format (строка)
format — необязательное определение типа OpenAPI для этого столбца. Формат «имя» применяется к столбцу с первичным идентификатором для помощи клиентам в определении столбца в качестве имени ресурса. Подробности см. в https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types.
-
versions.additionalPrinterColumns.priority (int32)
priority — целое число, определяющее относительную важность этого столбца по сравнению с другими. Более низкие числа считаются более важными. Столбцы, которые могут быть опушены в ситуациях ограниченного места, должны иметь приоритет больше 0.
-
-
versions.deprecated (булево)
deprecated указывает, что эта версия API пользовательского ресурса устарела. При значении true запросы API к этой версии получают заголовок предупреждения в ответе сервера. По умолчанию false.
-
versions.deprecationWarning (строка)
deprecationWarning переопределяет стандартное предупреждение, возвращаемое клиентам API. Может быть установлено только при
deprecatedравном true. Стандартное предупреждение указывает, что эта версия устарела, и рекомендует использовать самую новую доступную версию с равной или большей стабильностью, если таковая существует. -
versions.schema (CustomResourceValidation)
schema описывает схему, используемую для проверки, обрезки и настройки по умолчанию этой версии пользовательского ресурса.
CustomResourceValidation — список методов проверки для CustomResources.
-
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema — схема OpenAPI v3 для использования в проверке и обрезке.
-
-
versions.selectableFields ([]SelectableField)
Атомарно: будет заменено во время слияния
selectableFields — пути к полям, которые могут использоваться в качестве селекторов полей. Максимальное количество разрешённых селектируемых полей — 8. См. https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors
SelectableField определяет JSON-путь поля, которое может использоваться с селекторами полей.
-
versions.selectableFields.jsonPath (строка), обязательно
jsonPath — простой JSON-путь, который вычисляется для каждого пользовательского ресурса, чтобы получить значение селектора полей. Разрешены только JSON-пути без обозначения массива. Должен указывать на поле типа string, boolean или integer. Разрешены типы с перечислением значений и строки с форматами. Если jsonPath ссылается на отсутствующее поле в ресурсе, jsonPath возвращает пустую строку. Не должен указывать на поля метаданных. Обязательно.
-
-
versions.subresources (CustomResourceSubresources)
subresources указывают, какие подресурсы имеет эта версия определённого пользовательского ресурса.
CustomResourceSubresources определяет подресурсы status и scale для CustomResources.
-
versions.subresources.scale (CustomResourceSubresourceScale)
scale указывает, что пользовательский ресурс должен предоставлять подресурс
/scale, который возвращает объектautoscaling/v1Scale.CustomResourceSubresourceScale определяет, как предоставлять подресурс scale для CustomResources.
-
versions.subresources.scale.specReplicasPath (строка), обязательно
specReplicasPath определяет JSON-путь внутри пользовательского ресурса, соответствующий значению
spec.replicasScale. Разрешены только JSON-пути без обозначения массива. Должен быть JSON-путь под.spec. Если в пользовательском ресурсе нет значения по указанному пути, подресурс/scaleвернёт ошибку при GET. -
versions.subresources.scale.statusReplicasPath (строка), обязательно
statusReplicasPath определяет JSON-путь внутри пользовательского ресурса, соответствующий значению
status.replicasScale. Разрешены только JSON-пути без обозначения массива. Должен быть JSON-путь под.status. Если в пользовательском ресурсе нет значения по указанному пути, значениеstatus.replicasподресурса/scaleбудет по умолчанию 0. -
versions.subresources.scale.labelSelectorPath (строка)
labelSelectorPath определяет JSON-путь внутри пользовательского ресурса, соответствующий значению
status.selectorScale. Разрешены только JSON-пути без обозначения массива. Должен быть JSON-путь под.statusили.spec. Должен быть установлен для работы с HorizontalPodAutoscaler. Поле, на которое указывает этот JSON-путь, должно быть строковым полем (а не сложной структурой селектора), содержащим сериализованный селектор меток в строковом формате. Более подробная информация: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource Если в пользовательском ресурсе нет значения по указанному пути, значениеstatus.selectorподресурса/scaleбудет по умолчанию пустой строкой.
-
-
versions.subresources.status (CustomResourceSubresourceStatus)
status указывает, что пользовательский ресурс должен предоставлять подресурс
/status. При включении: 1. запросы к основному конечному пункту пользовательского ресурса игнорируют изменения вstatusразделе объекта. 2. запросы к подресурсу/statusпользовательского ресурса игнорируют изменения в любой части объекта кромеstatusраздела.CustomResourceSubresourceStatus определяет, как предоставлять подресурс status для CustomResources. Статус представлен
.statusJSON-путем внутри CustomResource. При установке: * предоставляется подресурс /status для пользовательского ресурса * запросы PUT к подресурсу /status принимают объект пользовательского ресурса и игнорируют изменения, кроме раздела status * запросы PUT/POST/PATCH к пользовательскому ресурсу игнорируют изменения в разделе status
-
-
-
преобразование (CustomResourceConversion)
преобразование определяет параметры преобразования для CRD.
CustomResourceConversion описывает, как преобразовать разные версии CR.
-
преобразование.стратегия (строка), обязательно
стратегия определяет, как пользовательские ресурсы преобразуются между версиями. Допустимые значения: -
"None": преобразователь изменяет только apiVersion и не затрагивает другие поля пользовательского ресурса. -"Webhook": сервер API вызовет внешний вебхук для выполнения преобразования. Для этого варианта требуется дополнительная информация. Это требует, чтобы spec.preserveUnknownFields было false, а spec.conversion.webhook было установлено. -
преобразование.вебхук (WebhookConversion)
вебхук описывает, как вызывать вебхук для преобразования. Требуется, когда
strategyустановлено в"Webhook".WebhookConversion описывает, как вызывать вебхук для преобразования.
-
преобразование.вебхук.conversionReviewVersions ([]строка), обязательно
Атомарно: будет заменено во время слияния
conversionReviewVersions — упорядоченный список предпочтительных
ConversionReviewверсий, ожидаемых вебхуком. Сервер API использует первую поддерживаемую версию из списка. Если ни одна из указанных версий не поддерживается сервером API, преобразование пользовательского ресурса завершится ошибкой. Если в сохранённой конфигурации вебхука указаны разрешённые версии, которые не включают ни одной известной серверу API версии, вызовы вебхука завершатся ошибкой. -
преобразование.вебхук.clientConfig (WebhookClientConfig)
clientConfig содержит инструкции о том, как вызывать вебхук, если стратегия —
Webhook.WebhookClientConfig содержит информацию для создания TLS-соединения с вебхуком.
-
преобразование.вебхук.clientConfig.caBundle ([]байт)
caBundle — закодированная в PEM структура сертификата CA, которая будет использоваться для проверки сертификата сервера вебхука. Если не указано, используются системные корневые сертификаты доверенных центров на сервере API.
-
преобразование.вебхук.clientConfig.service (ServiceReference)
service — ссылка на службу для данного вебхука. Должен быть указан либо service, либо url.
Если вебхук работает внутри кластера, используйте
service.ServiceReference содержит ссылку на службу Service.legacy.k8s.io
-
преобразование.вебхук.clientConfig.service.name (строка), обязательно
name — имя службы. Обязательно
-
преобразование.вебхук.clientConfig.service.namespace (строка), обязательно
namespace — пространство имён службы. Обязательно
-
преобразование.вебхук.clientConfig.service.path (строка)
path — необязательный путь URL, по которому будет обращаться вебхук.
-
преобразование.вебхук.clientConfig.service.port (int32)
port — необязательный порт службы, по которому будет обращаться вебхук.
portдолжен быть действительным номером порта (от 1 до 65535 включительно). По умолчанию равен 443 для обратной совместимости.
-
-
преобразование.вебхук.clientConfig.url (строка)
url содержит расположение вебхука в стандартном формате URL (
scheme://host:port/path). Должен быть указан ровно один изurlилиservice.hostне должен ссылаться на службу, работающую в кластере; используйте полеserviceвместо этого. Хост может быть разрешен через внешний DNS в некоторых серверах API (например,kube-apiserverне может разрешить внутрикластерный DNS, так как это нарушит слои).hostтакже может быть IP-адресом.Обратите внимание, что использование
localhostили127.0.0.1в качествеhostрискованно, если вы не позаботились о запуске этого вебхука на всех узлах, на которых работает сервер API, которому может потребоваться обращение к этому вебхуку. Такие установки, вероятно, будут непереносимыми, то есть их нелегко развернуть в новом кластере.Схема должна быть "https"; URL должен начинаться с "https://".
Путь необязателен и, если присутствует, может быть любой строкой, допустимой в URL. Вы можете использовать путь для передачи произвольной строки вебхуку, например, идентификатор кластера.
Использование аутентификации пользователя или базовой аутентификации, например "user:password@", запрещено. Фрагменты ("#...") и параметры запроса ("?...") также запрещены.
-
-
-
-
preserveUnknownFields (булево)
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.
JSONSchemaProps
JSONSchemaProps — это JSON-схема, следующая спецификации Draft 4 (http://json-schema.org/).
$ref (строка)
$schema (строка)
-
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляет JSONSchemaProps или булевое значение. По умолчанию истинно для булевого свойства.
-
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляет JSONSchemaProps или булевое значение. По умолчанию истинно для булевого свойства.
-
allOf ([]JSONSchemaProps)
Атомарный: будет заменён во время слияния
-
anyOf ([]JSONSchemaProps)
Атомарный: будет заменён во время слияния
-
default (JSON)
default — это значение по умолчанию для неопределённых полей объекта. Значения по умолчанию — это бета-функция в рамках функции CustomResourceDefaulting. Для установки значений по умолчанию требуется, чтобы spec.preserveUnknownFields было ложью.
JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.
definitions (map[string]JSONSchemaProps)
-
dependencies (map[string]JSONSchemaPropsOrStringArray)
JSONSchemaPropsOrStringArray представляет JSONSchemaProps или массив строк.
description (строка)
-
enum ([]JSON)
Атомарный: будет заменён во время слияния
JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.
-
example (JSON)
JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.
exclusiveMaximum (булево)
exclusiveMinimum (булево)
-
externalDocs (ExternalDocumentation)
ExternalDocumentation позволяет ссылаться на внешний ресурс для расширенной документации.
externalDocs.description (строка)
externalDocs.url (строка)
-
format (строка)
format — это строка формата OpenAPI v3. Неизвестные форматы игнорируются. Проверяются следующие форматы:
- bsonobjectid: идентификатор документа bson, т. е. строка из 24 шестнадцатеричных символов - uri: URI, как он анализируется Golang net/url.ParseRequestURI - email: адрес электронной почты, как он анализируется Golang net/mail.ParseAddress - hostname: допустимое представление имени хоста в Интернете, как определено в RFC 1034, раздел 3.1 [RFC1034]. - ipv4: IP-адрес IPv4, как он анализируется Golang net.ParseIP - ipv6: IP-адрес 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 как "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 (строка)
-
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray представляет значение, которое может быть либо JSONSchemaProps, либо массивом JSONSchemaProps. В основном для целей сериализации.
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps)
nullable (булево)
-
oneOf ([]JSONSchemaProps)
Атомарный: будет заменён во время слияния
pattern (строка)
patternProperties (map[string]JSONSchemaProps)
properties (map[string]JSONSchemaProps)
-
required ([]string)
Атомарный: будет заменён во время слияния
title (строка)
type (строка)
uniqueItems (булево)
-
x-kubernetes-embedded-resource (булево)
x-kubernetes-embedded-resource определяет, что значение является вложенным объектом Kubernetes runtime.Object с TypeMeta и ObjectMeta. Тип должен быть object. Разрешается дополнительно ограничивать вложенный объект. kind, apiVersion и metadata проверяются автоматически. x-kubernetes-preserve-unknown-fields разрешено быть истинным, но не обязательно, если объект полностью указан (до kind, apiVersion, metadata).
-
x-kubernetes-int-or-string (булево)
x-kubernetes-int-or-string указывает, что это значение является либо целым числом, либо строкой. Если это истинно, разрешается пустой тип, и тип в качестве дочернего элемента anyOf разрешён, если соблюдаются следующие правила:
- anyOf:
- type: целое число
- type: строка
- allOf:
- anyOf:
- type: целое число
- type: строка
- ... ноль или более
- anyOf:
- anyOf:
-
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 возможных значения:
-
atomic: список обрабатывается как единый объект, как скаляр. Атомарные списки будут полностью заменены при обновлении. Это расширение можно использовать для списков любого типа (структура, скаляр и т. д.). -
set: множества — это списки, у которых не должно быть нескольких элементов с одинаковым значением. Каждое значение должно быть скаляром, объектом с x-kubernetes-map-typeatomicили массивом с x-kubernetes-list-typeatomic. -
map: Эти списки похожи на карты, поскольку их элементы имеют ключ, отличный от индекса, используемый для их идентификации. Порядок сохраняется при слиянии. Тег map должен использоваться только для списка с элементами типа object. По умолчанию для массивов используется атомарное значение.
-
-
x-kubernetes-map-type (строка)
x-kubernetes-map-type добавляет к объекту дополнительное описание его топологии. Это расширение должно использоваться только при type = object и может иметь 2 возможных значения:
-
granular: Эти карты являются фактическими картами (пары ключ-значение), и каждое поле независимо друг от друга (их можно изменять разными агентами). Это поведение по умолчанию для всех карт. -
atomic: список обрабатывается как единый объект, как скаляр. Атомарные карты будут полностью заменены при обновлении.
-
-
x-kubernetes-preserve-unknown-fields (булево)
x-kubernetes-preserve-unknown-fields останавливает этап декодирования API-сервера от удаления полей, которые не указаны в схеме проверки. Это влияет на поля рекурсивно, но возвращает нормальное поведение обрезки, если вложенные свойства или additionalProperties указаны в схеме. Это может быть либо истинно, либо неопределённо. Ложь запрещена.
-
x-kubernetes-validations ([]ValidationRule)
Стратегия обработки изменений: слияние по ключу
ruleКарта: уникальные значения по ключу rule будут сохранены во время слияния
x-kubernetes-validations описывает список правил валидации, написанных на языке выражений CEL.
ValidationRule описывает правило валидации, написанное на языке выражений CEL.
-
x-kubernetes-validations.rule (строка), обязательно
Rule представляет выражение, которое будет оцениваться CEL. Ссылка: https://github.com/google/cel-spec Правило ограничено областью расширения x-kubernetes-validations в схеме. Переменная
selfв выражении CEL связана со значением в области. Пример: - Правило, ограниченное корнем ресурса с подресурсом status: {"rule": "self.status.actual <= self.spec.maxDesired"}Если правило ограничено объектом со свойствами, доступные свойства объекта выбираются по полю через
self.fieldи наличие поля можно проверить черезhas(self.field). Поля со значением Null обрабатываются как отсутствующие поля в выражениях CEL. Если правило ограничено объектом с дополнительными свойствами (т.е. картой), значения карты доступны черезself[mapKey], включение карты можно проверить черезmapKey in self, а все записи карты доступны через макросы и функции CEL, такие какself.all(...). Если правило ограничено массивом, элементы массива доступны черезself[i]и также через макросы и функции. Если правило ограничено скаляром,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сохраняются, но значения перезаписываются значениями вYпри пересечении наборов ключейXиY. Элементы вYс непересекающимися ключами добавляются, сохраняя частичный порядок.
Если
ruleиспользует переменнуюoldSelf, это неявныйtransition rule.По умолчанию, переменная
oldSelfимеет тот же тип, что иself. КогдаoptionalOldSelfравно true, переменнаяoldSelfявляется переменной CEL optional, значение которой() имеет тот же тип, что иself. Подробности см. в документации для поляoptionalOldSelf.Правила перехода по умолчанию применяются только к запросам UPDATE и пропускаются, если старое значение не найдено. Вы можете включить правило перехода в безусловную оценку, установив
optionalOldSelfв true. -
x-kubernetes-validations.fieldPath (строка)
fieldPath представляет путь к полю, возвращаемый при ошибке валидации. Он должен быть относительным путем JSON (т.е. с обозначением массива), ограниченным областью расширения x-kubernetes-validations в схеме и ссылающимся на существующее поле. Например, когда валидация проверяет, есть ли конкретное атрибут
fooв картеtestMap, fieldPath может быть установлен в.testMap.foo. Если валидация проверяет, что два списка должны иметь уникальные атрибуты, fieldPath может быть установлен в любом из списков: например,.testList. Он не поддерживает числовые индексы списков. Он поддерживает операции с подэлементами для ссылки на существующее поле. Более подробную информацию о поддержке JSONPath в Kubernetes см. в документации. Численные индексы массива не поддерживаются. Для имен полей, содержащих специальные символы, используйте['specialName']для ссылки на имя поля. Например, для атрибутаfoo.34$в спискеtestList, fieldPath может быть установлен в.testList['foo.34$'] -
x-kubernetes-validations.message (строка)
Message представляет сообщение, отображаемое при ошибке валидации. Сообщение обязательно, если Rule содержит переводы строк. Сообщение не должно содержать переводы строк. Если не задано, сообщение равно "ошибка правила: {Правило}". Например, "должно быть URL с хостом, соответствующим spec.host"
-
x-kubernetes-validations.messageExpression (строка)
MessageExpression объявляет выражение CEL, которое вычисляет сообщение об ошибке валидации, возвращаемое при ошибке этого правила. Поскольку messageExpression используется как сообщение об ошибке, оно должно вычисляться в строку. Если присутствуют как message, так и messageExpression, при ошибке валидации используется messageExpression. Если messageExpression приводит к ошибке выполнения, ошибка выполнения регистрируется, а сообщение об ошибке валидации генерируется так, как если бы поле messageExpression не было задано. Если messageExpression вычисляет пустую строку, строку только с пробелами или строку, содержащую переводы строк, сообщение об ошибке валидации также будет сгенерировано так, как если бы поле messageExpression не было задано, и тот факт, что messageExpression выдал пустую строку/строку только с пробелами/строку с переводами строк, будет залогирован. messageExpression имеет доступ ко всем тем же переменным, что и правило; единственное отличие — тип возвращаемого значения. Пример: "x должно быть меньше max ("+string(self.max)+")"
-
x-kubernetes-validations.optionalOldSelf (логическое значение)
optionalOldSelf используется для включения перехода по правилу даже при первом создании объекта или если старого объекта нет.
При включении
oldSelfбудет переменной CEL optional, значение которой будетNoneесли старое значение отсутствует или при первоначальном создании объекта.Вы можете проверить наличие oldSelf с помощью
oldSelf.hasValue()и затем распаковать его с помощьюoldSelf.value(). См. документацию CEL по типам Optional для получения дополнительной информации: https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypesНе может быть установлено, если
oldSelfиспользуется вrule. -
x-kubernetes-validations.reason (строка)
reason предоставляет читаемую машиной причину ошибки валидации, которая возвращается вызывающей стороне, когда запрос не проходит проверку по этому правилу валидации. Код HTTP-статуса, возвращаемый вызывающей стороне, будет соответствовать причине первой ошибки валидации. В настоящее время поддерживаются причины: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". Если не задано, по умолчанию используется "FieldValueInvalid". Все добавляемые в будущем причины должны приниматься клиентами при чтении этого значения, а неизвестные причины должны обрабатываться как FieldValueInvalid.
-
СтатусCustomResourceDefinition
CustomResourceDefinitionStatus указывает состояние CustomResourceDefinition
-
acceptedNames (CustomResourceDefinitionNames)
acceptedNames — это имена, фактически используемые для обнаружения. Они могут отличаться от имён в спецификации.
CustomResourceDefinitionNames указывает имена для обслуживания данного CustomResourceDefinition
-
acceptedNames.kind (string), required
kind — это сериализованное имя ресурса. Обычно оно записано с использованием CamelCase и является единственным. Экземпляры пользовательских ресурсов будут использовать это значение в качестве атрибута
kindв вызовах API. -
acceptedNames.plural (string), required
plural — это множественное число имени ресурса для обслуживания. Пользовательские ресурсы обслуживаются под
/apis/\<group>/\<version>/.../\<plural>. Должно совпадать с именем CustomResourceDefinition (в формате\<names.plural>.\<group>). Все символы должны быть в нижнем регистре. -
acceptedNames.categories ([]string)
Атомарно: будет заменено во время слияния
categories — это список групп ресурсов, к которым относится этот пользовательский ресурс (например, 'all'). Это публикуется в документах обнаружения API и используется клиентами для поддержки вызовов, таких как
kubectl get all. -
acceptedNames.listKind (string)
listKind — это сериализованное имя списка для этого ресурса. По умолчанию равно "
kindList". -
acceptedNames.shortNames ([]string)
Атомарно: будет заменено во время слияния
shortNames — это короткие имена для ресурса, опубликованные в документах обнаружения API и используемые клиентами для поддержки вызовов, таких как
kubectl get \<shortname>. Все символы должны быть в нижнем регистре. -
acceptedNames.singular (string)
singular — это единственное число имени ресурса. Все символы должны быть в нижнем регистре. По умолчанию равно нижнему регистру
kind.
-
-
conditions ([]CustomResourceDefinitionCondition)
Массив: уникальные значения по ключу будут сохранены во время слияния
conditions указывают состояние для конкретных аспектов CustomResourceDefinition
CustomResourceDefinitionCondition содержит подробности о текущем состоянии этого под.
-
conditions.status (string), required
status — состояние условия. Может быть True, False или Unknown.
-
conditions.type (string), required
type — тип условия. Типы включают Established, NamesAccepted и Terminating.
-
conditions.lastTransitionTime (Time)
lastTransitionTime — последнее время, когда состояние перешло из одного статуса в другой.
Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих методов фабрики, предлагаемых пакетом time.
-
conditions.message (string)
message — удобочитаемое сообщение, указывающее подробности о последнем переходе.
-
conditions.reason (string)
reason — уникальное однословное имя (CamelCase) причины последнего перехода состояния.
-
-
storedVersions ([]string)
Атомарно: будет заменено во время слияния
storedVersions перечисляет все версии CustomResources, которые когда-либо сохранялись. Отслеживание этих версий позволяет реализовать путь миграции для сохранённых версий в etcd. Поле изменяемо, поэтому контроллер миграции может завершить миграцию в другую версию (обеспечив, что старые объекты не останутся в хранилище), а затем удалить остальные версии из этого списка. Версии не могут быть удалены из
spec.versionsпока они существуют в этом списке.
CustomResourceDefinitionList
CustomResourceDefinitionList — это список объектов CustomResourceDefinition.
-
items ([]CustomResourceDefinition), required
items — список отдельных объектов CustomResourceDefinition.
-
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 (ListMeta)
Стандартные метаданные объекта. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/custom-resource-definition-v1/