|
| 1 | +--- |
| 2 | +title: Custom Resource Definitions |
| 3 | +description: Як створювати та використовувати CRDs (Custom Resource Definitions). |
| 4 | +sidebar_position: 7 |
| 5 | +--- |
| 6 | + |
| 7 | +Цей розділ Посібника з найкращих практик присвячений створенню та використанню обʼєктів Custom Resource Definition. |
| 8 | + |
| 9 | +При роботі з Custom Resource Definitions (CRDs) важливо розрізняти два різні аспекти: |
| 10 | + |
| 11 | +- Існує декларація CRD. Це YAML файл, який має `kind: CustomResourceDefinition`. |
| 12 | +- Потім є ресурси, які _використовують_ CRD. Наприклад, якщо CRD визначає `foo.example.com/v1`, будь-який ресурс, який має `apiVersion: example.com/v1` і `kind: Foo`, є ресурсом, що використовує цей CRD. |
| 13 | + |
| 14 | +## Встановлення декларації CRD перед використанням ресурсу {#install-a-crd-declaration-before-using-the-resource} |
| 15 | + |
| 16 | +Helm оптимізований для швидкого завантаження якомога більшої кількості ресурсів у Kubernetes. За дизайном Kubernetes може обробити цілий набір маніфестів і активувати їх усі (це називається процедурою узгодження). |
| 17 | + |
| 18 | +Але є різниця з CRDs. |
| 19 | + |
| 20 | +Для CRD декларація повинна бути зареєстрована до того, як будь-які ресурси цього типу CRD можуть бути використані. Процес реєстрації іноді займає кілька секунд. |
| 21 | + |
| 22 | +### Метод 1: Нехай `helm` зробить це за вас {#method-1-let-helm-do-it-for-you} |
| 23 | + |
| 24 | +З приходом Helm 3 ми видалили старі `crd-install` хуки на користь простішої методології. Тепер існує спеціальна тека `crds`, яку ви можете створити у вашому чарті для зберігання CRDs. Ці CRDs не підлягають шаблонізації, але будуть стандартно встановлені під час виконання `helm install` для чарту. Якщо CRD вже існує, його буде пропущена з попередженням. Якщо ви бажаєте пропустити крок встановлення CRD, ви можете використовувати прапорець `--skip-crds`. |
| 25 | + |
| 26 | +#### Декілька застережень (і пояснень) {#some-caveats-and-explanations} |
| 27 | + |
| 28 | +Зараз не підтримується оновлення або видалення CRDs за допомогою Helm. Це було зроблено після тривалого обговорення у спільноті через небезпеку випадкової втрати даних. Крім того, наразі немає консенсусу в спільноті щодо того, як управляти CRDs та їх життєвим циклом. Як це буде розвиватися, Helm додасть підтримку для цих випадків. |
| 29 | + |
| 30 | +Прапорець `--dry-run` для `helm install` і `helm upgrade` наразі не підтримується для CRDs. Мета "Dry Run" полягає в перевірці того, що вивід чарту дійсно працюватиме, якщо буде надіслано на сервер. Але CRDs є модифікацією поведінки сервера. Helm не може встановити CRD під час тестового запуску, тому клієнт виявлення не дізнається про цей Custom Resource (CR), і перевірка не пройде. Ви можете перемістити CRDs до окремого чарту або використовувати `helm template` замість цього. |
| 31 | + |
| 32 | +Ще один важливий момент, який слід врахувати в обговоренні підтримки CRD, — це те, як обробляється рендеринг шаблонів. Одним з явних недоліків методу `crd-install`, що використовувався в Helm 2, була неспроможність правильно перевіряти чарти через зміну доступності API (CRD фактично додає ще один доступний API до вашого кластера Kubernetes). Якщо чарт встановлював CRD, `helm` більше не мав дійсного набору версій API, з якими можна було працювати. Це також є причиною видалення підтримки шаблонізації для CRDs. З новим методом `crds` для встановлення CRD ми тепер забезпечуємо, що `helm` має абсолютно достовірну інформацію про поточний стан кластера. |
| 33 | + |
| 34 | +### Метод 2: Окремі чарти {#method-2-separate-charts} |
| 35 | + |
| 36 | +Ще один спосіб зробити це — помістити визначення CRD в один чарт, а потім розмістити будь-які ресурси, які використовують цей CRD, в _іншому_ чарті. |
| 37 | + |
| 38 | +В цьому методі кожен чарт потрібно встановлювати окремо. Однак цей робочий процес може бути більш корисним для адміністраторів кластерів, які мають права адміністратора на кластер. |
0 commit comments