Представьте, что вам нужно собрать игрушку из конструктора. У вас есть много деталей, инструкция, но задача от этого не становится легче.
Helm — это набор готовых блоков для нашего конструктора и инструкция к ним.
Вместо того, чтобы собирать приложение из отдельных частей (сервисов, конфигураций и зависимостей) вручную, мы используем Helm, который:
- упаковывает приложение в чарты (все нужные компоненты приложения собраны вместе, как детали конструктора в одной коробке)
- облегчает установку и настройку приложения (просто берем готовый чарт и разворачиваем его в Kubernetes, аналогично сборке конструктора по инструкции)
- управляет версиями приложения (helm позволяет легко откатываться к предыдущим версиям приложения, как будто ты разбираешь конструктор до определенного этапа и собираешь заново)
Таким образом, Helm упрощает развертывание и управление приложениями в Kubernetes.
Рассмотрим на практике
Развернем веб-сервер nginx с помощью Helm.
Установим сам Helm — https://helm.sh/docs/intro/install/
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
Установим nginx
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-nginx bitnami/nginx --version 18.0.1
kubectl get pods
Проверим
kubectl port-forward service/my-nginx 8888:80 --address 0.0.0.0
Перейдем по ip адресу нашей локальной машины на порт 8888 и увидим стартовую страницу nginx
Удалим
helm uninstall my-nginx
Рассмотрим другой пример
kubectl create namespace kubeapps
helm install kubeapps --namespace kubeapps bitnami/kubeapps
kubectl get pods -n kubeapps -w // наблюдаем
Для доступа к Kubeapps выполним
kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
Узнаем токен
kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
Проверим
kubectl port-forward -n kubeapps svc/kubeapps 8080:80 --address 0.0.0.0
В браузере переходим на 192.168.2.170:8080 (у вас будет свой адрес) и вводим токен. Нажимаем Submit

Давайте задеплоим Grafana с помощью веб-интерфейса
В правом верхнем углу нажимаем DEPLOY -> вверху в search packages ищем Grafana -> нажимаем на нее -> задаем имя grafana, в Package Version выбираем самую свежую и внизу нажимаем DEPLOY -> ждем
Проверим
kubectl port-forward svc/grafana 5555:3000 --address 0.0.0.0
Заходим 192.168.2.170:5555 (у вас свой адрес)
Логинимся admin пароль смотрим в веб-интерфейсе Kubeapps в разделе grafana -> Application Secrets

Проверим работу Grafana
sudo wget https://github.com/prometheus/prometheus/releases/download/v2.45.3/prometheus-2.45.3.linux-amd64.tar.gz
sudo tar -xzf prometheus*.tar.gz
sudo rm prometheus*.tar.gz
cd prometheus*/
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
sudo mv prometheus /usr/local/bin
sudo mv promtool /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo mv consoles /etc/prometheus
sudo mv console_libraries /etc/prometheus
sudo mv prometheus.yml /etc/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo chown -R prometheus:prometheus /var/lib/prometheus
sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Background service of Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus
sudo ufw allow 9090/tcp
Проверим
Пройдем по адресу http://192.168.2.170:9090 (у вас будет свой)
Теперь в Grafana выберем Connections -> Add new connection -> Prometheus -> Add new data source -> Зададим имя, например KuberServer -> В Connection пропишем http://192.168.2.170:9090 -> Внизу нажимаем Save & test
Далее выбираем Dashboard -> New -> New dashboard -> Import a dashboard -> Вводим ID 3662 и нажимаем Load.
Внизу выбираем источник Prometheus — наш называется KuberServer и жмем Import.
Видим наш Dashboard

Настройка мониторинга сервера делается намного глубже, но в качестве простого примера данный вариант подойдет.