Простое объяснение CRD в Kubernetes и как его использовать

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Space by maryanion

CRD (Custom Resource Definition) — специальный ресурс в Kubernetes, который позволяет вносить любые данные. Команда Kubernetes aaS от Mail.ru перевела статью о том, что это такое, как его создать и использовать.

Что такое CRD


CRD — просто таблица в базе данных. Допустим, мы создали таблицу «Фрукты», в ней много записей: «яблоко», «банан», «апельсин». У каждой записи есть столбцы с характеристиками фруктов, например: «сладость», «вкус» и «вес».

Так вот, CRD похожа на таблицу «Фрукты».



CR (Custom resource) — отдельная запись в таблице, например, «яблоко» или «банан». После создания CRD (таблицы), вы можете добавлять или удалять CR (записи).



CRD нужен, поскольку все больше пользователей хотят вносить данные в Kubernetes. Формат данных может быть разным, а CRD не определены в Kubernetes «из коробки». В итоге требуется создавать собственные таблицы, устанавливая имена и типы столбцов, как в базе данных.

Например, IT-менеджер хочет с помощью CRD организовать список пользователей, список отделов, график работы или что-нибудь еще.

Как создать CRD


Как уже упоминалось, CRD — это таблица. Когда мы создаем таблицу, нам нужно задать ее формат: имена и типы столбцов. В CRD эти элементы описаны в форматах YAML или JSON. Также CR описывает каждое значение для записи в форматах YAML или JSON.



Посмотрим, как выглядит CRD изнутри:



CRD делится на три части: общая часть, информация на уровне таблицы и информация на уровне столбца:

  1. Общая часть. Как и в других ресурсах Kubernetes, метаданные включают название CRD (name: "fruit-crd"), apiVersion и kind.
  2. Информация уровня таблицы. Имя таблицы (kind: "fruit"), простое строчное имя для командной строки (simpler: "fruits"), множественное число (plural: "fruits")
  3. Информация уровня столбца. Имя столбца ("sweetness"), тип столбца ("boolean", "string", "integer", "object"), вложенные объекты (реквизиты: <имя дочернего объекта и столбцы>). Они соответствуют формату OpenAPISpecification, версия 3.

Более подробная информация о CRD — в официальном руководстве.

Проверка работы CRD


Действительно ли CRD — это просто таблица? Давайте проверим.

Я не хочу помнить формат CRD, и мне нужен более простой способ его создания. Поэтому я пишу только определение таблицы, и у меня есть оператор — инструмент автоматического создания CRD.

Описание очень простое: нужно перечислить пары имен и типов столбцов.



После применения этого YML мой оператор в Kubernetes автоматически генерирует соответствующую CRD. Вы можете создать собственного оператора, но если хотите попробовать мой, запустите следующую команду:

kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml

После успешной установки оператора проверьте, что Pod запустился:

kubectl get pod -n k8sasdb-system
NAME                                         READY   STATUS    RESTARTS   AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9   2/2     Running   0          8s

Вы можете скачать примеры таблиц и CR-записей отсюда.

Так выглядит сгенерированный CRD. Слева: общая информация и уровень таблицы, справа — информация на уровне столбца.



Затем я добавил следующий CR (YAML для одного фрукта).


Пример CR «Фрукт»

Теперь давайте проверим результаты в таблице и операции над записями.

Создание таблицы


kubectl create -f fruit.yaml



Успешно: CRD установлена = таблица создана.



Это эквивалент SQL-команды CREATE TABLE fruits;.

Создание записи


kubectl create -f apple.yaml



Успешно: CR установлена = запись создана. Это эквивалент SQL-команды INSERT INTO fruits values('apple', ...);.

Получение списка записей


kubectl get fruits



Успешно: отображаются две CR и все столбцы для них. Эквивалент SQL-команды SELECT * FROM fruits;.

Получение записи


kubectl get fruit apple



Успешно. Конечно, можно использовать другие названия, например «банан». Команда эквивалентна SQL-запросу SELECT * FROM fruits WHERE name = 'apple';.

Удаление записи


kubectl delete fruit apple



После удаления команда проверки всего списка фруктов не показывает результат «apple».



Успешно. Аналог в SQL: DELETE FROM fruits WHERE name = 'banana';.

Заключение


CRD — просто таблица в Kubernetes. Вы можете создать новые таблицы с CRD и добавлять записи с CR. Также в CRD вы можете задать схему таблицы, определив названия и типы столбцов. Освоив команды CRD, CR и kubectl, вы можете загружать в Kubernetes любые данные.

Не нужно бояться: даже если вы не помните формат CRD, вам поможет оператор. Моя версия оператора с открытым исходным кодом опубликована здесь.

Что еще почитать:

  1. Как эффективнее использовать kubectl: подробное руководство.
  2. Три уровня автомасштабирования в Kubernetes: как их эффективно использовать.
  3. Наш канал Вокруг Kubernetes в Телеграме.
Источник: https://habr.com/ru/company/mailru/blog/515138/


Интересные статьи

Интересные статьи

LogiMap ASRS Unit by Vidom Veeam Backup & Replication — коммерческая платформа для резервного копирования и управления данными облачной, виртуальной и физической среды. Она поддерж...
Вышел релиз 13.4 с хранилищем HashiCorp для переменных CI, Kubernetes Agent и центром безопасности, а также переключаемыми фичами в Starter В GitLab мы всегда думаем о том, как пом...
Один из ключевых сценариев работы в CRM это общение с клиентом в удобном для него канале. По почте, по телефону, по SMS или в мессенджере. Особенно выделяется WhatsApp — интеграцию с ...
Привет, Хабровчане! В преддверии старта занятий в группах базового и продвинутого курсов «Разработчик Python», мы подготовили для вас еще один полезный перевод. Python всегда был...
В современном мире Kubernetes-облаков, так или иначе, приходится сталкиваться с ошибками в программном обеспечении, которые допустил не ты и не твой коллега, но решать их придется тебе. Данная ст...