Итак, допустим, у вас была услуга или приложение, которое было построено на оркестровке, такой как Kubernetes. При этом вы также должны решить переполненные архитектурные проблемы, включая безопасность, многоцелевое место, шлюзы API, CLI, управление конфигурацией и журнал.
Разве вы не хотели бы сэкономить какую -то рабочую силу и время разработки и сосредоточиться на создании чего -то уникального для вашей проблемы?
Ну, так и получилось, что ваше решение заключается в том, что называется пользовательским определением ресурсов или CRD. CRD позволяет инженерам подключать свой собственный объект и приложение, как если бы они были родным компонентом Kubernetes. Это чрезвычайно мощно в создании инструментов и услуг, построенных на Kubernetes
Делая это, вы можете создать пользовательские ресурсы для вашего приложения, а также использовать Kubernetes RBAC для обеспечения безопасности и аутентификации для вашего приложения. Эти пользовательские ресурсы будут храниться в интегрированном ETCD Репозиторий с репликацией и правильным управлением жизненным циклом. Они также будут использовать все встроенные функции управления кластерами, которые поставляются с Kubernetes.
Самый простой способ ответить на это — это то, что вы не можете! Это действительно зависит от вашего конкретного проекта и потребностей. Документы Kubernetes отвечают на этот вопрос так:
Используйте Configmap Если какое -либо из следующего применимо:
- Существует существующий, хорошо документированный формат конфигурации, такой как
mysql.cnf
илиpom.xml
Анкет - Вы хотите поместить весь файл конфигурации в один ключ из конфигурации.
- Основное использование файла конфигурации предназначена для программы, работающей в стручке в вашем кластере для потребления файла для самого настройки.
- Потребители файла предпочитают потреблять файл через POD или переменную среды в POD, а не API Kubernetes.
- Вы хотите выполнить обновления с помощью развертывания и т. Д. При обновлении файла.
Примечание : Используйте Секрет Для конфиденциальных данных, которые аналогичны конфигурации, но более безопасны.
Используйте Пользовательское определение ресурсов (CRD или агрегированный API), если применяется большая часть следующего:
- Вы хотите использовать клиентские библиотеки Kubernetes и CLI для создания и обновления нового ресурса.
- Вам нужна поддержка на высшем уровне от
Kubectl
(Например:kubectl Получите My-Object Object-name
). - Вы хотите создать новую автоматизацию, которая наблюдает за обновлениями нового объекта, а затем Crud других объектов, или наоборот.
- Вы хотите написать автоматизацию, которая обрабатывает обновления с объектом.
- Вы хотите использовать конвенции Kubernetes API, такие как
.spec
,.статус
и.metadata
. - Вы хотите, чтобы объект был абстракцией по сравнению с набором контролируемых ресурсов или суммированием других ресурсов.
У каждого есть разные цели и контекст, связанный с этими целями, однако, если вашему проекту нужен гибкий способ расширения Kubernetes, и он пытается в значительной степени придерживаться «Kubernetes-Nation», тогда CRDS прямо в вашем переулке. Теперь вы можете спросить, какие типичные CRD? Я рад, что ты спросил!
Githook Пример Crd
Этот CRD называется Githook Анкет Это определяет git
События Webhook и строительный трубопровод. Controller Githook будет подписать события WebHook на git
Репо и когда события произойдут, он будет запускать конвейер сборки, как определено в CRD.
Работа контроллера Githook CRD:
- Убедитесь, что Webhook зарегистрирован для Git Repo с правильной информацией.
- Убедитесь, что есть сервис работает и ждать событий Webhook. Он использует Knative Service для получения этого веб -крючка, так как его легко реализовать и может масштабироваться до 0, когда он не используется.
С небольшой работой и хорошей командой вы можете собрать такие CRD, как это, и иметь такой стартап, как Circleci или Gitlab !
Таким образом, в заключение, CRD являются действительно удивительными расширениями API Kubernetes и обеспечивают большую гибкость в создании нативных приложений K8S. Надеюсь, это поможет вам обернуть голову вокруг CRDS, и их использует немного больше, спасибо за чтение!
Оригинал: «https://dev.to/appfleet/understanding-and-building-kubernetes-custom-resource-definitions-crds-23d7»