1 - CustomResourceDefinition

CustomResourceDefinition представляє ресурс, який повинен бути експонований на сервері API.

apiVersion: apiextensions.k8s.io/v1

import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"

CustomResourceDefinition

CustomResourceDefinition представляє ресурс, який повинен бути експонований на сервері API. Його імʼя повинно бути у форматі <.spec.name>.<.spec.group>.


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-selectors

      SelectableField вказує шлях 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. Коли ввімкнено:

        1. запити до первинної точки доступу власного ресурсу ігнорують зміни в розділі status обʼєкта.
        2. Запити до субресурсу /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 дозволений, якщо дотримується один з наступних шаблонів:

    1. anyOf:
      • type: integer
      • type: string
    2. allOf:
      • anyOf:
        • type: integer
        • type: string
      • ... нуль або більше
  • 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 можливі значення:

    1. atomic: список розглядається як єдине ціле, як скаляр. Списки atomic будуть повністю замінені при оновленні. Це розширення може використовуватися для будь-якого типу списків (структур, скалярів тощо).
    2. set: Набори — це списки, які не повинні мати кілька елементів з однаковим значенням. Кожне значення повинно бути скаляром, обʼєктом з x-kubernetes-map-type atomic або масивом з x-kubernetes-list-type atomic.
    3. map: Ці списки схожі на map тим, що їх елементи мають неіндексований ключ, який використовується для їх ідентифікації. Порядок зберігається при злитті. Теґ map має використовуватися тільки для списків з елементами типу object. Стандартне значення для масивів — atomic.
  • x-kubernetes-map-type (string)

    x-kubernetes-map-type анотує обʼєкт, щоб більш детально описати його топологію. Це розширення має використовуватися тільки, коли тип обʼєкта є object і може мати 2 можливі значення:

    1. granular: Ці maps є справжніми map (пари ключ-значення) і кожне поле незалежне одне від одного (їх можна маніпулювати окремими акторами). Це стандартн поведінка для всіх map.
    2. 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 в map testMap, 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.

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.reason (string)

      reason — унікальна однозначна причина в CamelCase для останньої зміни стану.

  • storedVersions ([]string)

    Atomic: буде замінено під час злиття

    storedVersions перераховує всі версії CustomResources, які коли-небудь зберігалися. Відстеження цих версій дозволяє визначити шлях міграції для збережених версій в etcd. Поле є змінним, тому контролер міграції може завершити міграцію до іншої версії (переконавшись, що у сховищі не залишилося старих обʼєктів), а потім видалити решту версій з цього списку. Версії не можна видаляти з spec.versions, доки вони існують у цьому списку.

CustomResourceDefinitionList

CustomResourceDefinitionList є списком обʼєктів CustomResourceDefinition.


Операції


get отримати вказаний CustomResourceDefinition

HTTP запит

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}

Параметри

  • name (в шляху): string, обовʼязково

    імʼя CustomResourceDefinition

  • pretty (в запиті): string

    pretty

Відповідь

200 (CustomResourceDefinition): OK

401: Unauthorized

get отримати статус вказаного CustomResourceDefinition

HTTP запит

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status

Параметри

  • name (в шляху): string, обовʼязково

    імʼя CustomResourceDefinition

  • pretty (в запиті): string

    pretty

Відповідь

200 (CustomResourceDefinition): OK

401: Unauthorized

list перелік або перегляд обʼєктів типу CustomResourceDefinition

HTTP запит

GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions

Параметри

Відповідь

200 (CustomResourceDefinitionList): OK

401: Unauthorized

create створення CustomResourceDefinition

HTTP запит

POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions

Параметри

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • gracePeriodSeconds (в запиті): integer

    gracePeriodSeconds

  • pretty (в запиті): string

    pretty

  • propagationPolicy (в запиті): string

    propagationPolicy

Відповідь

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection видалення колекції CustomResourceDefinition

HTTP запит

DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions

Параметри

Відповідь

200 (Status): OK

401: Unauthorized

2 - DeviceClass v1alpha3

DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори.

apiVersion: resource.k8s.io/v1alpha3

import "k8s.io/api/resource/v1alpha3"

DeviceClass

DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори. На нього можна посилатися у запитах до пристрою, щоб застосувати ці пресети. Охоплює кластер.

Це альфа-тип і вимагає увімкнення функціональної можливості DynamicResourceAllocation.


  • apiVersion: resource.k8s.io/v1alpha3

  • 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), а також конвертацію між різними версіями.

        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.)

  • 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): обсяги пристрою, згруповані за префіксом.

        Приклад: Розглянемо пристрій з 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)
        
  • suitableNodes (NodeSelector)

    Лише вузли, що відповідають селектору, будуть враховуватися планувальником при спробі знайти Вузол, що підходить для Podʼа, коли цей Pod використовує запит, який ще не був виділений і цей запит виділяється через контролер панелі управління. Він ігнорується, коли запит не використовує контролер панелі управління для виділення.

    Налаштування цього поля є необовʼязковим. Якщо не задано, всі Вузли є кандидатами.

    Це поле є альфа-версією і потребує увімкнення функціональної можливості DRAControlPlaneController.

    Селектор вузлів представляє об'єднання результатів одного або кількох запитів міток над набором вузлів; тобто, він представляє OR (логічне "або") селекторів, що представлені термінами селектора вузлів.

    • suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), обов'язково

      Atomic: буде замінено під час злиття

      Обов'язковий параметр. Список термів селектора вузлів. Терми обʼєднуються оператором OR.

      Null або порожній термін селектора вузла не відповідає жодному об'єкту. Вимоги до них складаються за принципом AND. Тип TopologySelectorTerm реалізує підмножину NodeSelectorTerm.

      • suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)

        Atomic: буде замінено під час злиття

        Список вимог до селектора вузлів за мітками вузлів.

      • suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)

        Atomic: буде замінено під час злиття

        Список вимог до селектора вузла за полями вузла.

DeviceClassList

DeviceClassList — це колекція класів.


  • apiVersion: resource.k8s.io/v1alpha3

  • kind: DeviceClassList

  • metadata (ListMeta)

    Стандартні метадані списку

  • items ([]DeviceClass), обовʼязково

    Items —список класів ресурсів.

Operations


get отримати вказаний DeviceClass

HTTP запит

GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}

Параметри

  • name (в шляху): string, обовʼязково

    імʼя DeviceClass

  • pretty (в запиті): string

    pretty

Відповідь

200 (DeviceClass): OK

401: Unauthorized

list перелік або перегляд обʼєктів типу DeviceClass

HTTP запит

GET /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

200 (DeviceClassList): OK

401: Unauthorized

create створення DeviceClass

HTTP запит

POST /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

200 (DeviceClass): OK

201 (DeviceClass): Created

202 (DeviceClass): Accepted

401: Unauthorized

update заміна вказаного DeviceClass

HTTP запит

PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}

Параметри

  • name (в шляху): string, обовʼязково

    імʼя DeviceClass

  • body: DeviceClass, обовʼязково

  • dryRun (в запиті): string

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • pretty (в запиті): string

    pretty

Відповідь

200 (DeviceClass): OK

201 (DeviceClass): Created

401: Unauthorized

patch часткове оновлення вказаного DeviceClass

HTTP запит

PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}

Параметри

  • name (в шляху): string, обовʼязково

    імʼя DeviceClass

  • body: Patch, обовʼязково

  • dryRun (в запиті): string

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

200 (DeviceClass): OK

201 (DeviceClass): Created

401: Unauthorized

delete видалення DeviceClass

HTTP запит

DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}

Параметри

Відповідь

200 (DeviceClass): OK

202 (DeviceClass): Accepted

401: Unauthorized

deletecollection видалення колекції DeviceClass

HTTP запит

DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

200 (Status): OK

401: Unauthorized

3 - MutatingWebhookConfiguration

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: злиття за ключем name

    Map: унікальні значення ключа 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.

    • webhooks.failurePolicy (string)

      FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.

    • webhooks.matchConditions ([]MatchCondition)

      Patch strategy: злиття за ключем name

      Map: унікальні значення за ключем 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".

    • 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".

    • 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" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".

    • webhooks.timeoutSeconds (int32)

      TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.

MutatingWebhookConfigurationList

MutatingWebhookConfigurationList — це список MutatingWebhookConfiguration.


Операції


get отримати вказану MutatingWebhookConfiguration

HTTP запит

GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}

Параметри

  • name (в шляху): string, обовʼязково

    name of the MutatingWebhookConfiguration

  • pretty (в запиті): string

    pretty

Відповідь

200 (MutatingWebhookConfiguration): OK

401: Unauthorized

list перелік або перегляд обʼєктів типу MutatingWebhookConfiguration

HTTP запит

GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations

Параметри

Відповідь

200 (MutatingWebhookConfigurationList): OK

401: Unauthorized

create створення MutatingWebhookConfiguration

HTTP запит

POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations

Параметри

Відповідь

200 (MutatingWebhookConfiguration): OK

201 (MutatingWebhookConfiguration): Created

202 (MutatingWebhookConfiguration): Accepted

401: Unauthorized

update заміна вказаної MutatingWebhookConfiguration

HTTP запит

PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}

Параметри

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • gracePeriodSeconds (в запиті): integer

    gracePeriodSeconds

  • pretty (в запиті): string

    pretty

  • propagationPolicy (в запиті): string

    propagationPolicy

Відповідь

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection видалення колекції MutatingWebhookConfiguration

HTTP запит

DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations

Параметри

Відповідь

200 (Status): OK

401: Unauthorized

4 - ValidatingWebhookConfiguration

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: обʼєднання за ключем name

    Map: унікальні значення ключа 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.

    • webhooks.failurePolicy (string)

      FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.

    • webhooks.matchConditions ([]MatchCondition)

      Patch strategy: обʼєднання за ключем name

      Map: під час обʼєднання будуть збережені унікальні значення за ключем 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".

    • 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" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".

    • webhooks.timeoutSeconds (int32)

      TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.

ValidatingWebhookConfigurationList

ValidatingWebhookConfigurationList — це список ValidatingWebhookConfiguration.


Операції


get отримати вказану ValidatingWebhookConfiguration

HTTP запит

GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

Параметри

  • name (в шляху): string, обовʼязково

    назва ValidatingWebhookConfiguration

  • pretty (в запиті): string

    pretty

Відповідь

200 (ValidatingWebhookConfiguration): OK

401: Unauthorized

list перелік або перегляд обʼктів ValidatingWebhookConfiguration

HTTP запит

GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

Параметри

Відповідь

200 (ValidatingWebhookConfigurationList): OK

401: Unauthorized

create створення ValidatingWebhookConfiguration

HTTP запит

POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

Параметри

Відповідь

200 (ValidatingWebhookConfiguration): OK

201 (ValidatingWebhookConfiguration): Created

202 (ValidatingWebhookConfiguration): Accepted

401: Unauthorized

update заміна вказаної ValidatingWebhookConfiguration

HTTP запит

PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

Параметри

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • gracePeriodSeconds (в запиті): integer

    gracePeriodSeconds

  • pretty (в запиті): string

    pretty

  • propagationPolicy (в запиті): string

    propagationPolicy

Відповідь

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection видаленя колекції ValidatingWebhookConfiguration

HTTP запит

DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

Параметри

Відповідь

200 (Status): OK

401: Unauthorized