Custom Resource Definitions
Цей розділ посібника з найкращих практик розглядає створення та використання обʼєктів Custom Resource Definition (CRD).
При роботі з CRD важливо розрізняти два різні аспекти:
- Існує декларація CRD. Це YAML файл, який має
kind: CustomResourceDefinition
. - Потім є ресурси, які використовують CRD. Наприклад, якщо CRD визначає
foo.example.com/v1
, будь-який ресурс, який маєapiVersion: example.com/v1
іkind: Foo
, є ресурсом, що використовує цей CRD.
Встановлення декларації CRD перед використанням ресурсу
Helm оптимізований для швидкого завантаження якомога більшої кількості ресурсів у Kubernetes. За дизайном Kubernetes може обробити цілий набір маніфестів і активувати їх усі (це називається циклом узгодження).
Але є різниця з CRD.
Для CRD декларація повинна бути зареєстрована до того, як будь-які ресурси цього типу CRD можуть бути використані. Процес реєстрації іноді займає кілька секунд.
Метод 1: Нехай helm
зробить це за вас
З приходом Helm 3 ми видалили старі crd-install
хуки на користь простішої методології. Тепер існує спеціальна тека crds
, яку ви можете створити у вашому чарті для зберігання CRD. Ці CRD не підлягають шаблонізації, але будуть стандартно встановлені під час виконання helm install
для чарту. Якщо CRD вже існує, його буде пропущена з попередженням. Якщо ви бажаєте пропустити крок встановлення CRD, ви можете використовувати прапорець --skip-crds
.
Декілька застережень (і пояснень)
Зараз не підтримується оновлення або видалення CRD за допомогою Helm. Це було зроблено після тривалого обговорення у спільноті через небезпеку випадкової втрати даних. Крім того, наразі немає консенсусу в спільноті щодо того, як управляти CRD та їх життєвим циклом. Як це буде розвиватися, Helm додасть підтримку для цих випадків.
Прапорець --dry-run
для helm install
і helm upgrade
наразі не підтримується для CRD. Мета "Dry Run" полягає в перевірці того, що вивід чарту дійсно працюватиме, якщо буде надіслано на сервер. Але CRD є модифікацією поведінки сервера. Helm не може встановити CRD під час сухого запуску, тому клієнт виявлення не дізнається про цей Custom Resource (CR), і перевірка не пройде. Ви можете перемістити CRD до окремого чарту або використовувати helm template
замість цього.
Ще один важливий момент, який слід врахувати в обговоренні підтримки CRD, — це те, як обробляється рендеринг шаблонів. Одним з відмінних недоліків методу crd-install
, що використовувався в Helm 2, була неспроможність правильно перевіряти чарти через зміну доступності API (CRD фактично додає ще один доступний API до вашого кластера Kubernetes). Якщо чарт встановлював CRD, helm
більше не мав дійсного набору версій API, з якими можна було працювати. Це також є причиною видалення підтримки шаблонізації для CRD. З новим методом crds
для встановлення CRD ми тепер забезпечуємо, що helm
має абсолютно достовірну інформацію про поточний стан кластера.
Метод 2: Окремі чарти
Ще один спосіб зробити це — помістити визначення CRD в один чарт, а потім розмістити будь-які ресурси, які використовують цей CRD, в іншому чарті.
В цьому методі кожен чарт потрібно встановлювати окремо. Однак цей робочий процес може бути більш корисним для адміністраторів кластерів, які мають права адміністратора на кластер.