Skip to content

5.4 Helm

Helm является менеджером пакетов для Kubernetes, который упрощает процесс развертывания и управления приложениями в кластерах Kubernetes. Он представляет собой систему, которая позволяет разработчикам упаковывать приложения в единые пакеты, известные как чарты (charts), которые могут быть легко установлены, обновлены и удалены в кластере Kubernetes.

Основные преимущества Helm включают:

  • Упрощение развертывания сложных приложений: Helm позволяет развертывать приложения как набор предварительно настроенных ресурсов Kubernetes с установленными версиями, что сокращает усилия и упрощает процесс развертывания.
  • Богатая экосистема чартов: Helm дает доступ к обширной библиотеке чартов, созданных сообществом, что позволяет легко находить готовые решения для развертывания различных приложений и сервисов.
  • Повторяемость и стандартизация: Использование чартов обеспечивает повторяемость и стандартизацию процесса развертывания приложений, что важно для непрерывной интеграции и непрерывной доставки (CI/CD).
  • Управление релизами: Helm позволяет легко управлять различными версиями приложений, обновлять их и откатывать к предыдущим версиям при необходимости.

Основные команды

1
2
3
4
5
6
7
8
9
helm template my-nginx bitnami/nginx

helm install my-nginx bitnami/nginx

helm upgrade my-nginx bitnami/nginx --set replicaCount=2

helm upgrade my-nginx bitnami/nginx -f stage.yaml

helm uninstall my-nginx

Работа с релизами

  • RELEASE - это имя релиза, к которому вы хотите выполнить откат.
  • [REVISION] - это номер ревизии, к которой вы хотите откатиться. Если этот аргумент опущен или установлен на 0, команда откатит релиз к предыдущему состоянию.
  • [flags] - дополнительные флаги, которые можно использовать с командой, например --dry-run для предварительного просмотра изменений без их применения.
1
2
3
4
5
6
7
helm rollback <RELEASE> [REVISION] [flags]

helm rollback my-nginx

helm history my-nginx

helm rollback my-nginx 1

Шаблонизатор

Шаблонизатор Helm использует Go шаблоны для генерации манифестов Kubernetes из чартов. Это позволяет разработчикам создавать динамические и настраиваемые манифесты на основе конфигураций, определенных в values.yaml файле чарта. Шаблонизатор поддерживает различные функции такие как циклы, условия и переменные, что делает его мощным инструментом для создания сложных манифестов.

Вставка

1
2
3
4
5
labels:
  {{- include "grafana.labels" . | nindent 4 }}
  {{- with .Values.labels }}
  {{- toYaml . | nindent 4 }}
  {{- end }}
Условие
1
2
3
{{- if .Values.dashboards }}
checksum/dashboards-json-config: {{ include (print $.Template.BasePath "/dashboards-json-configmap.yaml") . | sha256sum }}
{{- end }}
Цикл
1
2
3
4
5
{{- range $key, $value := .Values.imageRenderer.envValueFrom }}
  - name: {{ $key | quote }}
    valueFrom:
      {{- tpl (toYaml $value) $ | nindent 16 }}
{{- end }}

Создание своего helm chart

mychart/
 Chart.yaml
 values.yaml
 templates/
    deployment.yaml
    service.yaml
    _helpers.tpl
 charts/
    mydependency/
 .helmignore
 README.md
 requirements.yaml
 NOTES.txt

Основные файлы в Helm чарте и их назначение включают:

  • Chart.yaml: Этот файл содержит метаданные о чарте, включая его версию, имя, описание.
  • values.yaml: Этот файл содержит значения по умолчанию для переменных, используемых в шаблонах чарта.
  • templates/: В этой директории хранятся манифесты Kubernetes.
  • charts/: Если ваш чарт зависит от других чартов, вы можете указать эти зависимости в этой директории.
  • NOTES.txt: в Helm чарте используется для предоставления пользователям информации после успешного развертывания чарта. Этот файл может содержать полезные сведения, такие как доступные URL-адреса, учетные данные для доступа, шаги для последующей настройки или любую другую информацию, которая может помочь пользователям в работе с развернутым приложением или сервисом.
1
2
3
helm create new-app

helm lint new-app

Файл _helpers.tpl помогает упростить и повторно использовать код в шаблонах чарта, делая их более читаемыми и поддерживаемыми.

1
2
3
4
5
6
{{- define "mychart.labels" }}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
1
2
3
4
5
6
apiVersion: v1
kind: Pod
metadata:
 name: {{ include "mychart.fullname" . }}
 labels:
    {{- include "mychart.labels" . | nindent 4 }}

Пример установки чарта loki

helm repo add grafana https://grafana.github.io/helm-charts

helm pull grafana/loki-stack --untar

$ vim value.yaml
grafana:
  enabled: true

helm upgrade --install loki --namespace=monitoring --values values.yaml grafana/loki-stack

kubectl get secret loki-grafana -n monitoring -o json

kubectl port-forward svc/loki-grafana 3000:3000