Работа с Helm 3 в Kubernetes

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

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Цели статьи

  1. Рассказать, что такое Helm и для чего нужен.
  2. Установить Helm 3 и показать, как работать с репозиториями.
  3. На конкретных примерах выполнить установку приложений в кластер Kubernetes через Helm 3.
  4. Показать, как редактировать готовые чарты для кастомизации установки.

Что такое Helm и зачем нужен

Если вы уже работаете с Kubernetes или читали мои предыдущие статьи по этой теме (установка kubernetes, работа с кластером, дисковые тома, настройка ingress), то представляете себе, какие тонны yaml файлов приходится писать, чтобы запустить реальное приложение в кластере. Необходимо держать в голове и учитывать кучу абстракций, взаимосвязанных через метки, имена и т.д.

Helm призван упростить это. По своей сути он пытается работать как пакетный менеджер для запуска приложений в кластере. С его помощью можно создавать единые шаблоны для описания приложений, и helm будет дальше готовить и запускать все остальное сам.

Установка Helm 3

Установить Helm можно различными способами, но самый простой и быстрый - скачать и использовать готовый бинарник. Не так давно увидел свет свежий релиз Helm 3. Мы будем использовать именно его. В связи с этим многие приложения из репозиториев могут не устанавливаться или устанавливаться с ошибками, так как еще не поддерживают 3-ю версию. Проще было бы пока использовать 2-ю, но мне не хочется разбирать старую версию. Надо учиться работать с новой. Переход все равно неизбежен.

Идем на страницу загрузок и копируем ссылку на последнюю стабильную версию. Качаем, распаковываем и устанавливаем в систему. В моем случае я ставлю на master-1, так как все управление кластером веду с него.

# wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
# tar xzvf helm-v3.0.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/helm

Проверяем установленную версию.

# helm version

Установка Helm

После установки самого helm, надо подключить репозиторий. По-умолчанию ни один из них не подключен. Поставим самый популярный дефолтный репозиторий.

# helm repo add stable https://kubernetes-charts.storage.googleapis.com/

Проверяем.

# helm search repo stable

Вы должны увидеть список всех чартов (charts), которые могут быть установлены из этого репозитория. По сути это набор приложений, которые может развернуть в kubernetes helm.

Обновить репозиторий можно командой.

# helm repo update

Все как в привычных пакетных менеджерах. Рекомендуется обновлять репозиторий перед установкой, чтобы забрать самую свежую версию приложения, которое будет развернуто в кластере с помощью Helm 3.

Искать в репозиториях helm можно ключом search (вот это да :)

# helm search hub wordpress

Поиск по репозиторию Helm

Установка приложений через Helm 3

Для примера давайте поставим интересную панельку для управления и установки чартов helm через браузер. Называется она Kubeapps. Для ее установки подключим репозиторий разработчика.

# helm repo add bitnami https://charts.bitnami.com/bitnami
# helm repo update

Kubeapps использует отдельный namespace, создадим его.

# kubectl create namespace kubeapps

Ставим приложение Kubeapps через Helm.

# helm install kubeapps --namespace kubeapps bitnami/kubeapps

Наблюдать за созданием подом можно с помощью команды.

# kubectl get pods -w --namespace kubeapps

Установка kubeapps в kubernetes

После установки получите инструкцию по пробросу порта в нужный pod для доступа к dashboard. Но это актуально, если у вас машина, с которой вы управляете кластером - полноценная рабочая станция, на которой вы можете открыть браузер и зайти в панель. У меня это не так. Я буду использовать ingress для доступа к панели.

Chart Kubeapps поддерживает конфигурацию с ingress controller, но мне не захотелось с ним разбираться, выгружая шаблон и правя его. Вместо этого я просто быстренько набросал конфиг ingress-kubeapps.yaml для запуска.

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-kubeapps
  namespace: kubeapps
spec:
  rules:
  - host: kubeapps.cluster.local
    http:
      paths:
      - backend:
          serviceName: kubeapps
          servicePort: 80
        path: /
  tls: []

Применяю его и проверяю.

# kubectl apply -f ingress-kubeapps.yaml
# kubectl get ingress --namespace kubeapps
NAME               HOSTS                    ADDRESS     PORTS   AGE
ingress-kubeapps   kubeapps.cluster.local   10.1.4.39   80      11m

Теперь на своей локальной машине добавляю запись в host.

10.1.4.39 kubeapps.cluster.local

Захожу в панель по адресу kubeapps.cluster.local.

kubeapps dashboard

Дальше нам нужно получить токен для авторизации и доступа в панель. Делаем это в консоли.

# kubectl create serviceaccount kubeapps-operator
# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
# kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode

Получившийся токен копируем и вставляем в окно логина на Dashboard.

В момент написания статьи Kubeapps у меня не заработал без ошибок. Я погуглил и узнал, что установка через Helm 3 еще не поддерживается, но будет со дня на день, поэтому я не стал убирать эту информацию из статьи.

Редактирование Helm чартов

Для примера возьмем еще одну панельку, но намного проще - kube-ops-view. Она показывает состояние кластера Kubernetes. Найдем ее в репозитории.

# helm search hub kube-ops-view
URL                                               	CHART VERSION	APP VERSION	DESCRIPTION                                       
https://hub.helm.sh/charts/incubator/kube-ops-view	0.1.0        	           	Kubernetes Operational View - read-only system ...
https://hub.helm.sh/charts/stable/kube-ops-view   	1.1.1        	19.9.0     	Kubernetes Operational View - read-only system ...

Выгрузим ее манифест в отдельный файл.

# helm inspect values stable/kube-ops-view > kube-ops-view.yaml

Открываем yaml файл и видим весь состав чарта. По сути это просто описание нескольких абстракций Kubernetes, которые нужны для работы панели. По-умолчанию панель устанавливается без поддержки ingress и не включен rbac. Без rbac состояние кластера она не сможет отображать. Давайте это исправим. Добавляем в секцию ingress и rbac параметры.

ingress:
  enabled: true
  path: /
  hostname: kou.cluster.local
rbac:
  create: true

Устанавливаем чарт, используя измененный конфиг.

# helm install ops-view --namespace kube-system stable/kube-ops-view -f kube-ops-view.yaml

Установка ops-view через Helm

Переходим по адресу kou.cluster.local и наблюдаем визуально состояние кластера. Показаны ноды и запущенные в них поды.

kube-ops-view dashboard

Панель неказистая и странная, но для учебных целей подходит. Зато очень маленькая и простая. Можно быстро визуально оценить весь кластер.

Установка WordPress в Kubernetes

Скачать чарт для изучения или изменения можно следующей командой на примере чарта c установкой wordpress.

# helm fetch bitnami/wordpress --untar

В директорию wordpress будет скачан полностью chart, который вы можете изучить. О структуре helm чартов я рассказывать не буду. Есть хорошая статья на хабре на эту тему. Давайте отредактируем манифест чарта и установим wordpress в кластер Kubernetes с помощью Helm.

# helm inspect values bitnami/wordpress > wordpress.yaml

В манифесте вы можете изменить данные пользователя wordpress, который будет создан автоматически, а так же некоторые другие параметры. Меня тут больше всего интересуют настройки ingress, который по-умолчанию не используется. Я это изменяю, включаю ingress и назначаю имя для сайта - kuber.serveradmin.ru. Оно нам пригодится в других статьях. Например, при получении сертификатов от let's encrypt. Можно тут же включить certManager, но это не тема данной статьи, поэтому не буду этого делать.

ingress:
  enabled: true
  hostname: kuber.serveradmin.ru

Так же в манифесте указаны PVC для самого сайта и базы mariadb с характеристиками ReadWriteOnce, 10Gi и 8Gi. Подробно о pvc и работе с дисками я рассказывал в статье по работе с volumes в kubernetes. Если у вас нет provisioner, который автоматически создаст PV, то сделайте это сами. Если не хотите, то просто отключите эти запросы. Для теста можно и без них обойтись.

Устанавливаем wordpress в kubernetes через helm 3 в отдельный namespace.

# kubectl create namespace wordpress
# helm install wordpress --namespace wordpress bitnami/wordpress -f wordpress.yaml

Наблюдать в реальном времени за созданием подов можно с помощью команды.

# kubectl get pod -w -o wide --namespace wordpress

Запуск подов с wordpress

Убедитесь, что у вас работает настройка ingress для wordpress.

# kubectl get ingress -o wide --namespace wordpress
NAME        HOSTS                  ADDRESS     PORTS   AGE
wordpress   kuber.serveradmin.ru   10.1.4.39   80      54s

Добавляйте этот адрес и имя сайта в hosts и идите проверять работу блога.

Установка WordPress в Kubernetes

Пароль пользователя wordpress хранится в secret. Инструкция о том, как его посмотреть будет дана в консоли после установки.

# kubectl get secret --namespace wordpress wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode

После того, как наиграетесь, удалить установленный через helm софт можно командой.

# helm uninstall wordpress --namespace wordpress

Не забывайте указывать namespace. Я периодически забываю и не понимаю сразу, почему команда helm не отрабатывает. Например, посмотреть список установленных чартов можно командой.

# helm ls --namespace wordpress
NAME     	NAMESPACE	REVISION	UPDATED                              	STATUS  	CHART          	APP VERSION
wordpress	wordpress	1       	2019-11-25 17:06:11.3688785 +0300 MSK	deployed	wordpress-8.0.1	5.3.0

Указание namespace обязательно. Без него будет выведена пустота.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

На этом заканчиваю обзорную статью про Helm. Это мощный и достаточно сложный инструмент, если писать чарты к нему самостоятельно. Я постарался просто показать, как с ним работать и быстро устанавливать программы в Kubernetes. С помощью Helm этот процесс значительно упрощается. Можно в несколько команд, к примеру, на всем кластере развернуть мониторинг. Об этом я расскажу в следующих статьях более подробно.

Напоминаю, что данная статья является частью единого цикла про Kubernetes.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

10 комментариев

  1. Поставил себе Lens IDE чтобы посмотреть, что это, и оказалось, что в ней уже есть встроенный Helm )))
    Выглядит так - https://docs.k8slens.dev/main/helm/

  2. Андрюха Devops

    Zerox Спасибо большое!!!

  3. Алексей

    А его можно обновить с 2 до 3, или поставить "рядом"?

    У меня 2.14.3, не знаю как обновиться до 2.8+

  4. Аноним

    У kubeapps нет поддержки helm3

  5. >>какие тонны yaml файлов приходится писать, что запустить реальное приложение в кластере.
    чтобы?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar