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)
Стратегия патча: слияние по ключу
ruleМассив: уникальные значения по ключу 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 привязана к ограниченному значению. Пример: - Правило, привязанное к корню ресурса с подресурсом status: {"rule": "self.status.actual <= self.spec.maxDesired"}Если правило привязано к объекту со свойствами, доступные свойства объекта можно выбрать через
self.field, а наличие свойства можно проверить черезhas(self.field). Значения null обрабатываются как отсутствующие поля в выражениях CEL. Если правило привязано к объекту с additionalProperties (т.е. массив), значение массива можно получить через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_.-/]*. Имена доступных свойств экранируются в выражении следующим образом: - '' заменяется на 'подчёркивания' - '.' заменяется на 'точка' - '-' заменяется на 'тире' - '/' заменяется на 'слэш' - Имена свойств, точно совпадающие с зарезервированным словом 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.message (string)
Message представляет сообщение, отображаемое при ошибке валидации. Сообщение обязательно, если Rule содержит символы перевода строки. Сообщение не должно содержать символов перевода строки. Если не указано, сообщение будет "ошибка правила: {Правило}". Например, "должно быть URL с хостом, соответствующим spec.host"
-
x-kubernetes-validations.messageExpression (string)
MessageExpression объявляет выражение CEL, которое вычисляется в сообщение об ошибке валидации, возвращаемое при ошибке правила. Поскольку messageExpression используется как сообщение об ошибке, оно должно вычисляться в строку. Если message и messageExpression присутствуют в правиле, то messageExpression будет использоваться при ошибке валидации. Если messageExpression приводит к ошибке выполнения, ошибка выполнения регистрируется, и сообщение об ошибке валидации создаётся так, как если бы поле messageExpression не было установлено. Если messageExpression вычисляет пустую строку, строку только из пробелов или строку, содержащую символы перевода строки, то сообщение об ошибке валидации также будет создано так, как если бы поле messageExpression не было установлено, и тот факт, что messageExpression выдал пустую строку/строку только из пробелов/строку с символами перевода строки, будет записан в журнал. messageExpression имеет доступ ко всем тем же переменным, что и rule; единственное отличие — тип возвращаемого значения. Пример: "x должно быть меньше max ("+string(self.max)+")"
-
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus указывает состояние CustomResourceDefinition
-
acceptedNames (CustomResourceDefinitionNames)
acceptedNames — это имена, которые фактически используются для предоставления информации о распознавании. Они могут отличаться от имён в spec.
CustomResourceDefinitionNames указывает имена для обслуживания этого CustomResourceDefinition
-
acceptedNames.kind (string), обязательно
kind — это сериализованный вид ресурса. Обычно он имеет вид CamelCase и единственного числа. Экземпляры пользовательских ресурсов будут использовать это значение как атрибут
kindв API-вызовах. -
acceptedNames.plural (string), обязательно
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)
Map: unique values on key type will be kept during a merge
conditions указывают состояние определённых аспектов CustomResourceDefinition
CustomResourceDefinitionCondition содержит подробности текущего состояния этого узла.
-
conditions.status (string), обязательно
status — состояние условия. Может быть True, False, Unknown.
-
conditions.type (string), обязательно
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.
-
Элементы ([]CustomResourceDefinition), обязательные
Список элементов, представляющих отдельные объекты CustomResourceDefinition.
-
apiVersion (строка)
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
kind (строка)
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
© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-27.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/custom-resource-definition-v1/