Что такое Custom Resource Definition?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Custom Resource Definition (CRD) — это способ расширить Kubernetes, добавляя новые типы объектов в кластер, которых нет в стандартной поставке. Это позволяет создавать и управлять своими собственными ресурсами, используя стандартные API Kubernetes, kubectl и другие инструменты.
CRD определяют схему для нового типа ресурса. После создания CRD можно создавать экземпляры этого ресурса, похожие на стандартные объекты, такие как Deployment или Service.
Ключевые аспекты CRD:
- Расширяемость API: CRD расширяют Kubernetes API, позволяя работать с пользовательскими объектами так же, как и со встроенными.
- Объекты как код: Пользовательские ресурсы описываются в виде манифестов YAML/JSON, что соответствует принципам инфраструктуры как кода.
- Консистентность: CRD обеспечивают консистентный способ определения и управления пользовательскими ресурсами в кластере.
- Использование операторов: CRD часто используются в связке с Kubernetes Operators, которые реализуют логику управления для пользовательских ресурсов. Оператор "знает", как реагировать на создание, обновление или удаление экземпляров CRD, автоматизируя выполнение задач.
Пример определения CRD (частично):
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myservices.stable.example.com // Имя CRD
spec:
group: stable.example.com // Группа API
names:
plural: myservices // Множественное имя
singular: myservice // Единственное имя
kind: MyService // Имя типа объекта (используется в `kind:`)
shortNames:
- ms // Короткое имя
scope: Namespaced // Область видимости: Cluster или Namespaced
versions:
- name: v1 // Версия API
served: true // Доступна для обслуживания
storage: true // Используется для хранения
schema:
openAPIV3Schema: // Схема данных для ресурса
type: object
properties:
spec:
type: object
properties:
image:
type: string
replicas:
type: integer
minimum: 1
status:
type: object
properties:
availableReplicas:
type: integer
После применения этого CRD можно создавать объекты kind: MyService.
Пример использования CRD:
apiVersion: stable.example.com/v1
kind: MyService
metadata:
name: my-custom-app
spec:
image: my-docker-image:latest
replicas: 3
Разница между CRD и Operator:
| Характеристика | CRD | Operator |
|---|---|---|
| Функция | Определяет новый тип ресурса | Реализует логику управления для ресурса |
| Тип ресурса | Объект в Kubernetes API | Приложение, работающее в кластере (Deployment/StatefulSet) |
| Ответственность | Определение структуры данных | Реагирование на изменения состояния ресурса, автоматизация задач |
Таким образом, CRD предоставляют способ расширить Kubernetes API, а Operators используют CRD для автоматизации управления пользовательскими ресурсами, следуя принципам контроллеров Kubernetes.