Кubernetes стал де-факто стандартом для оркестрации контейнеров, упрощая управление, масштабирование и развертывание контейнеризованных приложений. Однако с ростом сложности кластеров Kubernetes управление развертываниями с использованием только YAML-манифестов может стать неудобным. Helm, менеджер пакетов Kubernetes, упрощает развертывание приложений, управление ими и откат изменений, позволяя разработчикам упаковывать манифесты Kubernetes в версии пакетов, называемых чартами. Custom Resources (CR), с другой стороны, расширяют API Kubernetes, предоставляя способ определения и управления новыми типами объектов.
Развертывание Kubernetes с использованием Helm Charts и Custom Resources
Kubernetes стал де-факто стандартом для оркестрации контейнеров, упрощая управление, масштабирование и развертывание контейнеризованных приложений. Однако с ростом сложности кластеров Kubernetes управление развертываниями с использованием только YAML-манифестов может стать неудобным. Helm, менеджер пакетов Kubernetes, упрощает развертывание приложений, управление ими и откат изменений, позволяя разработчикам упаковывать манифесты Kubernetes в версии пакетов, называемых чартами. Custom Resources (CR), с другой стороны, расширяют API Kubernetes, предоставляя способ определения и управления новыми типами объектов.
В этой статье мы рассмотрим, как развертывать приложения в Kubernetes с использованием Helm charts и custom resources, выделяя преимущества обоих методов. Мы затронем следующие темы:
- Введение в Helm и Custom Resources
- Настройка кластера Kubernetes
- Основы Helm: установка Helm и создание чартов
- Управление приложениями Kubernetes с помощью Helm charts
- Создание и управление custom resources в Kubernetes
- Сочетание Helm charts и custom resources для гибких развертываний
Что такое Helm?
Helm — это менеджер пакетов Kubernetes, который упрощает процесс определения, установки и обновления приложений Kubernetes. Он использует предварительно настроенные шаблоны (известные как чарты) для развертывания приложений и управления их жизненным циклом, позволяя разработчикам:
- Упаковывать ресурсы Kubernetes в единый объект (Helm chart).
- Легко устанавливать и обновлять приложения.
- Легко откатывать изменения.
- Повторно использовать чарт для разных окружений, изменяя значения.
Helm использует три основных концепции:
- Charts: Коллекции файлов, описывающих ресурсы Kubernetes.
- Release: Экземпляр Helm chart, работающий в кластере Kubernetes.
- Repositories: Места, где хранятся и расшариваются чарты.
Что такое Custom Resources Kubernetes?
Custom Resources (CR) — это пользовательские типы объектов, которые расширяют функциональность Kubernetes. Custom Resources позволяют разработчикам определять собственные объекты и использовать их как ресурсы, нативные для Kubernetes. Например, в то время как Kubernetes предоставляет встроенные объекты, такие как Pods, Deployments и Services, Custom Resource может определять все, что угодно, от конфигураций баз данных до правил мониторинга.
Custom Resources связываются с Custom Resource Definitions (CRD), которые служат схемой для CR. С помощью CRD разработчики могут создавать новые объекты API Kubernetes, которые работают так же, как и встроенные. Custom Resources могут быть связаны с контроллерами, которые отслеживают эти ресурсы и выполняют действия, автоматизируя сложные рабочие процессы.
Настройка кластера Kubernetes
Прежде чем развертывать приложения с использованием Helm и custom resources, необходимо настроить среду Kubernetes. Ниже описаны шаги для локальной настройки кластера Kubernetes с использованием Minikube.
Установка Minikube
Minikube — это легкий инструмент для запуска Kubernetes-кластеров локально. Установите Minikube в зависимости от вашей операционной системы:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Запуск Minikube
Запустите Minikube и создайте локальный кластер Kubernetes:
minikube start
Проверка установки Kubernetes
Проверьте статус кластера с помощью kubectl — командного инструмента Kubernetes:
kubectl cluster-info
kubectl get nodes
Установка Helm
Helm требует работающего кластера Kubernetes, поэтому установите Helm на вашем локальном компьютере и настройте его для подключения к кластеру:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
Основы Helm: установка Helm и создание чартов
После того как кластер Kubernetes будет настроен, можно перейти к функциональности Helm, создавая и развертывая чарт.
Структура Helm Chart
Helm charts следуют определенной структуре, которая организует все файлы манифестов Kubernetes в повторно используемом формате.
Создание Helm Chart
Для создания нового Helm chart выполните команду:
helm create mychart
Эта команда создаст описанную выше структуру каталогов. Измените каталог templates/
, чтобы включить определения ваших ресурсов Kubernetes.
Развертывание приложения с помощью Helm
Чтобы развернуть приложение с использованием Helm, выполните следующие шаги:
- Упакуйте чарт:
helm package mychart
Эта команда развертывает Helm chart и создает новый релиз (myrelease).
Настройка развертываний с помощью значений
Файл values.yaml
позволяет гибко настраивать ваш Helm chart. Например, измените ограничения ресурсов, переменные окружения или версии образов, просто изменяя значения в этом файле.
Вы также можете переопределить values.yaml
во время выполнения, передав значения через командную строку:
helm install myrelease ./mychart --set image.tag=2.0
Управление приложениями Kubernetes с помощью Helm Charts
Helm упрощает сложные приложения Kubernetes, используя шаблоны и повторное использование. Рассмотрим некоторые расширенные варианты использования Helm.
Обновление приложений
Чтобы обновить конфигурацию приложения, измените чарт или его значения и выполните следующую команду:
helm upgrade myrelease ./mychart
Helm обновляет приложение, отслеживая новый релиз.
Откат изменений
Если обновление вызвало проблемы, Helm может откатиться к предыдущей версии:
helm rollback release 1
Использование репозиториев Helm
Вы можете делиться Helm chart, отправляя их в репозитории Helm. Чтобы использовать чарт из публичного репозитория:
helm repo add stable https://charts.helm.sh/stable
helm install stable/MySQL
Создание и управление Custom Resources в Kubernetes
Хотя Helm прекрасно подходит для управления традиционными ресурсами Kubernetes, custom resources предоставляют гибкость для сложных сценариев. Вот как определить, создать и управлять custom resources в Kubernetes.
Создание Custom Resources
После того как CRD настроен, вы можете создать экземпляры custom resource:
apiVersion: example.com/v1
kind: Database
metadata:
name: my-database
spec:
engine: Postgres
version: 12.3
Управление Custom Resources
Custom resources ведут себя как любые другие объекты Kubernetes. Вы можете их перечислять, описывать и удалять с помощью стандартных команд kubectl:
kubectl get databases
kubectl describe database my-database
kubectl delete database my-database
Сочетание Helm Charts и Custom Resources для гибких развертываний
Helm charts и custom resources можно комбинировать для создания гибких и повторно используемых развертываний. Часто используемый сценарий — интеграция CRD в Helm charts для лучшей расширяемости приложения.
Создание Helm Templates для Custom Resources
Вы также можете включать определения custom resource в шаблоны Helm chart. Это позволяет использовать значения и условно создавать custom resources на основе параметров конфигурации:
apiVersion: Values.card.apiVersion
kind: Database
metadata:
name: Release.Name
spec:
engine: Values.database.engine
version: Values.database.version
Развертывание с помощью Helm
Наконец, разверните чарт, который включает как традиционные ресурсы Kubernetes, так и custom resources:
helm install myrelease ./mychart
Helm управляет всей стеком приложения, включая определения custom resources и их экземпляры.
Helm charts и custom resources предоставляют мощные инструменты для управления приложениями Kubernetes. Helm упрощает процесс упаковки, развертывания и обновления приложений, в то время как custom resources расширяют возможности Kubernetes, позволяя вам определять свои API. Сочетание обоих инструментов позволяет разработчикам создавать высоко гибкие и повторно используемые решения.