Skip to main content

Это база

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

Установка

Для работы необходим конфиг к кубу, например по пути ~/.kube/config. Хельм не надо как-то дополнительно ставить и хранить его данные, он просто подключается к кубу и создает там все что надо. (FIXME). Чтобы его поставить, надо скачать его из официального репозитория, или, как говорят на официальном сайте,

you can curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash if you want to live on the edge

Чтобы что-нибудь поставить, надо добавить репу. Все как в типичном пакетнике в линуксе. Вот, например, добавим репу VictoriaMetrics и официальную репу хельма:

helm repo add stable https://charts.helm.sh/stable
helm repo add vm https://victoriametrics.github.io/helm-charts/

После чего надо обновить локальный кеш: helm repo update

Кроме репозиториев есть еще и хаб, но он выглядит как помойка Dockerhub или AUR (Arch User Repository), который засран кучей чартов и никак толком не модерируется. Чтобы поставить что-то из чарта, необходимо добавить репозиторий, обновить кеш, а потом поставить пакет. Смотри helm search hub -o yaml bitnami wordpress


Давай что-нибудь поставим

Что мне уже нравится в хельме, так это то что ты можешь получить переменные контейнера (привет, докер) и указать их отдельным файлом при создании. В докере, например, ты должен ручками зайти на докерхаб, посмотреть, какие параметры можно передать в контейнер и указать их каким-то макаром через ENV файл, докер-композ или еще хрен знает как.

# Посмотреть всю инфу о чарте
helm show all stable/mysql
# Посмотреть сам чарт
helm show chart stable/mysql
# Посмотреть переменные чарта
helm show values stable/mysql

Вот, например, я поднял мускуль:

22:40:32 losted@shit1:~/cube/helm
$ helm install stable/mysql --generate-name
WARNING: This chart is deprecated
NAME: mysql-1680378034
LAST DEPLOYED: Sat Apr  1 22:40:35 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1680378034.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1680378034 -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h mysql-1680378034 -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/mysql-1680378034 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}
22:40:37 losted@shit1:~/cube/helm
$ helm ls
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
mysql-1680378034        default         1               2023-04-01 22:40:35.951681832 +0300 MSK deployed        mysql-1.6.9     5.7.30     

22:41:50 losted@shit1:~/cube/helm
$ kubectl get po
NAME                                READY   STATUS    RESTARTS   AGE
mysql-1680378034-798b594f7b-kr2dt   0/1     Running   0          76s

Выполняем пункты 1-2-3 и проваливаемся в базу в контейнере убунты внутри куба. Либо можно пробросить порт с контейнера на локальную машину, смотри Execute the following command to route the connection

Удаляем

23:16:27 losted@shit1:~/cube/helm
$ helm ls
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
mysql-1680378034        default         1               2023-04-01 22:40:35.951681832 +0300 MSK deployed        mysql-1.6.9     5.7.30     
23:16:31 losted@shit1:~/cube/helm
$ helm uninstall mysql-1680378034
release "mysql-1680378034" uninstalled
23:16:44 losted@shit1:~/cube/helm
$ kubectl get po
No resources found in default namespace.