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. -
versions ([]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 для этого столбца. Формат 'name' применяется к столбцу основного идентификатора, чтобы помочь клиентам определить, что столбец — это имя ресурса. См. https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types для получения подробностей.
-
versions.additionalPrinterColumns.priority (int32)
priority — целое число, определяющее относительную важность этого столбца по сравнению с другими. Более низкие числа считаются более высокими приоритетами. Столбцы, которые могут быть пропущены в ограниченных сценариях, должны иметь приоритет выше 0.
-
-
versions.deprecated (булево)
deprecated указывает, что эта версия API пользовательских ресурсов устарела. При установке в значение true запросы API к этой версии получают заголовок предупреждения в ответ сервера. По умолчанию false.
-
versions.deprecationWarning (строка)
deprecationWarning переопределяет стандартное предупреждение, возвращаемое клиентам API. Может быть установлено только при
deprecatedравно true. Стандартное предупреждение указывает, что эта версия устарела, и рекомендует использовать новейшую обработанную версию с такой же или большей стабильностью, если она существует. -
versions.schema (CustomResourceValidation)
schema описывает схему, используемую для проверки, обрезки и настройки по умолчанию для этой версии пользовательского ресурса.
CustomResourceValidation — список методов проверки для CustomResources.
-
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema — схема OpenAPI v3, используемая для проверки и обрезки.
-
-
versions.subresources (CustomResourceSubresources)
subresources указывают, какие субресурсы имеет эта версия определённого пользовательского ресурса.
CustomResourceSubresources определяет субресурсы status и scale для CustomResources.
-
versions.subresources.scale (CustomResourceSubresourceScale)
scale указывает, что пользовательский ресурс должен обслуживать субресурс
/scale, который возвращает объектautoscaling/v1Scale.CustomResourceSubresourceScale определяет, как обслуживать субресурс масштаба для 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, который будет использоваться для проверки сертификата сервера вебхука. Если не указано, используются системные корневые сертификаты доверия на apiserver.
-
преобразование.вебхук.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 в некоторых apiservers (например,kube-apiserverне может разрешить входящий DNS, так как это нарушение уровней).hostтакже может быть IP-адресом.Обратите внимание, что использование
localhostили127.0.0.1в качествеhostрискованно, если вы не предприняли тщательных мер для запуска этого вебхука на всех хостах, на которых работает apiserver, который может потребоваться для вызовов этого вебхука. Такие установки вряд ли будут переносимыми, то есть нелегко развернуть их в новом кластере.Схема должна быть "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-схема, следующая спецификации черновика 4 (http://json-schema.org/).
-
$ref (строка)
-
$schema (строка)
-
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляет JSONSchemaProps или булево значение. По умолчанию для булевого свойства установлено значение true.
-
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляет JSONSchemaProps или булево значение. По умолчанию для булевого свойства установлено значение true.
-
allOf ([]JSONSchemaProps)
-
anyOf ([]JSONSchemaProps)
-
default (JSON)
default — это значение по умолчанию для неопределённых полей объекта. Функция по умолчанию — это бета-функция, которая работает при включённой функции CustomResourceDefaulting. Для использования функции по умолчанию необходимо установить spec.preserveUnknownFields в значение false.
JSON представляет любое допустимое значение JSON. Поддерживаются следующие типы: bool, int64, float64, string, []interface{}, map[string]interface{} и nil.
-
definitions (map[string]JSONSchemaProps)
-
dependencies (map[string]JSONSchemaPropsOrStringArray)
JSONSchemaPropsOrStringArray представляет JSONSchemaProps или массив строк.
-
description (строка)
-
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(255,255,2559" - byte: закодированные двоичные данные в base64 - password: любой вид строки - date: строка даты, например, "2006-01-02", как определено в RFC3339 - duration: строка длительности, например, "22 ns", как анализируется функцией Golang time.ParseDuration или совместимая с форматом длительности Scala - datetime: строка даты и времени, например, "2014-12-15T19:30:20.000Z", как определено в RFC3339.
-
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 ([]строка)
-
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 может быть true, но не обязательно, если объект полностью определён (вплоть до kind, apiVersion, metadata).
-
x-kubernetes-int-or-string (булево)
x-kubernetes-int-or-string указывает, что это значение может быть целым числом или строкой. Если это значение true, разрешено пустой тип, и тип как дочерний элемент anyOf допускается, если соответствует одному из следующих шаблонов:
- anyOf:
- type: целое число
- type: строка
- allOf:
- anyOf:
- type: целое число
- type: строка
- ... ноль или более
- anyOf:
- anyOf:
-
x-kubernetes-list-map-keys ([]строка)
x-kubernetes-list-map-keys аннотирует массив с помощью x-kubernetes-list-type
map, указывая ключи, используемые в качестве индекса карты.Этот тег ДОЛЖЕН использоваться только для списков, для которых установлен расширенный атрибут "x-kubernetes-list-type" со значением "map". Кроме того, указанные значения для этого атрибута должны быть скалярным типом поля дочерней структуры (вложенность не поддерживается).
Указанные свойства должны быть либо обязательными, либо иметь значение по умолчанию, чтобы гарантировать, что эти свойства присутствуют во всех элементах списка.
-
x-kubernetes-list-type (строка)
x-kubernetes-list-type аннотирует массив, чтобы дополнительно описать его топологию. Этот расширенный атрибут должен использоваться только для списков и может иметь три возможных значения:
-
atomic: список обрабатывается как единое целое, подобно скаляру. Атомные списки будут полностью заменены при обновлении. Этот расширенный атрибут может использоваться для списков любого типа (структура, скаляр и т. д.). -
set: множества — это списки, которые не должны содержать несколько элементов с одинаковым значением. Каждое значение должно быть скаляром, объектом с x-kubernetes-map-typeatomicили массивом с x-kubernetes-list-typeatomic. -
map: Эти списки подобны картам тем, что их элементы имеют ключ, отличный от индекса, используемый для их идентификации. Порядок сохраняется при слиянии. Тэг карты должен использоваться только для списков с элементами типа объект. По умолчанию для массивов устанавливается значение atomic.
-
-
x-kubernetes-map-type (строка)
x-kubernetes-map-type аннотирует объект, чтобы дополнительно описать его топологию. Этот расширенный атрибут должен использоваться только при type = object и может принимать два возможных значения:
-
granular: Эти карты — это фактические карты (пары ключ-значение), и каждое поле независимо от других (каждое поле может быть изменено отдельными исполнителями). Это стандартное поведение для всех карт. -
atomic: список обрабатывается как единое целое, подобно скаляру. Атомные карты будут полностью заменены при обновлении.
-
-
x-kubernetes-preserve-unknown-fields (булево)
x-kubernetes-preserve-unknown-fields останавливает API-сервер от удаления полей, которые не указаны в схеме проверки. Это затрагивает поля рекурсивно, но возвращает обычное поведение отбрасывания, если в схеме указаны вложенные свойства или additionalProperties. Это значение может быть true или undefined. Значение false запрещено.
-
x-kubernetes-validations ([]ValidationRule)
Стратегия исправления: merge по ключу
ruleКарта: уникальные значения по ключу правило будут сохранены при слиянии
x-kubernetes-validations описывает список правил валидации, написанных на языке выражений CEL. Это поле находится в стадии альфа-версии. Использование этого поля требует активации функции
CustomResourceValidationExpressions.ValidationRule описывает правило валидации, написанное на языке выражений CEL.
-
x-kubernetes-validations.rule (string), обязательно
Rule представляет выражение, которое будет вычислено CEL. См.: https://github.com/google/cel-spec Правило привязано к месту расширения x-kubernetes-validations в схеме. Переменная
selfв выражении CEL связана со значением области видимости. Пример: - Правило, привязанное к корню ресурса с подресурсом состояния: {"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
- Массив, где схема элементов имеет "неизвестный тип"
- Объект, где схема дополнительных свойств имеет "неизвестный тип"
Доступны только имена свойств вида
[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с непересекающимися ключами добавляются, сохраняя их частичный порядок.
-
x-kubernetes-validations.fieldPath (string)
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 (string)
Message представляет сообщение, отображаемое при ошибке валидации. Сообщение обязательно, если правило содержит переводы строк. Сообщение не должно содержать переводов строк. Если не задано, сообщение будет "ошибка правила: {Правило}". Например: "должен быть URL-адресом с хостом, соответствующим spec.host"
-
x-kubernetes-validations.messageExpression (string)
MessageExpression объявляет выражение CEL, которое вычисляется в сообщение об ошибке валидации, возвращаемое при ошибке этого правила. Поскольку messageExpression используется как сообщение об ошибке, оно должно вычисляться в строку. Если и message, и messageExpression присутствуют в правиле, то messageExpression будет использоваться при ошибке валидации. Если messageExpression приводит к ошибке выполнения, ошибка выполнения регистрируется, и сообщение об ошибке валидации формируется так, как если бы поле messageExpression не было установлено. Если messageExpression вычисляется в пустую строку, строку, содержащую только пробелы, или строку, содержащую переводы строк, то сообщение об ошибке валидации также формируется так, как если бы поле messageExpression не было установлено, и тот факт, что messageExpression произвела пустую строку/строку только с пробелами/строку с переводами строк, будет записан в журнал. messageExpression имеет доступ ко всем тем же переменным, что и правило; единственное различие заключается в типе возвращаемого значения. Пример: "x должно быть меньше max ("+string(self.max)+")"
-
x-kubernetes-validations.reason (string)
reason предоставляет машиночитаемый код ошибки валидации, возвращаемый вызывающей стороне при ошибке запроса этого правила валидации. Код HTTP, возвращаемый вызывающей стороне, будет соответствовать коду причины первого не пройденного правила валидации. В настоящее время поддерживаемые коды причин: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". Если не задано, по умолчанию используется "FieldValueInvalid". Все добавляемые в будущем коды причин должны приниматься клиентами при чтении этого значения, а неизвестные коды причин должны обрабатываться как FieldValueInvalid.
-
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus указывает состояние CustomResourceDefinition
-
Принятые имена (CustomResourceDefinitionNames)
Принятые имена — это имена, которые фактически используются для предоставления информации о доступности. Они могут отличаться от имён в спецификации.
CustomResourceDefinitionNames указывает имена для предоставления CustomResourceDefinition
-
Принятые имена.тип (строка), обязательно
тип — сериализованный тип ресурса. Обычно пишется с использованием CamelCase и в единственном числе. Экземпляры пользовательских ресурсов будут использовать это значение в качестве атрибута
kindв вызовах API. -
Принятые имена.множественное число (строка), обязательно
множественное число — имя ресурса во множественном числе, которое используется для предоставления. Пользовательские ресурсы предоставляются по адресу
/apis/\<group>/\<version>/.../\<plural>. Должно совпадать с именем CustomResourceDefinition (в формате\<names.plural>.\<group>). Должно быть в нижнем регистре. -
Принятые имена.категории ([]строка)
категории — список сгруппированных ресурсов, к которым относится этот пользовательский ресурс (например, 'all'). Это публикуется в документах открытия API и используется клиентами для поддержки вызовов, таких как
kubectl get all. -
Принятые имена.тип_списка (строка)
тип_списка — сериализованный тип списка для этого ресурса. По умолчанию равно "
kindСписок". -
Принятые имена.краткие_имена ([]строка)
краткие имена — краткие имена ресурса, показанные в документах API, и используемые клиентами для поддержки вызовов, таких как
kubectl get \<shortname>. Должно быть в нижнем регистре. -
Принятые имена.единственное число (строка)
единственное число — имя ресурса в единственном числе. Должно быть в нижнем регистре. По умолчанию равно нижнему регистру
kind.
-
-
Состояния ([]CustomResourceDefinitionCondition)
Карта: уникальные значения по ключу типа будут сохранены во время слияния
состояния указывают состояние для определенных аспектов CustomResourceDefinition
CustomResourceDefinitionCondition содержит подробную информацию о текущем состоянии данного под.
-
Состояния.статус (строка), обязательно
статус — статус состояния. Может быть True, False, Unknown.
-
Состояния.тип (строка), обязательно
тип — тип состояния. Типы включают Established, NamesAccepted и Terminating.
-
Состояния.время_последнего_перехода (Время)
время_последнего_перехода — последнее время, когда состояние перешло от одного статуса к другому.
Время — это обертка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Обёртки предоставляются для многих фабричных методов, предлагаемых пакетом time.
-
Состояния.сообщение (строка)
сообщение — удобочитаемое сообщение, показывающее подробности о последнем переходе.
-
Состояния.причина (строка)
причина — уникальная, однословна, причина состояния в CamelCase для последнего перехода.
-
-
Сохранённые_версии ([]строка)
сохранённые_версии — список всех версий CustomResources, которые когда-либо сохранялись. Отслеживание этих версий позволяет установить путь миграции для сохранённых версий в etcd. Поле изменяемо, поэтому контроллер миграции может завершить миграцию в другую версию (обеспечив, что старые объекты не останутся в хранилище), а затем удалить остальные версии из этого списка. Версии не могут быть удалены из
spec.versionsпока они существуют в этом списке.
Список CustomResourceDefinition
CustomResourceDefinitionList — это список объектов CustomResourceDefinition.
-
элементы ([]CustomResourceDefinition), обязательно
элементы — список отдельных объектов CustomResourceDefinition
-
apiVersion (строка)
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
тип (строка)
Тип — строковое значение, представляющее REST-ресурс, который представляет этот объект. Серверы могут вывести это из конечной точки, к которой клиент отправляет запросы. Не может быть обновлён. В CamelCase. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
метаданные (ListMeta)
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-28.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/custom-resource-definition-v1/