Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Введение в Helm

Evgenii Terechkov
October 18, 2018
110

Введение в Helm

Evgenii Terechkov

October 18, 2018
Tweet

Transcript

  1. 2 2 slurm.io План • Рендеринг/доставка манифестов • Helm •

    Деплой Helm/Tiller/приложения • Чарты • Helm и CI/CD • Проблемы Helm
  2. 3 3 slurm.io Рендеринг/доставка манифестов • sed/envsubst (не доставляет, не

    следит) • ansible (jinja2 + k8s, не следит) • kubectl* (apply/set image, не следит, не масштабируется) • helm Простой манифест, много однотипного: Деплой: spec.selector.matchLabels: app: myapp spec.template.metadata.labels: app: myapp Сервис: spec.selector: app: myapp
  3. 4 4 slurm.io Helm • Заявлен как пакетный менеджер для

    k8s • Проект CNСF - стандарт de facto • Реально декларативный • Компоненты: helm (клиент), tiller (под в k8s) • Что есть для CI/CD: – watch – rollback • Поддерживает плагины https://helm.sh/ https://helm.sh/
  4. 5 5 slurm.io Деплой helm/tiller yum -y install helm В

    общем виде: helm init --service-account service_account_name --tiller-namespace app/team/sys_namespace --history-max 10 Последующее обновление: helm init --upgrade
  5. 6 6 slurm.io Деплой приложения helm repo add sb https://charts.southbridge.ru/

    helm repo update helm search kube-ops helm inspect values stable/kube-ops-view > values.yaml helm install --name ops-view --namespace=kube-system --values values.yaml stable/kube-ops-view helm ls Терминология: Релиз/Release - экземпляр чарта, установленный в k8s (здесь ops-view) Ревизия/Revision - порядковый номер версии релиза
  6. 7 7 slurm.io Чарты • Метаинформация • Набор темплэйтированных манифестов

    • Файл со значениями переменных • Опционально: субчарты и/или зависимости архив .tgz
  7. 8 8 slurm.io Структура чарта kube-ops-view/ Chart.yaml .helmignore README.md values.yaml

    charts/ * requirements.yaml * templates/ NOTES.txt _helpers.tpl *.yaml
  8. 9 9 slurm.io Темплейты Go {{- define "fullname" -}} {{-

    if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- $name := default .Chart.Name .Values.nameOverride -}} {{- if contains $name .Release.Name -}} {{- .Release.Name | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{- end -}}
  9. 10 10 slurm.io Helm и CI/CD helm upgrade --install release_name

    .helm --set image=image_name --set imageTag=image_tag_name --wait --timeout 300 --debug || (helm history --max 2 release_name | head -n 2 | tail -n 1 | awk "{print \$1}" | xargs helm rollback --wait release_name && exit 1)
  10. 11 11 slurm.io Проблемы Helm • Манифесты многословны и маловыразительны

    • Манифесты не переиспользуются • Не обрабатывает транзитивные зависимости • Сквозное конфигурирование: нужно конфигурировать все сабчарты • Подтянутые зависимости при удалении чарта удаляются • Работает только с образами: ещё один уровень абстракций • Values только файлом, здесь и сейчас
  11. 12 12 slurm.io Полезные утилиты/плагины • helm-diff - сравнение ревизий

    релизов helm • helm-monitor - интеграция с Prometheus • ChartMuseum - инструмент создания/эксплуатаций репозитория чартов • chart-testing - инструмент тестирования чартов • kubedog - слежение за ресурсами k8s (lib/cli) • Другое - подборка на официальном сайте