Как создать файлы Kubernetes YAML

Разработка на Kubernetes

Вступление

Эта статья предназначена как руководство по созданию файлов манифеста Kubernetes.

YAML означает YAML, а не язык разметки, используемый для создания манифестов Kubernetes. По определению:

YAML - это удобный для человека язык сериализации данных для всех языков программирования.

Действительно, чтение YAML довольно просто, если вы поймете, что отступы - это способ построения структур данных. Это особенно просто, если вы знакомы с Python, F # или другими языками, поддерживающими отступы.

С другой стороны, писать YAML гораздо менее увлекательно. Если вы знакомы с разработкой REST API без схемы, подумайте о Kubernetes YAML так же, как о полезной нагрузке JSON для API. Нет схемы для проверки, и все ручки отображаются как данные в полезной нагрузке.

Создать простой файл YAML относительно просто, но для производственного использования требуется гораздо больше настроек. Вот пример манифеста Kubernetes Deployment. Если вы немного знаете Kubernetes, большинство настроек будет иметь смысл при чтении файла. А теперь представьте, что вам нужно создать несколько из них с нуля (вход, сервис, карта конфигурации, секреты ...)

Как разработчику вам нужно будет создать несколько различных типов манифестов. Вот список ресурсов Kubernetes, * обозначает ресурсы, которые обычно создаются / обслуживаются разработчиками. Обратите внимание, что это применимо только в том случае, если у вас есть выделенный администратор Kubernetes, который может позаботиться обо всем остальном. Список сокращен только до общих ресурсов, и в производственных сценариях, вероятно, будут использоваться различные CRD (пользовательские определения ресурсов).

Если вы не запутались, вы не обращаете внимания.

Том Питерс

Что вы узнаете

Давайте попробуем облегчить некоторую путаницу при написании файлов YAML и сделать этот процесс проще и менее болезненным.

Прочитав эту статью, вы узнаете:

  • различные способы создания файлов Kubernetes YAML
  • как автоматически обнаруживать и исправлять ошибки в процессе разработки
  • какие инструменты разработки использовать, чтобы упростить создание файлов YAML
  • узнать об онлайн-инструментах, специализирующихся на создании различных типов файлов YAML

Предпосылки

Если вы хотите продолжить и запачкать руки с YAML, вам понадобятся:

Обратите внимание, что в репозитории используется devcontainer со всеми инструментами и конфигурацией, необходимыми для запуска встроенных примеров. Из-за этого образ большой, поэтому, пожалуйста, измените его соответствующим образом перед запуском контейнера.

Создать vs сгенерировать

Первоначально у вас может возникнуть соблазн создать как можно больше шаблонов. Моя рекомендация - не надо! Особенно, если вы новичок в Kubernetes или YAML, экспериментируйте, копируйте и вставляйте из Kubernetes docs, но не используйте генераторы в первый же день.

Когда вы освоите основы, постепенно добавляйте инструменты, которые сделают вашу жизнь проще. Есть хорошие новости; вы быстро поймете основы.

Хороший способ узнать, достаточно ли вы знакомы с содержанием YAML определенного ресурса, если оно становится, ну… скучным. С этого момента вам следует с головой окунуться в мир генераторов и помощников, чтобы сохранить рассудок и облегчить себе жизнь.

#1 YQ

Первый инструмент, о котором я хочу поговорить, - это yq. Yq не является специфическим для Kubernetes, это скорее мастер на все руки YAML. Изучение этого инструмента поможет вам запрашивать и управлять файлами YAML прямо из командной строки. Это помогает с такими задачами, как:

  • фильтрация файла YAML по определенному значению, например получение имени изображения из файла развертывания

Выбор значений из файлов YAML полезен, но освоение yq поможет в основном при массовых операциях с несколькими файлами и более сложных преобразованиях.

# 3 Kubectl

Начать создание файлов YAML для большинства ресурсов легко с помощью kubectl. Вы можете использовать флаг - dry-run = client -oyaml› yaml_file.yaml в командах kubectl create или kubectl run для генерации большей части ресурсов.

Например, чтобы сгенерировать файл YAML для модуля nginx, вы можете запустить:

kubectl run nginx - image = nginx - port = 8080 - env ​​= env = DEV - labels = app = nginx, owner = user - privileged = false - dry-run = client -oyaml ›nginx-pod.yaml

Эта команда сгенерирует следующий YAML:

Файл нужно немного почистить, но это хорошая отправная точка.

Теперь вы можете создать развертывание, используя:

kubectl создать развертывание my-dep - image = nginx - dry-run = client -oyaml ›deployment.yaml

и используйте yq, чтобы объединить два файла.

Этот процесс может быстро усложниться, но для автоматизации большинства задач легко использовать сценарии оболочки.

Использование комбинации kubectl и yq отлично подходит для запуска простого разового проекта, а также помогает автоматизировать промежуточные процессы.

Если вас интересуют советы и рекомендации kubectl, у меня есть постоянно растущий список полезных команд в this gist.

# 3 Docker-compose

В вашем проекте есть файл docker-compose.yaml? Генерация манифестов Kubernetes из файла docker-compose возможна с помощью инструмента под названием kompose.

Давайте посмотрим на это в действии. Мы будем использовать файл docker-compose из репозитория awesome-compose.

Вот пример файла для создания докеров:

Теперь давайте сгенерируем манифесты Kubernetes с помощью kompose:

Эта команда принимает docker-compose в качестве входных данных и выводит сгенерированный Kubernetes YAML в папку k8s-manifest.

Использование kompose - хороший вариант, если у вас уже есть файл docker-compose. Часто требуются настройки, но они на один шаг приближают вас к хорошей отправной точке.

# 4 VS Code с плагинами

VS Code имеет 2 плагина, которые помогают создавать файлы YAML. Большое спасибо Ави Нехаме за это.

Шаблоны Kubernetes

Шаблон позволяет быстро создавать строительные леса для любого ресурса Kubernetes.

Создайте файл yaml, начните вводить имя ресурса Kubernetes и нажмите TAB, чтобы вставить шаблон. Продолжайте нажимать TAB, чтобы заполнить имена в обязательных полях.

ЯМЛ

Это расширение от Red Hat запускает сервер YAML в фоновом режиме и добавляет контекстно-зависимое интеллектуальное завершение к любому ресурсу Kubernetes.

Не забудьте активировать его в настройках и перезагрузить VS Code. Добавьте эту строку в настройки, чтобы разрешить завершение Kubernetes для всех файлов YAML.

"yaml.schemas": {
  "Kubernetes": "*.yaml"
}

# 5 CDK8s

Переходим от командной строки к программированию. Если вам нужно написать много YAML, но вы знаете Python, Typescript, JavaScript, Java или Go, вы можете использовать всю мощь языка программирования, чтобы значительно упростить процесс написания YAML.

Представляем CDK8s

cdk8s - это среда разработки программного обеспечения с открытым исходным кодом для определения приложений Kubernetes и многоразовых абстракций с использованием знакомых языков программирования и многофункциональных объектно-ориентированных API. Приложения cdk8s синтезируются в стандартные манифесты Kubernetes, которые можно применять к любому кластеру Kubernetes.

CDK8s работает, открывая объекты ресурсов Kubernetes и используя объект, называемый конструкциями, для дальнейшего абстрагирования и автоматизации создания файлов YAML.

Настоящая сила этого подхода заключается в способности:

  • создавать повторно используемые компоненты и абстракции, которые отражают ваши требования
  • использовать конструкции нативного языка программирования для автоматизации, тестирования и проверки процесса создания YAML

# 6 НАМЛ

Если вы знаете Go и совсем не любите YAML и хотите избежать его любой ценой, этот проект может вам подойти!

Очень интересный подход, разработанный Крисом Нова (профиль Github), представляет собой Go-ориентированный инструмент под названием naml, который работает путем создания манифестов Kubernetes непосредственно в Go и их установки в кластере с помощью команды установки CLI.

Этот инструмент может создавать YAML аналогично CKD8, но работает только с Go.



# 7 Онлайн-инструменты

Время от времени разочарованный разработчик создает простой веб-интерфейс с формой для сбора входных данных для генерации файлов YAML. Эти проекты обычно недолговечны и плохо обслуживаются, поэтому я советую держаться подальше от онлайн-генераторов Kubernetes YAML.

Есть одно исключение - онлайн-редактор от cilium, специализирующийся на создании ресурса Kubernetes под названием Network Policy.

Заключительные мысли

Мы видели различные способы создания файлов Kubernetes YAML, некоторые из них с использованием простых инструментов командной строки, автоматически генерирующих файлы. Остальные выставляют полные языки программирования.

Это здорово, но как убедиться, что наш YAML правильный? Каковы некоторые из лучших практик для проверки содержимого файла? Как можно автоматизировать эти методы?

Следите за новостями в следующей статье, если вы хотите узнать ответы на эти и подобные вопросы.