Что такое Helm и почему разработчики должны его использовать?
Большинство компаний, серьезно настроенных на переход к гибкому управлению или на цифровую трансформацию, рассматривают контейнеры в качестве альтернативы стандартным монолитным приложениям. Причина этого заключается в том, что контейнеры позволяют не только развертывать масштабные приложения, но и развертывать приложения и сервисы, которые лучше подходят для современных облако-ориентированных потребностей. Кроме того, контейнеры способствуют автоматизации CI/CD, обеспечивают автоматическое наращивание и сокращение масштаба, а также уровень отказоустойчивости, способный обеспечить время безотказной работы, близкое к 5-9 с.
Большинство людей, рассказывающих о контейнерах (особенно Kubernetes), забывают о том, что развертывание и управление этими развертываниями - дело непростое. Необходимо не только сначала запустить сервисы, позволяющие развертывать и управлять контейнерами, но и тщательно разработать сложные манифесты, которые могут отнять у разработчика много времени.
Еще больше времени отнимает то, что каждый раз, когда разработчику приходится разворачивать очередной полностековый контейнер, он возвращается к чертежной доске с манифестами. А поскольку ваши приложения и сервисы становятся все более сложными, этот жизненный цикл становится все более трудным и длительным.
К счастью, существует инструмент, позволяющий упростить и облегчить развертывание контейнерных приложений и сервисов.
Этот инструмент называется Helm.
Что такое Helm?
Считайте, что Helm - это apt или DNF для контейнеров. Это менеджер пакетов, позволяющий загружать диаграммы, которые представляют собой предварительно упакованные коллекции всех необходимых версионных и предварительно сконфигурированных ресурсов, требуемых для развертывания контейнера.
Диаграммы Helm написаны на языке YAML и содержат все, что необходимо разработчикам для развертывания контейнера на кластере Kubernetes. Это позволяет загрузить диаграмму, настроить ее (при необходимости) и развернуть на кластере с помощью одной команды. Такое упрощение позволяет сделать развертывание контейнеров более эффективным, надежным и повторяемым.
Подумайте об этом следующим образом: Диаграммы Helm - это как шаблоны, которые можно загрузить, использовать и повторно применять для развертывания контейнера. Таким образом, вместо того, чтобы постоянно изобретать колесо или начинать с нуля, можно всегда начать с предопределенного манифеста и развернуть его на основе этого.
Преимущества использования Helm
Преимущества использования Helm уже должны быть очевидны. Прежде всего, они позволяют сэкономить время команды разработчиков. Вместо того чтобы каждый раз начинать с нуля, разработчики могут обратиться к диаграммам Helm и получить значительную фору в развертывании.
Используя Helm, ваш бизнес сразу же получит следующие преимущества:
- Значительное повышение производительности
- Снижение сложности развертывания
- Внедрение облачных нативных приложений
- Более воспроизводимые развертывания и результаты
- Возможность задействовать Kubernetes с помощью одной команды CLI
- Улучшенная масштабируемость
- Возможность повторного использования диаграмм Helm в различных средах
- Более оптимизированный конвейер CI/CD
- Более простой откат к предыдущим версиям приложения (если что-то пошло не так)
- Многочисленные CI/CD-хуки для автоматизации действий и даже планирования проверок работоспособности.

Еще одно очень важное преимущество использования Helm заключается в том, что вашим разработчикам больше не придется создавать отдельные YAML-файлы для каждого приложения в стеке. При использовании диаграммы Helm вы получаете все необходимое для развертывания, включая конфигурации ресурсов (которые могут быть адаптированы по мере необходимости). Учитывая, насколько сложными могут быть конфигурации ресурсов (и как легко они могут вызвать проблемы при неправильной настройке), это часто считается важным преимуществом Helm.
Даже простой манифест Kubernetes может стать сложным. Вот очень простой пример:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgreslabels:
app: database
spec:
replicas: 1
selector:
matchLabels:
app: database
template:
metadata:
labels:
app: database
spec:
containers:
- name: postgres
image: postgres:latest
ports:
- containerPort: 5432
volumeMounts:
- name: sqlscript
mountPath: /docker-entrypoint-initdb.d
env:
- name: POSTGRES_USER
value: "postgres"
- name: POSTGRES_PASSWORD
value: "postgres"
volumes:
- name: sqlscript
configMap:
name: pg-init-script
Теперь представьте, что вам необходимо создать гораздо более сложный фулл-стек (с многочисленными приложениями и сервисами, которые даже подключаются к сторонним API). Если вашим разработчикам приходится писать их для каждого развертывания, они теряют драгоценное время.
Вместо этого можно извлечь диаграмму Helm, настроить все необходимое в загруженной диаграмме, а затем развернуть ее одной командой. Это значительно эффективнее, чем писать все с нуля.
Еще одним важным преимуществом использования диаграмм Helm является то, что они позволяют начинающим разработчикам контейнеров быстро освоить работу с Kubernetes. Загрузите диаграмму Helm и начните просматривать YAML-файлы, чтобы понять, что к чему. Знание того, что все в пакете работает как есть, - отличный способ узнать, как создается успешный манифест.
Недостатки использования Helm
Не все в Helm идеально. Хотя кривая обучения не так велика, как если бы вы делали все вручную, вашим разработчикам придется освоить не только настройку манифестов, но и инструменты командной строки Helm.
Другим недостатком Helm является его сложность. Ваши разработчики будут получать не просто простые однофайловые манифесты, а очень сложные пакеты с полным набором определений приложений, на прочесывание которых и настройку под ваши нужды может уйти немало времени.
Но даже с учетом этих двух недостатков Helm делает очень сложный жизненный цикл программного обеспечения гораздо более управляемым.
Заключение
Если ваша команда разработчиков только начинает погружаться в контейнеры и Kubernetes (или только начинает по-настоящему развивать свои развертывания), вам следует серьезно задуматься о том, что Helm - это обязательный элемент. Это особенно актуально, если вы хотите, чтобы эти команды работали с максимальной эффективностью, а развертывания были не только высокодоступными, но и надежными и повторяемыми.


