Helm

Helm — это менеджер пакетов для Kubernetes, который упрощает развертывание и управление приложениями в кластере Kubernetes. Helm называют "apt/yum для Kubernetes" благодаря его способности управлять сложными приложениями.

Основные компоненты Helm

  • Chart — пакет Kubernetes ресурсов
  • Release — экземпляр Chart'а в кластере
  • Repository — хранилище Chart'ов
  • Values — конфигурационные параметры

Структура Helm Chart

 1mychart/
 2  Chart.yaml          # Метаданные Chart'а
 3  values.yaml         # Значения по умолчанию
 4  templates/          # Шаблоны Kubernetes манифестов
 5    deployment.yaml
 6    service.yaml
 7    ingress.yaml
 8    _helpers.tpl      # Вспомогательные шаблоны
 9  charts/             # Зависимые Chart'ы
10  crds/              # Custom Resource Definitions

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

 1# Установка Chart'а
 2helm install my-release ./mychart
 3
 4# Обновление Release
 5helm upgrade my-release ./mychart
 6
 7# Просмотр установленных Release'ов
 8helm list
 9
10# Удаление Release
11helm uninstall my-release
12
13# Создание нового Chart'а
14helm create mychart
15
16# Проверка шаблонов
17helm template my-release ./mychart
18
19# Добавление репозитория
20helm repo add bitnami https://charts.bitnami.com/bitnami

Шаблонизация в Helm

 1apiVersion: apps/v1
 2kind: Deployment
 3metadata:
 4  name: {{ include "mychart.fullname" . }}
 5  labels:
 6    {{- include "mychart.labels" . | nindent 4 }}
 7spec:
 8  replicas: {{ .Values.replicaCount }}
 9  selector:
10    matchLabels:
11      {{- include "mychart.selectorLabels" . | nindent 6 }}
12  template:
13    metadata:
14      labels:
15        {{- include "mychart.selectorLabels" . | nindent 8 }}
16    spec:
17      containers:
18      - name: {{ .Chart.Name }}
19        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
20        ports:
21        - name: http
22          containerPort: {{ .Values.service.port }}

Файл values.yaml

 1# Default values for mychart
 2replicaCount: 1
 3
 4image:
 5  repository: nginx
 6  pullPolicy: IfNotPresent
 7  tag: ""
 8
 9service:
10  type: ClusterIP
11  port: 80
12
13ingress:
14  enabled: false
15  className: ""
16  annotations: {}
17  hosts:
18    - host: chart-example.local
19      paths:
20        - path: /
21          pathType: Prefix

Преимущества Helm

  • Упрощение развертывания сложных приложений
  • Управление зависимостями
  • Версионирование релизов
  • Откат к предыдущим версиям
  • Переиспользование Chart'ов

Установка Helm

 1# На macOS через Homebrew
 2brew install helm
 3
 4# На Linux
 5curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
 6
 7# Через пакетный менеджер
 8# Ubuntu/Debian
 9sudo apt-get install helm
10
11# Проверка установки
12helm version

Best Practices для Helm

  • Используй семантическое версионирование для Chart'ов
  • Документируй все параметры values.yaml
  • Тестируй Chart'ы перед публикацией
  • Используй helm lint для проверки
  • Храни Chart'ы в Git репозиториях

FAQ

Нужен ли Helm для простых приложений?

Для очень простых приложений можно обойтись kubectl, но Helm облегчает управление конфигурацией и обновлениями.

Как обновить приложение через Helm?

Используй команду helm upgrade с новыми values или новой версией Chart'а. Helm сохранит историю для возможности отката.