Це багатосторінкова версія цього розділу для друку. Натисніть тут, щоб надрукувати.
Розширені ресурси
1 - 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 (string), обовʼязково
group — це API-група визначеного власного ресурсу. Власні ресурси обслуговуються як
/apis/<group>/.... Повинно відповідати імені CustomResourceDefinition у форматі<names.plural>.<group>.names (CustomResourceDefinitionNames), обовʼязково
names вказують імена ресурсу та виду для власного ресурсу.
CustomResourceDefinitionNames вказує імена для обслуговування цього CustomResourceDefinition
names.kind (string), обовʼязково
kind — серіалізована версія виду ресурсу. Зазвичай CamelCase та однина. Екземпляри власного ресурсу використовуватимуть це значення як атрибут
kindу викликах API.names.plural (string), обовʼязково
plural — імʼя ресурсу в множині для обслуговування. Власні ресурси обслуговуються як
/apis/<group>/<version>/.../<plural>. Повинно відповідати імені CustomResourceDefinition у форматі<names.plural>.<group>. Всі літери мають бути у нижньому регістрі.names.categories ([]string)
Atomic: буде замінено під час злиття
categories — це список згрупованих ресурсів, до яких належить цей власний ресурс (наприклад, 'all'). Публікується в документах відкриття API та використовується клієнтами для підтримки викликів типу
kubectl get all.names.listKind (string)
listKind — серіалізована версія списку для цього ресурсу. Стандартне значення "
kindList".names.shortNames ([]string)
Atomic: буде замінено під час злиття
shortNames — короткі імена ресурсу, відображені в документах відкриття API та використовувані клієнтами для підтримки викликів типу
kubectl get <shortname>. Всі літери мають бути у нижньому регістрі.names.singular (string)
singular — назва ресурсу в однині. Всі літери мають бути у нижньому регістрі. Стандартно, це значення є приведеним до нижнього регістру
kind.
scope (string), обовʼязково
scope вказує, чи має визначений власний ресурс область застосування, спільну для кластера або простору імен. Допустимі значення:
ClusterіNamespaced.versions ([]CustomResourceDefinitionVersion), обовʼязково
Atomic: буде замінено під час злиття
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 (string), обовʼязково
name — це імʼя версії, наприклад "v1", "v2beta1" і т.д. Власні ресурси обслуговуються під цією версією за адресою
/apis/<group>/<version>/..., якщоservedвстановлено в true.versions.served (boolean), обовʼязково
served — це прапорець, що дозволяє включити/відключити цю версію для обслуговування через REST API.
versions.storage (boolean), обовʼязково
storage — вказує, що цю версію слід використовувати при збереженні власних ресурсів у сховищі. Повинна бути рівно одна версія з параметром
storage=true.versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
Atomic: буде замінено під час злиття
additionalPrinterColumns визначає додаткові стовпці, що повертаються в таблицях. Див. https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables для деталей. Якщо стовпці не вказані, використовується один стовпець, що відображає вік власного ресурсу.
CustomResourceColumnDefinition вказує стовпець для друку на стороні сервера.
versions.additionalPrinterColumns.jsonPath (string), обовʼязково
jsonPath — простий шлях JSON (тобто з нотацією масиву), який оцінюється для кожного власного ресурсу для створення значення цього стовпця.
versions.additionalPrinterColumns.name (string), обовʼязково
name — імʼя для стовпця зрозуміле людині.
versions.additionalPrinterColumns.type (string), обовʼязково
type — визначення типу OpenAPI для цього стовпця. Див. https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types для деталей.
versions.additionalPrinterColumns.description (string)
description — опис цього стовпця зрозумілий людині.
versions.additionalPrinterColumns.format (string)
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 (boolean)
deprecated вказує, що ця версія API для власних ресурсів застаріла. Якщо встановлено значення true, запити API до цієї версії отримають заголовок попередження у відповіді сервера. Стандартне значення — false.
versions.deprecationWarning (string)
deprecationWarning перевизначає стандартне попередження, що повертається клієнтам API. Може бути встановлене лише тоді, коли
deprecatedвстановлено в true. Стандартне попередження вказує на те, що ця версія застаріла і рекомендує використовувати останню доступну версію з рівною або більшою стабільністю, якщо така існує.versions.schema (CustomResourceValidation)
schema описує схему, яка використовується для валідації, обрізання та встановлення стандартних значень для цієї версії власного ресурсу.
CustomResourceValidation є переліком методів валідації для CustomResource.
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema визначає схему OpenAPI v3 для валідації та обрізання власного ресурсу.
versions.selectableFields ([]SelectableField)
Atomic: буде замінено під час злиття
selectableFieldsвизначає шляхи до полів, які можуть бути використані як селектори полів. Дозволяється використовувати максимум 8 вибіркових полів. https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectorsSelectableField вказує шлях JSON до поля, яке може бути використане з селекторами полів.
versions.selectableFields.jsonPath (string), required
jsonPath— це простий шлях JSON, який оцінюється для кожного власного ресурсу, щоб отримати значення селектора поля. Дозволяються лише JSON-шляхи без нотації масивів. Повинен вказувати на поле типу string, boolean або integer. Дозволяються типи з enum-значеннями та рядки з форматами. ЯкщоjsonPathпосилається на відсутнє поле в ресурсі, він оцінюється як порожній рядок. Не повинен вказувати на поля метаданих. Обовʼязкове поле.
versions.subresources (CustomResourceSubresources)
subresources вказують, які додаткові ресурси цієї версії визначеного власного ресурсу доступні.
CustomResourceSubresources вказує, як оброляти мастшатабування субресурсів для CustomResource.
versions.subresources.scale.specReplicasPath (string), обовʼязково
specReplicasPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
spec.replicas. Допускаються тільки JSON-шляхи без нотації масиву. Повинен бути JSON-шлях у форматі.spec. Якщо у власному ресурсі немає значення за вказаним шляхом, субресурс/scaleповерне помилку при виконанні GET.versions.subresources.scale.statusReplicasPath (string), обовʼязково
statusReplicasPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
status.replicas. Допускаються лише JSON-шляхи без нотації масиву. Повинен бути JSON-шлях під.status. Якщо у власному ресурсі немає значення за вказаним шляхом, значенняstatus.replicasу субресурсі/scaleбуде стандартно дорівнювати 0.versions.subresources.scale.labelSelectorPath (string)
labelSelectorPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
status.selector. Допускаються лише 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. Коли ввімкнено:- запити до первинної точки доступу власного ресурсу ігнорують зміни в розділі
statusобʼєкта. - Запити до субресурсу
/statusвласного ресурсу ігнорують зміни будь-чого, окрім строфиstatusобʼєкта.
CustomResourceSubresourceStatus визначає, як обслуговувати субресурс статусу для власних ресурсів. Статус представляється JSON-шляхом
.statusвсередині власного ресурсу. Якщо встановлено,- відкриває субресурс /status для власного ресурсу
- PUT-запити до субресурсу /status отримують обʼєкт власного ресурсу та ігнорують зміни у всьому, окрім рядка статусу
- PUT/POST/PATCH запити до власного ресурсу ігнорують зміни у рядку стану
- запити до первинної точки доступу власного ресурсу ігнорують зміни в розділі
conversion (CustomResourceConversion)
conversion визначає налаштування конвертації для CRD.
CustomResourceConversion описує, як конвертувати різні версії CR.
conversion.strategy (string), обовʼязково
strategy визначає, як налаштовуються власні ресурси між версіями. Допустимі значення:
"None": Конвертер змінює тільки apiVersion і не торкається інших полів у власному ресурсі."Webhook": API Server викликає зовнішній webhook для виконання конвертації. Додаткова інформація потрібна для цього варіанту. Це вимагає, щоб spec.preserveUnknownFields було встановлено у false, а spec.conversion.webhook було налаштовано.
conversion.webhook (WebhookConversion)
webhook описує, як викликати конвертаційний webhook. Обовʼязково, якщо
strategyвстановлено на"Webhook".WebhookConversion описує, як викликати конвертаційний webhook
conversion.webhook.conversionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
conversionReviewVersions — впорядкований список пріоритетних версій
ConversionReview, які очікує Webhook. API сервер використовує першу версію зі списку, яку він підтримує. Якщо жодна з версій, зазначених у цьому списку, не підтримується API сервером, конвертація для власного ресурсу не відбудеться. Якщо збережена конфігурація Webhook визначає дозволені версії та не включає жодної версії, відомої API серверу, виклики до webhook не будуть успішними.conversion.webhook.clientConfig (WebhookClientConfig)
clientConfig містить інструкції щодо виклику webhook, якщо strategy є
Webhook.WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з webhook.
conversion.webhook.clientConfig.caBundle ([]byte)
caBundle — PEM-кодований CA пакет, який буде використовуватися для перевірки сертифіката сервера webhook. Якщо не вказано, використовуються системні корені довіри на apiserver.
conversion.webhook.clientConfig.service (ServiceReference)
service — це посилання на сервіс для цього webhook. Необхідно вказати або service, або url.
Якщо webhook працює в межах кластера, слід використовувати
service.ServiceReference містить посилання на Service.legacy.k8s.io
conversion.webhook.clientConfig.service.name (string), обовʼязково
name — це імʼя сервісу. Обовʼязково
conversion.webhook.clientConfig.service.namespace (string), обовʼязково
namespace — це простір імен сервісу. Обовʼязково
conversion.webhook.clientConfig.service.path (string)
path — це необовʼязковий URL шлях, за яким буде контактуватися webhook.
conversion.webhook.clientConfig.service.port (int32)
port — це необовʼязковий порт сервісу, за яким буде контактуватися webhook.
portповинен бути дійсним номером порту (1-65535, включно). Стандартно встановлено 443 для зворотної сумісності.
conversion.webhook.clientConfig.url (string)
url вказує місце розташування webhook у стандартній URL формі (
scheme://host:port/path). Потрібно вказати точно один зurlабоservice.hostне повинен посилатися на сервіс, що працює в кластері; натомість використовуйте полеservice.hostможе бути знайдений через зовнішній DNS на деяких apiservers (наприклад,kube-apiserverне може розвʼязати DNS у кластері, оскільки це було б порушенням рівнів).hostтакож може бути IP-адресою.Зверніть увагу, що використання
localhostабо127.0.0.1якhostризиковано, якщо ви не вживаєте великої обережності, щоб запустити цей webhook на всіх хостах, які можуть потребувати викликів до цього webhook. Такі установки, ймовірно, будуть непереносними, тобто їх не легко переносити в новий кластер.Схема повинна бути "https"; URL повинен починатися з "https://".
Шлях є необовʼязковим, і якщо присутній, може бути будь-яким рядком, допустимим в URL. Ви можете використовувати шлях для передачі довільного рядка до webhook, наприклад, ідентифікатора кластера.
Спроба використати автентифікацію користувача або базову автентифікацію, наприклад, "user:password@" не дозволена. Фрагменти ("#...") та параметри запиту ("?...") також не дозволені.
preserveUnknownFields (boolean)
preserveUnknownFields вказує, що поля обʼєкта, які не зазначені в схемі OpenAPI, повинні зберігатися під час зберігання. apiVersion, kind, metadata та відомі поля всередині metadata завжди зберігаються. Це поле застаріле і замість нього слід встановлювати
x-preserve-unknown-fieldsна true вspec.versions[*].schema.openAPIV3Schema. Деталі дивіться на https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning.
JSONSchemaProps
JSONSchemaProps є JSON-схемою, яка відповідає Специфікації Draft 4 (http://json-schema.org/).
$ref (string)
$schema (string)
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляє JSONSchemaProps або булеве значення. Стандартно встановлюється у true для булевого значення.
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляє JSONSchemaProps або булеве значення. Стандартно встановлюється у true для булевого значення.
allOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
anyOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
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 (string)
enum ([]JSON)
Atomic: буде замінено під час злиття
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 (boolean)
exclusiveMinimum (boolean)
externalDocs (ExternalDocumentation)
ExternalDocumentation дозволяє посилатися на зовнішній ресурс для розширеної документації.
externalDocs.description (string)
externalDocs.url (string)
format (string)
format — це рядок формату OpenAPI v3. Невідомі формати ігноруються. Наступні формати перевіряються:
- bsonobjectid: BSON Object ID, тобто 24-символьний шістнадцятковий рядок
- uri: URI, який розбирається за допомогою Golang net/url.ParseRequestURI
- email: адреса електронної пошти, яка розбирається за допомогою Golang net/mail.ParseAddress
- hostname: дійсне представлення імені хоста в Інтернеті, визначене RFC 1034, розділ 3.1 [RFC1034]
- ipv4: IPv4 IP, який розбирається за допомогою Golang net.ParseIP
- ipv6: IPv6 IP, який розбирається за допомогою 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,255)"
- byte: двійкові дані, закодовані в base64
- password: будь-який тип рядка
- date: рядок дати, наприклад, "2006-01-02", як визначено у full-date у RFC3339
- duration: рядок тривалості, наприклад, "22 ns", який розбирається за допомогою Golang time.ParseDuration або сумісний з форматом тривалості Scala
- datetime: рядок дати і часу, наприклад, "2014-12-15T19:30:20.000Z", як визначено у date-time у RFC3339
id (string)
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray представляє значення, яке може бути JSONSchemaProps або масивом JSONSchemaProps. Переважно використовується для цілей серіалізації.
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps)
nullable (boolean)
oneOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
pattern (string)
patternProperties (map[string]JSONSchemaProps)
properties (map[string]JSONSchemaProps)
required ([]string)
Atomic: буде замінено під час злиття
title (string)
type (string)
uniqueItems (boolean)
x-kubernetes-embedded-resource (boolean)
x-kubernetes-embedded-resource визначає, що значення є вбудованим обʼєктом Kubernetes runtime.Object, з TypeMeta та ObjectMeta. Тип має бути object. Дозволяється подальше обмеження вбудованого обʼєкта. kind, apiVersion та metadata перевіряються автоматично. x-kubernetes-preserve-unknown-fields може бути true, але це не обовʼязково, якщо обʼєкт повністю вказаний (аж до kind, apiVersion, metadata).
x-kubernetes-int-or-string (boolean)
x-kubernetes-int-or-string вказує, що це значення є або цілим числом, або рядком. Якщо це true, дозволено порожній тип, а тип як нащадок anyOf дозволений, якщо дотримується один з наступних шаблонів:
- anyOf:
- type: integer
- type: string
- allOf:
- anyOf:
- type: integer
- type: string
- ... нуль або більше
- anyOf:
- anyOf:
x-kubernetes-list-map-keys ([]string)
Atomic: буде замінено під час злиття
x-kubernetes-list-map-keys анотує масив з типом списку x-kubernetes
map, вказуючи ключі, які використовуються як індекс map.Цей теґ МАЄ використовуватися тільки для списків, які мають розширення "x-kubernetes-list-type" встановлене на "map". Також значення, вказані для цього атрибута, мають бути полем типу scalar структури нащадка (вкладення не підтримується).
Властивості, зазначені у цьому полі, повинні бути або обовʼязковими, або мати стандартне значення, щоб забезпечити наявність цих властивостей для всіх елементів списку.
x-kubernetes-list-type (string)
x-kubernetes-list-type анотує масив, щоб більш детально описати його топологію. Це розширення має використовуватися тільки для списків і може мати 3 можливі значення:
atomic: список розглядається як єдине ціле, як скаляр. Списки atomic будуть повністю замінені при оновленні. Це розширення може використовуватися для будь-якого типу списків (структур, скалярів тощо).set: Набори — це списки, які не повинні мати кілька елементів з однаковим значенням. Кожне значення повинно бути скаляром, обʼєктом з x-kubernetes-map-typeatomicабо масивом з x-kubernetes-list-typeatomic.map: Ці списки схожі на map тим, що їх елементи мають неіндексований ключ, який використовується для їх ідентифікації. Порядок зберігається при злитті. Теґ map має використовуватися тільки для списків з елементами типу object. Стандартне значення для масивів — atomic.
x-kubernetes-map-type (string)
x-kubernetes-map-type анотує обʼєкт, щоб більш детально описати його топологію. Це розширення має використовуватися тільки, коли тип обʼєкта є object і може мати 2 можливі значення:
granular: Ці maps є справжніми map (пари ключ-значення) і кожне поле незалежне одне від одного (їх можна маніпулювати окремими акторами). Це стандартн поведінка для всіх map.atomic: список розглядається як єдине ціле, як скаляр. Atomic maps будуть повністю замінені при оновленні.
x-kubernetes-preserve-unknown-fields (boolean)
x-kubernetes-preserve-unknown-fields зупиняє етап декодування на сервері API від видалення полів, які не вказані у схемі перевірки. Це впливає на поля рекурсивно, але повертається до нормальної поведінки видалення, якщо вкладені властивості або додаткові властивості вказані у схемі. Це може бути true або не визначено. Використання false заборонено.
x-kubernetes-validations
Patch strategy: обʼєднання за ключем
rule.Map: унікальні значення ключа rule будуть збережені під час злиття.
x-kubernetes-validations описує список правил валідації записаних мовою CEL.
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). Поля з нульовим значенням розглядаються як відсутні поля у виразах CEL. Якщо Правило обмежене обʼєктом з additionalProperties (тобто map), значення map доступні черезself[mapKey], наявність ключа в map можна перевірити черезmapKey in self, а всі записи map доступні через макроси та функції 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), і її методvalue()матиме той самий тип, що йself. Деталі можна знайти в документації до поляoptionalOldSelf.Правила переходу стандартно застосовуються лише до запитів UPDATE і пропускаються, якщо старе значення не було знайдено. Ви можете налаштувати безумовну оцінку правила переходу, встановивши
optionalOldSelfякtrue.x-kubernetes-validations.fieldPath (string)
fieldPath представляє шлях до поля, що повертається, коли перевірка не вдається. Він має бути відносним JSON шляхом (тобто з нотацією масиву), обмеженим місцем розташування цього розширення x-kubernetes-validations у схемі та посилатися на існуюче поле. Наприклад, коли перевірка перевіряє, чи існує певний атрибут
fooв maptestMap, fieldPath може бути встановлений як.testMap.foo. Якщо перевірка перевіряє, що два списки повинні мати унікальні атрибути, fieldPath може бути встановлений як будь-який зі списків: наприклад,.testList. Він не підтримує числовий індекс списку. Він підтримує операції з дочірніми елементами для посилання на існуюче поле. Для отримання додаткової інформації дивіться Підтримка JSONPath у Kubernetes. Числовий індекс масиву не підтримується. Для імені поля, що містить спеціальні символи, використовуйте['specialName']для посилання на імʼя поля. Наприклад, для атрибутаfoo.34$, що зʼявляється у спискуtestList, fieldPath може бути встановлений як.testList['foo.34$'].x-kubernetes-validations.message (string)
message представляє повідомлення, яке відображається, коли перевірка не вдається. Повідомлення є обовʼязковим, якщо у Правилі є розриви рядків. Повідомлення не повинно містити розривів рядків. Якщо не встановлено, повідомлення буде "failed rule: {Rule}". Наприклад, "must be a URL with the host matching spec.host".
x-kubernetes-validations.messageExpression (string)
messageExpression оголошує вираз CEL, який оцінюється як повідомлення про помилку перевірки, яке повертається, коли це правило не вдається. Оскільки messageExpression використовується як повідомлення про помилку, він повинен оцінюватися як рядок. Якщо і message, і messageExpression присутні у правилі, тоді messageExpression буде використаний у разі невдалої перевірки. Якщо messageExpression призводить до помилки під час виконання, ця помилка записується в лог, і повідомлення про помилку перевірки створюється так, ніби поле messageExpression не встановлено. Якщо messageExpression оцінюється як порожній рядок, рядок, що містить лише пробіли, або рядок, що містить розриви рядків, то повідомлення про помилку перевірки також створюється так, ніби поле messageExpression не встановлено, і факт того, що messageExpression створив порожній рядок/рядок з пробілами/рядок з розривами рядків, записується в лог. messageExpression має доступ до всіх тих же змінних, що й правило; єдина відмінність — тип значення, що повертається. Приклад: "x must be less than max ("+string(self.max)+")".
x-kubernetes-validations.optionalOldSelf (boolean)
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 (string)
reason забезпечує машинозчитувану причину невдачі перевірки, яка повертається до абонента, коли запит не проходить це правило перевірки. Код стану HTTP, що повертається до абонента, буде відповідати причині першого невдалого правила перевірки. Поточні підтримувані причини: "FieldValueInvalid", "FieldValueForbidden", "FieldValueобовʼязково", "FieldValueDuplicate". Якщо не встановлено, стандартно використовується "FieldValueInvalid". Усі майбутні додані причини повинні прийматися клієнтами при читанні цього значення, а невідомі причини повинні оброблятися як FieldValueInvalid.
Можливі значення переліку (enum):
"FieldValueDuplicate"використовується для повідомлення про колізії значень, які повинні бути унікальними (наприклад, унікальні ідентифікатори)."FieldValueForbidden"використовується для повідомлення про дійсні (згідно з правилами форматування) значення, які можуть бути прийняті за певних умов, але які не дозволені поточними умовами (такі як політика безпеки)."FieldValueInvalid"використовується для повідомлення про неправильно сформовані значення (наприклад, невдале зіставлення регулярного виразу, занадто довгі, поза межами допустимого)."FieldValueRequired"використовується для повідомлення про обовʼязкові значення, які не надані (наприклад, порожні рядки, значення null або порожні масиви).
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus вказує стан CustomResourceDefinition.
acceptedNames (CustomResourceDefinitionNames)
acceptedNames — це імена, які фактично використовуються для обслуговування виявлення ресурсів. Вони можуть відрізнятися від імен у специфікації.
CustomResourceDefinitionNames вказує імена для обслуговування цього CustomResourceDefinition
acceptedNames.kind (string), обовʼязково
kind — серіалізоване імʼя типу ресурсу. Зазвичай CamelCase в однині. Екземпляри спеціальних ресурсів будуть використовувати це значення як атрибут
kindу викликах API.acceptedNames.plural (string), обовʼязково
plural — імʼя ресурсу для обслуговування в множині. Спеціальні ресурси обслуговуються як
/apis/\<group>/\<version>/.../\<plural>. Має відповідати імені CustomResourceDefinition (у формі\<names.plural>.\<group>). Має бути в нижньому регістрі.acceptedNames.categories ([]string)
Atomic: буде замінено під час злиття
categories — це список згрупованих ресурсів, до яких належить цей власний ресурс (наприклад, 'all'). Публікується у документах виявлення API і використовується клієнтами для підтримки викликів типу
kubectl get all.acceptedNames.listKind (string)
listKind — серіалізоване імʼя списку для цього ресурсу. Стандартне значення — "
kindList".acceptedNames.shortNames ([]string)
Atomic: буде замінено під час злиття
shortNames — короткі імена для ресурсу, які відображаються в документах виявлення API і використовуються клієнтами для підтримки викликів типу
kubectl get \<shortname>. Мають бути в нижньому регістрі.acceptedNames.singular (string)
singular — імʼя ресурсу в однині. Має бути в нижньому регістрі. Стандартно використовується нижній регістр
kind.
conditions ([]CustomResourceDefinitionCondition)
Map: унікальні значення за типом ключа будуть збережені під час злиття
conditions — вказують стан для окремих аспектів CustomResourceDefinition
CustomResourceDefinitionCondition містить деталі поточного стану цього CustomResourceDefinition.
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.observedGeneration (int64)
observedGeneration представляє .metadata.generation, на основі якого було встановлено умову. Наприклад, якщо .metadata.generation наразі дорівнює 12, але .status.conditions[x].observedGeneration дорівнює 9, умова є застарілою стосовно поточного стану екземпляра.
conditions.reason (string)
reason — унікальна однозначна причина в CamelCase для останньої зміни стану.
observedGeneration (int64)
Покоління, яке спостерігає контролер CRD.
storedVersions ([]string)
Atomic: буде замінено під час злиття
storedVersions перераховує всі версії CustomResources, які коли-небудь зберігалися. Відстеження цих версій дозволяє визначити шлях міграції для збережених версій в etcd. Поле є змінним, тому контролер міграції може завершити міграцію до іншої версії (переконавшись, що у сховищі не залишилося старих обʼєктів), а потім видалити решту версій з цього списку. Версії не можна видаляти з
spec.versions, доки вони існують у цьому списку.
CustomResourceDefinitionList
CustomResourceDefinitionList є списком обʼєктів CustomResourceDefinition.
items ([]CustomResourceDefinition), обовʼязково
items - список окремих обʼєктів 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)
metadata - стандартні метадані обʼєкта. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
Операції
get отримати вказаний CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
401: Unauthorized
get отримати статус вказаного CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (CustomResourceDefinitionList): OK
401: Unauthorized
create створення CustomResourceDefinition
HTTP запит
POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
202 (CustomResourceDefinition): Accepted
401: Unauthorized
update заміна вказаного CustomResourceDefinition
HTTP запит
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
update заміна статусу вказаного CustomResourceDefinition
HTTP запит
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch часткове оновлення вказаного CustomResourceDefinition
HTTP запит
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch часткове оновлення статусу вказаного CustomResourceDefinition
HTTP запит
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
delete видалення CustomResourceDefinition
HTTP запит
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection видалення колекції CustomResourceDefinition
HTTP запит
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
2 - DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори.apiVersion: resource.k8s.io/v1
import "k8s.io/api/resource/v1"
DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори. На нього можна посилатися у запитах до пристрою, щоб застосувати ці пресети. Охоплює кластер.
Це альфа-тип і вимагає увімкнення функціональної можливості DynamicResourceAllocation.
apiVersion: resource.k8s.io/v1
kind: DeviceClass
metadata (ObjectMeta)
Стандартний обʼєкт метаданих
spec (DeviceClassSpec), обовʼязково
Spec визначає, що можна призначити і як це налаштувати.
Поле є змінюваним. Споживачі повинні бути готові до того, що класи можуть змінюватися в будь-який час, як через оновлення, так і через заміну. Розподілення заявок виконується один раз на основі того, що було встановлено в класах на момент виділення.
Зміна spec автоматично збільшує номер metadata.generation.
DeviceClassSpec
DeviceClassSpec використовується в [DeviceClass] для визначення того, що може бути призначено і як це налаштувати.
config ([]DeviceClassConfiguration)
Atomic: буде замінено під час злиття
Config визначає параметри конфігурації, які застосовуються до кожного пристрою, що описується у цьому класі. Деякі класи потенційно можуть задовольнятися кількома драйверами, тому кожен екземпляр конфігурації постачальника застосовується лише до одного драйвера.
Вони передаються драйверу, але не враховуються при розподілі заявки.
DeviceClassConfiguration використовується в DeviceClass.
config.opaque (OpaqueDeviceConfiguration)
Opaque надає специфічні для драйвера параметри конфігурації.
OpaqueDeviceConfiguration містить параметри конфігурації драйвера у форматі, визначеному постачальником драйвера.
config.opaque.driver (string), обовʼязково
Driver використовується для визначення, в який втулок kubelet потрібно передати ці параметри конфігурації.
Політика допуску, надана розробником драйвера, може використовувати це для прийняття рішення про те, чи потрібно перевіряти їх.
Повинен бути DNS піддоменом і закінчуватися на DNS домен, що належить постачальнику драйвера. Мають використовуватись символи нижнього регістру.
config.opaque.parameters (RawExtension), обовʼязково
Параметри можуть містити довільні дані. Відповідальність за перевірку та керування версіями покладається на розробника драйверів. Зазвичай це включає самоідентифікацію та версію ("kind" + "apiVersion" для типів Kubernetes), а також конвертацію між різними версіями.
Довжина вихідних даних повинна бути меншою або дорівнювати 10 Ki.
RawExtension використовується для зберігання розширень у зовнішніх версіях.
Щоб використовувати це, створіть поле, яке має тип RawExtension у вашій зовнішній, версійованій структурі, і Object у вашій внутрішній структурі. Також потрібно зареєструвати ваші різні типи втулків.
// Внутрішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.Object `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }// Зовнішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.RawExtension `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }// Готовий JSON буде виглядати приблизно так:
{ "kind":"MyAPIObject", "apiVersion":"v1", "myPlugin": { "kind":"PluginA", "aOption":"foo", }, }Що відбувається? Спочатку декодування використовує json або yaml для десеріалізації даних у ваш зовнішній MyAPIObject. Це призводить до зберігання необробленого JSON, але без розпакування. Наступний крок — копіювання (за допомогою pkg/conversion) у внутрішню структуру. Функції перетворення, встановлені в DefaultScheme пакета runtime, розпаковують JSON, збережений у RawExtension, перетворюючи його в правильний тип обʼєкта і зберігаючи його в Object. (TODO: У випадку, коли обʼєкт має невідомий тип, буде створено і збережено обʼєкт runtime.Unknown.)
extendedResourceName (string)
ExtendedResourceName — це розширена назва ресурсу для пристроїв цього класу. Пристрої цього класу можуть використовуватися для задоволення розширених запитів на ресурси пода. Вона має той самий формат, що й назва розширеного ресурсу подп. Вона повинна бути унікальною серед усіх класів пристроїв у кластері. Якщо два класи пристроїв мають однакову назву, то для задоволення розширених запитів на ресурси пода вибирається клас, створений пізніше. Якщо два класи створені одночасно, то вибирається імʼя класу, яке сортується лексикографічно першим.
Це поле alpha.
selectors ([]DeviceSelector)
Atomic: буде замінено під час злиття
Кожному селектору повинен відповідати пристрій, що заявляється в цьому класі.
DeviceSelector повинен мати рівно одне встановлене поле.
selectors.cel (CELDeviceSelector)
CEL містить вираз CEL для вибору пристрою.
CELDeviceSelector містить вираз CEL для вибору пристрою.
selectors.cel.expression (string), обовʼязково
Вираз є виразом CEL, який оцінює один пристрій. Він має оцінюватися як true, коли пристрій відповідає бажаним критеріям, і як false, коли не відповідає. Будь-який інший результат є помилкою і призводить до зупинки надання пристроїв.
Вхідні дані виразу — це обʼєкт з назвою "device", який має наступні властивості:
- driver (рядок): імʼя драйвера, який визначає цей пристрій.
- attributes (map[string]object): атрибути пристрою, згруповані за префіксом (наприклад, device.attributes["dra.example.com"] оцінюється як обʼєкт з усіма атрибутами, які були префіксовані "dra.example.com").
- capacity (map[string]object): обсяги пристрою, згруповані за префіксом.
- allowMultipleAllocations (bool): властивість allowMultipleAllocations пристрою (v1.34+ з увімкненою функцією DRAConsumableCapacity).
Приклад: Розглянемо пристрій з driver="dra.example.com", який надає два атрибути з назвою "model" та "ext.example.com/family" і один обсяг з назвою "modules". Вхідні дані для цього виразу будуть мати такі поля:
device.driver device.attributes["dra.example.com"].model device.attributes["ext.example.com"].family device.capacity["dra.example.com"].modulesПоле device.driver можна використовувати для перевірки конкретного драйвера, або як загальну попередню умову (тобто ви хочете розглядати лише пристрої від цього драйвера), або як частину виразу з кількома умовами, який призначений для розгляду пристроїв з різних драйверів.
Тип значення кожного атрибута визначається визначенням пристрою, і користувачі, які пишуть ці вирази, повинні звертатися до документації для своїх конкретних драйверів. Тип значення кожного обсягу — Quantity.
Якщо невідомий префікс використовується для запиту в device.attributes або device.capacity, буде повернено порожній map. Будь-яке посилання на невідоме поле спричинить помилку оцінки і зупинку виділення.
Робочий вираз має перевіряти наявність атрибутів перед їх використанням.
Для зручності використання доступна функція cel.bind(), яка може бути використана для спрощення виразів, що звертаються до кількох атрибутів з одного домену. Наприклад:
cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)Довжина виразу повинна бути меншою або дорівнювати 10 Ki. Вартість його обчислення також обмежена на основі передбачуваної кількості логічних кроків.
DeviceClassList
DeviceClassList — це колекція класів.
apiVersion: resource.k8s.io/v1
kind: DeviceClassList
metadata (ListMeta)
Стандартні метадані списку
items ([]DeviceClass), обовʼязково
Items — список класів ресурсів.
Operations
get отримати вказаний DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1/deviceclasses
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (DeviceClassList): OK
401: Unauthorized
create створення DeviceClass
HTTP запит
POST /apis/resource.k8s.io/v1/deviceclasses
Параметри
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
202 (DeviceClass): Accepted
401: Unauthorized
update заміна вказаного DeviceClass
HTTP запит
PUT /apis/resource.k8s.io/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
patch часткове оновлення вказаного DeviceClass
HTTP запит
PATCH /apis/resource.k8s.io/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
delete видалення DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (DeviceClass): OK
202 (DeviceClass): Accepted
401: Unauthorized
deletecollection видалення колекції DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1/deviceclasses
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
3 - MutatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
MutatingWebhookConfiguration описує конфігурацію вебхука, який приймає або відхиляє і може змінювати обʼєкт.
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata (ObjectMeta)
Стандартний обʼєкт метаданих; Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
webhooks ([]MutatingWebhook)
Patch strategy: обʼєднання за ключем
nameMap: унікальні значення ключа name будуть збережені під час злиття
Webhooks — це список вебхуків та відповідних ресурсів і операцій.
MutatingWebhook описує вебхук допуску та ресурси й операції, до яких він застосовується.
webhooks.admissionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
AdmissionReviewVersions — це впорядкований список версій
AdmissionReview, які очікує вебхук. Сервер API спробує використати першу версію зі списку, яку він підтримує. Якщо жодна з вказаних версій не підтримується сервером API, перевірка цього обʼєкта зазнає невдачі. Якщо збережена конфігурація вебхука вказує дозволені версії, але не включає жодної версії, відомої серверу API, виклики до вебхука зазнають невдачі й підпадають під політику відмови.webhooks.clientConfig (WebhookClientConfig), обовʼязково
ClientConfig визначає, як спілкуватися з вебхуком. Обовʼязково.
WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з вебхуком.
webhooks.clientConfig.caBundle ([]byte)
caBundle— це закодований у PEM набір сертифікатів CA, який використовуватиметься для перевірки сертифіката сервера вебхука. Якщо не вказано, використовуються системні корені довіри на сервері API.webhooks.clientConfig.service (ServiceReference)
service— це посилання на сервіс для цього вебхука. Необхідно вказати абоservice, абоurl.Якщо вебхук працює в межах кластера, то слід використовувати
service.ServiceReference містить посилання на Service.legacy.k8s.io.
webhooks.clientConfig.service.name (string), обовʼязково
name— це імʼя сервісу. Обовʼязково.webhooks.clientConfig.service.namespace (string), обовʼязково
namespace— це простір імен сервісу. Обовʼязково.webhooks.clientConfig.service.path (string)
path— це необовʼязковий URL шлях, який буде надіслано в будь-якому запиті до цього сервісу.webhooks.clientConfig.service.port (int32)
Якщо вказано, то це порт на сервісі, який є хостом вебхуку. Типово 443 для зворотної сумісності.
portмає бути дійсним номером порту (1-65535, включно).
webhooks.clientConfig.url (string)
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@", не дозволена. Також не дозволяються фрагменти ("#...") і параметри запиту ("?...").
webhooks.name (string), обовʼязково
Імʼя вебхуку допуску. Імʼя має бути повністю кваліфікованим, наприклад,
imagepolicy.kubernetes.io, де "imagepolicy" є назвою вебхука, а kubernetes.io — назвою організації. Обовʼязково.webhooks.sideEffects (string), обовʼязково
SideEffects вказує, чи має цей вебхук побічні ефекти. Допустимі значення: None, NoneOnDryRun (вебхуки, створені у v1beta1, також можуть вказати Some або Unknown). Вебхуки з побічними ефектами МАЮТЬ реалізувати систему узгодження, оскільки запит може бути відхилено на наступному етапі ланцюжка допуску, і побічні ефекти потрібно буде скасувати. Запити з атрибутом dryRun автоматично відхиляються, якщо вони відповідають вебхуку з sideEffects == Unknown або Some.
Можливі значення переліку (enum):
"None"означає, що виклик вебхука не матиме побічних ефектів."NoneOnDryRun"означає, що виклик вебхука може мати побічні ефекти, але якщо запит, що розглядається, має атрибут dry-run, побічні ефекти будуть подавлені."Some"означає, що виклик вебхука може мати побічні ефекти. Якщо запит з атрибутом dry-run спробує викликати цей вебхук, запит замість цього завершиться невдачею."Unknown"означає, що немає інформації про побічні ефекти виклику вебхука. Якщо запит з атрибутом dry-run спробує викликати цей вебхук, запит замість цього завершиться невдачею.
webhooks.failurePolicy (string)
FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.
Можливі значення переліку (enum):
"Fail"означає, що помилка виклику вебхука призводить до відмови в допуску."Ignore"означає, що помилка виклику вебхука ігнорується.
webhooks.matchConditions ([]MatchCondition)
Patch strategy: обʼєднання за ключем
nameMap: унікальні значення за ключем name будуть збережені під час злиття
MatchConditions — це список умов, які мають бути виконані для надсилання запиту до цього вебхука. Умови відповідності фільтрують запити, які вже були підібрані за правилами, namespaceSelector і objectSelector. Порожній список matchConditions відповідає всім запитам. Максимальна кількість умов відповідності — 64.
Логіка точного збігу така (за порядком):
- Якщо БУДЬ-ЯКА умова відповідності оцінюється як FALSE, вебхук оминається.
- Якщо ВСІ умови відповідності оцінюються як TRUE, вебхук викликається.
- Якщо будь-яка умова відповідності оцінюється як помилка (але жодна не є FALSE):
- Якщо failurePolicy=Fail, запит відхиляється
- Якщо failurePolicy=Ignore, помилка ігнорується і вебхук оминається
MatchCondition представляє умову, яка має бути виконана для надсилання запиту до вебхука.
webhooks.matchConditions.expression (string), обовʼязково
Expression представляє вираз, який буде оцінено CEL. Результат обробки — bool. Вирази CEL мають доступ до вмісту AdmissionRequest і Authorizer, організованих у змінні CEL:
'object' — Обʼєкт із вхідного запиту. Значення null для запитів DELETE. 'oldObject' — Наявний обʼєкт. Значення null для запитів CREATE. 'request' — Атрибути запиту допуску (/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — CEL Authorizer. Може бути використано для виконання перевірок авторизації для виконавця (користувач або службового облікового запису) запиту. Див. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' — CEL ResourceCheck, створений з 'authorizer' і налаштований із ресурсом запиту. Документація щодо CEL: https://kubernetes.io/docs/reference/using-api/cel/
Обовʼязково.
webhooks.matchConditions.name (string), обовʼязково
Name — це ідентифікатор цієї умови відповідності, використовується для стратегії злиття умов відповідності, а також для надання ідентифікатора для цілей логування. Хороша назва має бути описовою для повʼязаного виразу. Назва має бути кваліфікованою назвою, що складається з алфавітно-цифрових символів, '-', '' або '.', і має починатися та закінчуватися алфавітно-цифровим символом (наприклад, 'MyName' або 'my.name' або '123-abc', регулярний вираз, що використовується для перевірки, — '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]') з необовʼязковим префіксом DNS субдомену та '/' (наприклад, 'example.com/MyName').
Обовʼязково.
webhooks.matchPolicy (string)
matchPolicy визначає, як використовується список "rules" для відповідності вхідним запитам. Допустимі значення — "Exact" або "Equivalent".
Exact: відповідність запиту тільки в тому випадку, якщо він точно відповідає зазначеному правилу. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, але "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запит до apps/v1beta1 або extensions/v1beta1 не буде надіслано до вебхука.Equivalent: відповідність запиту, якщо він змінює ресурс, вказаний у правилах, навіть через іншу групу API або версію. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, і "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запит до apps/v1beta1 або extensions/v1beta1 буде перетворений на apps/v1 і надісланий до вебхука.
Стандартне значення — "Equivalent".
Можливі значення переліку (enum):
"Equivalent"означає, що запити повинні надсилатися до вебхука, якщо вони змінюють ресурс, вказаний у правилах, через іншу групу API або версію."Exact"означає, що запити повинні надсилатися до вебхука, якщо вони точно відповідають зазначеному правилу.
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи збігається простір імен для цього обʼєкта з селектором. Якщо обʼєкт сам є простором імен, перевірка збігу виконується за метаданими обʼєкта. Якщо обʼєкт є іншим ресурсом на рівні кластера, він ніколи не оминає вебхук.
Наприклад, щоб запустити вебхук для будь-яких обʼєктів, чий простір імен не повʼязаний з "runlevel" 0 або 1, потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }Якщо замість цього ви хочете запустити вебхук для будь-яких обʼєктів, чий простір імен повʼязаний з "environment" "prod" або "staging", потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }Див. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для отримання додаткових прикладів селекторів міток.
Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.objectSelector (LabelSelector)
ObjectSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи має обʼєкт відповідні мітки. ObjectSelector оцінюється як для oldObject, так і для newObject, які будуть надіслані до вебхука, і вважається відповідним, якщо будь-який з обʼєктів відповідає селектору. Нульовий обʼєкт (oldObject у випадку створення або newObject у випадку видалення) або обʼєкт, який не може мати міток (наприклад, DeploymentRollback або PodProxyOptions обʼєкт), не вважається таким, що має збіг. Використовуйте objectSelector лише якщо вебхук є опціональним, оскільки кінцеві користувачі можуть оминути вебхук допуску, встановивши мітки. Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.reinvocationPolicy (string)
reinvocationPolicy вказує, чи має цей вебхук викликатися кілька разів у рамках однієї оцінки допуску. Допустимі значення — "Never" і "IfNeeded".
Never: вебхук не буде викликатися більше одного разу в рамках однієї оцінки допуску.
IfNeeded: вебхук буде викликаний щонайменше один додатковий раз у рамках оцінки допуску, якщо обʼєкт, який допускаєтсья, змінюється іншими втулками допуску після початкового виклику вебхука. Вебхуки, які вказують цю опцію, мають бути ідемпотентними, здатними обробляти обʼєкти, які вони попередньо прийняли. Зверніть увагу:
- не гарантується, що кількість додаткових викликів буде дорівнювати одному.
- якщо додаткові виклики призводять до подальших змін обʼєкта, вебхуки не гарантуються до повторного виклику.
- вебхуки, що використовують цю опцію, можуть бути впорядковані для мінімізації кількості додаткових викликів.
- для перевірки обʼєкта після завершення всіх змін, використовуйте вебхук для валідації допуску.
Стандартне значення — "Never".
Можливі значення переліку:
"IfNeeded"вказує, що мутація може бути викликана принаймні ще один раз у рамках оцінки допуску, якщо обʼєкт, що допускається, модифікується іншими втулками допуску після початкового виклику зміни."Never"вказує, що зміна не повинна викликатися більше одного разу під час однієї оцінки допуску.webhooks.rules ([]RuleWithOperations)
Atomic: буде замінено під час злиття
Rules описує, які операції з якими ресурсами/субресурсами цікавлять вебхук. Вебхук цікавить операція, якщо вона відповідає будь-якому правилу. Однак, щоб запобігти тому, що ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks можуть привести кластер до стану, з якого неможливо відновитися без повного вимкнення втулка, ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks ніколи не викликаються на запити допуску для обʼєктів ValidatingWebhookConfiguration і MutatingWebhookConfiguration.
RuleWithOperations — це кортеж операцій і ресурсів. Рекомендується переконатися, що всі розширення кортежу є дійсними.
webhooks.rules.apiGroups ([]string)
Atomic: буде замінено під час злиття
APIGroups — це групи API, до яких належать ресурси. '*' означає всі групи. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.apiVersions ([]string)
Atomic: буде замінено під час злиття
APIVersions — це версії API, до яких належать ресурси. '*' означає всі версії. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.operations ([]string)
Atomic: буде замінено під час злиття
Operations — це операції, які цікавлять вебхук допуску — CREATE, UPDATE, DELETE, CONNECT або * для всіх цих операцій і будь-яких майбутніх операцій допуску, які будуть додані. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.resources ([]string)
Atomic: буде замінено під час злиття
Resources — це список ресурсів, до яких застосовується це правило.
Наприклад, 'pods' означає Podʼи, 'pods/log' означає субресурс логу Podʼів. '*' означає всі ресурси, але не субресурси. 'pods/*' означає всі субресурси Podʼів. '*/scale' означає всі субресурси масштабування. '*/*' означає всі ресурси та їх субресурси.
Якщо присутній універсальний символ, правило валідації забезпечить відсутність перекриття ресурсів.
Залежно від навколишнього обʼєкта, субресурси можуть бути недопустимими. Обовʼязково.
webhooks.rules.scope (string)
scope визначає область застосування цього правила. Допустимі значення — "Cluster", "Namespaced" та "*" "Cluster" означає, що правило буде застосовано тільки до ресурсів на рівні кластера. API обʼєкти простору імен є ресурсами на рівні кластера. "Namespaced" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".
Можливі значення переліку:
"*"означає, що включені всі області дії."Cluster"означає, що область дії обмежена обʼєктами в межах кластера. Обʼєкти простору імен мають область дії в межах кластера."Namespaced"означає, що область дії обмежена обʼєктами в просторі імен.
webhooks.timeoutSeconds (int32)
TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.
MutatingWebhookConfigurationList
MutatingWebhookConfigurationList — це список MutatingWebhookConfiguration.
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfigurationList
metadata (ListMeta)
Стандартні метадані списку. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]MutatingWebhookConfiguration), обовʼязково
Список MutatingWebhookConfiguration.
Операції
get отримати вказану MutatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу MutatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (MutatingWebhookConfigurationList): OK
401: Unauthorized
create створення MutatingWebhookConfiguration
HTTP запит
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
body: MutatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
202 (MutatingWebhookConfiguration): Accepted
401: Unauthorized
update заміна вказаної MutatingWebhookConfiguration
HTTP запит
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: MutatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
patch часткове оновлення вказаної MutatingWebhookConfiguration
HTTP запит
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
delete видалення MutatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection видалення колекції MutatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
4 - ValidatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingWebhookConfiguration
ValidatingWebhookConfiguration описує конфігурацію вебхуку допуску, який приймає або відхиляє обʼєкт не змінюючи його.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata (ObjectMeta)
Стандартні метадані обʼєкта; Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
webhooks ([]ValidatingWebhook)
Patch strategy: обʼєднання за ключем
nameMap: унікальні значення ключа name будуть збережені під час злиття
Webhooks — це список вебхуків і ресурсів та операцій, які вони зачіпають.
ValidatingWebhook описує вебхук допуску та ресурси й операції, до яких він застосовується.
webhooks.admissionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
AdmissionReviewVersions — це впорядкований список бажаних версій
AdmissionReview, які очікує вебхук. API сервер спробує використати першу версію у списку, яку він підтримує. Якщо жодна з версій, зазначених у цьому списку, не підтримується API сервером, валідація для цього обʼєкта зазнає невдачі. Якщо збережена конфігурація вебхука вказує дозволені версії та не включає жодних версій, відомих API серверу, виклики до вебхука зазнають невдачі і є предметом для застосування політики відмов.webhooks.clientConfig (WebhookClientConfig), обовʼязково
ClientConfig визначає, як спілкуватися з вебхуком. Обовʼязково
WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з вебхуком
webhooks.clientConfig.caBundle ([]byte)
caBundle— це PEM-кодований набір сертифікатів CA, який буде використовуватися для перевірки сертифіката сервера вебхука. Якщо не вказано, використовуються системні корені довіри на API сервері.webhooks.clientConfig.service (ServiceReference)
service— це посилання на сервіс для цього вебхука. Необхідно вказати абоservice, абоurl.Якщо вебхук працює в межах кластера, тоді слід використовувати
service.ServiceReference містить посилання на Service.legacy.k8s.io
webhooks.clientConfig.service.name (string), обовʼязково
name— це імʼя сервісу. Обовʼязковоwebhooks.clientConfig.service.namespace (string), обовʼязково
namespace— це простір імен сервісу. Обовʼязковоwebhooks.clientConfig.service.path (string)
path— це необовʼязковий URL-шлях, який буде надіслано в будь-якому запиті до цього сервісу.webhooks.clientConfig.service.port (int32)
Якщо вказано, то це порт на сервісі, який є хостом вебхуку. Типово 443 для зворотної сумісності.
portмає бути дійсним номером порту (1-65535, включно).webhooks.clientConfig.url (string)
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@", не дозволена. Також не дозволяються фрагменти ("#...") і параметри запиту ("?...").
webhooks.name (string), обовʼязково
Імʼя вебхука допуску. Імʼя повинно бути повністю кваліфікованим, наприклад,
imagepolicy.kubernetes.io, де "imagepolicy" — це імʼя вебхука, а kubernetes.io — це імʼя організації. Обовʼязково.webhooks.sideEffects (string), обовʼязково
SideEffects вказує, чи має цей вебхук побічні ефекти. Допустимі значення: None, NoneOnDryRun (вебхуки, створені у v1beta1, також можуть вказати Some або Unknown). Вебхуки з побічними ефектами МАЮТЬ реалізувати систему узгодження, оскільки запит може бути відхилено на наступному етапі ланцюжка допуску, і побічні ефекти потрібно буде скасувати. Запити з атрибутом dryRun автоматично відхиляються, якщо вони відповідають вебхуку з sideEffects == Unknown або Some.
Можливі значення переліку (enum):
"None"означає, що виклик вебхука не матиме побічних ефектів."NoneOnDryRun"означає, що виклик вебхука може мати побічні ефекти, але якщо запит, що розглядається, має атрибут dry-run, побічні ефекти будуть подавлені."Some"означає, що виклик вебхука може мати побічні ефекти. Якщо запит з атрибутом dry-run спробує викликати цей вебхук, запит замість цього завершиться невдачею."Unknown"означає, що немає інформації про побічні ефекти виклику вебхука. Якщо запит з атрибутом dry-run спробує викликати цей вебхук, запит замість цього завершиться невдачею.
webhooks.failurePolicy (string)
FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.
Можливі значення переліку (enum):
"Fail"означає, що помилка виклику вебхука призводить до відмови в допуску."Ignore"означає, що помилка виклику вебхука ігнорується.
webhooks.matchConditions ([]MatchCondition)
Patch strategy: обʼєднання за ключем
nameMap: під час обʼєднання будуть збережені унікальні значення за ключем name
MatchConditions — це список умов, які мають бути виконані для надсилання запиту до цього вебхука. Умови відповідності фільтрують запити, які вже були підібрані за правилами, namespaceSelector і objectSelector. Порожній список matchConditions відповідає всім запитам. Максимальна кількість умов відповідності — 64.
Логіка точного збігу така (за порядком): 1. Якщо БУДЬ-ЯКА умова відповідності оцінюється як FALSE, вебхук оминається. 2. Якщо ВСІ умови відповідності оцінюються як TRUE, вебхук викликається. 3. Якщо будь-яка умова відповідності оцінюється як помилка (але жодна не є FALSE): - Якщо failurePolicy=Fail, запит відхиляється - Якщо failurePolicy=Ignore, помилка ігнорується і вебхук оминається
MatchCondition представляє умову, яка повинна бути виконана для надсилання запиту до вебхука.
webhooks.matchConditions.expression (string), обовʼязково
Expression представляє вираз, який буде оцінено CEL. Результат обробки — bool. Вирази CEL мають доступ до вмісту AdmissionRequest і Authorizer, організованих у змінні CEL:
'object' — Обʼєкт із вхідного запиту. Значення null для запитів DELETE. 'oldObject' — Наявний обʼєкт. Значення null для запитів CREATE. 'request' — Атрибути запиту допуску (/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — CEL Authorizer. Може бути використано для виконання перевірок авторизації для виконавця (користувач або службового облікового запису) запиту. Див. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' — CEL ResourceCheck, створений з 'authorizer' і налаштований із ресурсом запиту. Документація щодо CEL: https://kubernetes.io/docs/reference/using-api/cel/
Обовʼязково.
webhooks.matchConditions.name (string), обовʼязково
Name — це ідентифікатор цієї умови відповідності, використовується для стратегії злиття умов відповідності, а також для надання ідентифікатора для цілей логування. Хороша назва має бути описовою для повʼязаного виразу. Назва має бути кваліфікованою назвою, що складається з алфавітно-цифрових символів, '-', '' або '.', і має починатися та закінчуватися алфавітно-цифровим символом (наприклад, 'MyName' або 'my.name' або '123-abc', регулярний вираз, що використовується для перевірки, — '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]') з необовʼязковим префіксом DNS субдомену та '/' (наприклад, 'example.com/MyName').
Обовʼязково.
webhooks.matchPolicy (string)
matchPolicy визначає, як використовується список "rules" для відповідності вхідним запитам. Допустимі значення — "Exact" або "Equivalent".
Exact: відповідність запиту тільки в тому випадку, якщо він точно відповідає зазначеному правилу. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, але "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запит до apps/v1beta1 або extensions/v1beta1 не буде надіслано до вебхука.Equivalent: відповідність запиту, якщо він змінює ресурс, вказаний у правилах, навіть через іншу групу API або версію. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, і "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запит до apps/v1beta1 або extensions/v1beta1 буде перетворений на apps/v1 і надісланий до вебхука.
Стандартне значення — "Equivalent".
Можливі значення переліку (enum):
"Equivalent"означає, що запити повинні надсилатися до вебхука, якщо вони змінюють ресурс, вказаний у правилах, через іншу групу API або версію."Exact"означає, що запити повинні надсилатися до вебхука, якщо вони точно відповідають зазначеному правилу.
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи збігається простір імен для цього обʼєкта з селектором. Якщо обʼєкт сам є простором імен, перевірка збігу виконується за метаданими обʼєкта. Якщо обʼєкт є іншим ресурсом на рівні кластера, він ніколи не оминає вебхук.
Наприклад, щоб запустити вебхук для будь-яких обʼєктів, чий простір імен не повʼязаний з "runlevel" 0 або 1, потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }Якщо замість цього ви хочете запустити вебхук для будь-яких обʼєктів, чий простір імен повʼязаний з "environment" "prod" або "staging", потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }Див. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для отримання додаткових прикладів селекторів міток.
Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.objectSelector (LabelSelector)
ObjectSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи має обʼєкт відповідні мітки. ObjectSelector оцінюється як для oldObject, так і для newObject, які будуть надіслані до вебхука, і вважається відповідним, якщо будь-який з обʼєктів відповідає селектору. Нульовий обʼєкт (oldObject у випадку створення або newObject у випадку видалення) або обʼєкт, який не може мати міток (наприклад, DeploymentRollback або PodProxyOptions обʼєкт), не вважається таким, що має збіг. Використовуйте objectSelector лише якщо вебхук є опціональним, оскільки кінцеві користувачі можуть оминути вебхук допуску, встановивши мітки. Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.rules ([]RuleWithOperations)
Atomic: буде замінено під час злиття
Rules описують, які операції з якими ресурсами/субресурсами цікавлять вебхук. Вебхук цікавить операція, якщо вона збігаєтьсяз БУДЬ-ЯКИМ правилом. Однак, щоб запобігти ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks від приведення кластера в стан, з якого не можна вийти без повного відключення втулка, ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks ніколи не викликаються для запитів на допуск для обʼєктів ValidatingWebhookConfiguration і MutatingWebhookConfiguration.
RuleWithOperations — це кортеж операцій і ресурсів. Рекомендується переконатися, що всі розширення кортежу є дійсними.
webhooks.rules.apiGroups ([]string)
Atomic: буде замінено під час обʼєднання
APIGroups — це групи API, до яких належать ресурси. '*' означає всі групи. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.apiVersions ([]string)
Atomic: буде замінено під час обʼєднання
APIVersions — це версії API, до яких належать ресурси. '*' означає всі версії. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.operations ([]string)
Atomic: буде замінено під час обʼєднання
Operations — це операції, які цікавлять вебхук допуску — CREATE, UPDATE, DELETE, CONNECT або * для всіх цих операцій і будь-яких майбутніх операцій допуску, які будуть додані. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.resources ([]string)
Atomic: буде замінено під час обʼєднання
Resources — це список ресурсів, до яких застосовується це правило.
Наприклад, 'pods' означає Podʼи, 'pods/log' означає субресурс логу Podʼів. '*' означає всі ресурси, але не субресурси. 'pods/*' означає всі субресурси Podʼів. '*/scale' означає всі субресурси масштабування. '*/*' означає всі ресурси та їх субресурси.
Якщо присутній універсальний символ, правило валідації забезпечить відсутність перекриття ресурсів.
Залежно від навколишнього обʼєкта, субресурси можуть бути недопустимими. Обовʼязково.
webhooks.rules.scope (string)
scope визначає область застосування цього правила. Допустимі значення — "Cluster", "Namespaced" та "*". "Cluster" означає, що правило буде застосовано тільки до ресурсів на рівні кластера. API обʼєкти простору імен є ресурсами на рівні кластера. "Namespaced" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".
Можливі значення переліку:
"*"означає, що включені всі області дії."Cluster"означає, що область дії обмежена обʼєктами в межах кластера. Обʼєкти простору імен мають область дії в межах кластера."Namespaced"означає, що область дії обмежена обʼєктами в просторі імен.
webhooks.timeoutSeconds (int32)
TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.
ValidatingWebhookConfigurationList
ValidatingWebhookConfigurationList — це список ValidatingWebhookConfiguration.
items ([]ValidatingWebhookConfiguration), обовʼязково
Список ValidatingWebhookConfiguration.
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#types-kinds
Операції
get отримати вказану ValidatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
401: Unauthorized
list перелік або перегляд обʼктів ValidatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (ValidatingWebhookConfigurationList): OK
401: Unauthorized
create створення ValidatingWebhookConfiguration
HTTP запит
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
body: ValidatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
202 (ValidatingWebhookConfiguration): Accepted
401: Unauthorized
update заміна вказаної ValidatingWebhookConfiguration
HTTP запит
PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: ValidatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
patch часткове оновлення вказаної ValidatingWebhookConfiguration
HTTP запит
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
delete видалення ValidatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection видаленя колекції ValidatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized