Установка клиентской (helm-клиента) и серверной (helm-tiller) частей было рассмотрено в статье(актуально для версии Helm 2)
https://kamaok.org.ua/?p=3109
Обновленная статья в связи с выходом Helm версии 3
Установка HELM версии 3
https://helm.sh/docs/intro/install/
На Centos7
1 |
# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 |
1 |
# chmod 700 get_helm.sh |
1 |
# ./get_helm.sh |
На Ubuntu/Debian
1 |
# curl https://baltocdn.com/helm/signing.asc | apt-key add - |
1 |
# apt-get install apt-transport-https --yes |
1 |
# echo "deb https://baltocdn.com/helm/stable/debian/ all main" | tee /etc/apt/sources.list.d/helm-stable-debian.list |
1 |
# apt-get update && apt-get install helm |
1 |
# helm version |
Настройка автодополнения helm в bash
1 |
# echo "source <(helm completion bash)" >> ~/.bashrc && source ~/.bashrc |
Проверка
1 |
# helm [TAB] |
Проверка локальных helm-переменных
1 |
# helm env |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
HELM_BIN="helm" HELM_CACHE_HOME="/root/.cache/helm" HELM_CONFIG_HOME="/root/.config/helm" HELM_DATA_HOME="/root/.local/share/helm" HELM_DEBUG="false" HELM_KUBEAPISERVER="" HELM_KUBEASGROUPS="" HELM_KUBEASUSER="" HELM_KUBECONTEXT="" HELM_KUBETOKEN="" HELM_MAX_HISTORY="10" HELM_NAMESPACE="default" HELM_PLUGINS="/root/.local/share/helm/plugins" HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json" HELM_REPOSITORY_CACHE="/root/.cache/helm/repository" HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml" |
По умолчанию в helm используются такие настройки:
1.Имя namespace по умолчанию — default
2.Максимальное количество хранимых ревизий — 10 штук
Список изменений между версиями 2 и 3 в Helm
https://v3.helm.sh/docs/faq/#changes-since-helm-2
Все helm команды доступны по команде
1 |
# helm --help |
Справка по конкретной команде
1 |
# helm [command] --help |
Базовая работа с Helm. Полезные команды Helm
Создание структуры helm-чарта
1 |
# helm create chart |
1 |
# tree chart |
1 2 3 4 5 6 7 8 9 10 11 |
├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ ├── service.yaml │ └── tests │ └── test-connection.yaml └── values.yaml |
Установка чарта
Helm-чарт может быть установлен из
1 2 3 |
- каталога с чартом - архива с чартом - URL-а – по которому доступен чарт |
Источник установки чарта указывается в качестве аргумента команды helm install
Например, установка чарта из каталога
1 |
# helm install --name my-release ./chart |
Создание Helm chart-архив файла путем пакетирования каталога с Helm-чартом
1 |
# helm package chart |
1 |
Successfully packaged chart and saved it to: /root/helm-training/chart-0.1.0.tgz |
1 |
# ls -la *.tgz |
1 |
-rw-r--r-- 1 root root 2787 Apr 17 11:47 chart-0.1.0.tgz |
Теперь из такого архива может быть установлен Helm-чарт
Просмотра списка задеплоенных чартов(релизов)
1 |
# helm list |
1 2 |
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE my-release 1 Wed Apr 17 11:51:12 2019 DEPLOYED chart-0.1.0 default |
Просмотр состояния релиза my-release
1 |
# helm status my-release |
Обновление Helm-релиза
1 |
# helm upgrade my-release ./chart |
Проверка запущенной версии Nginx
1 |
# kubectl get pod | grep my-release |
1 |
my-release-chart-6f894b6664-cgvzg 1/1 Running 0 43m |
1 |
# kubectl exec my-release-chart-6f894b6664-cgvzg -- nginx -v |
1 |
nginx version: nginx/1.14.2 |
Например, обновим тег образа с 1.14.2(текущего), то 1.15
1 |
# helm upgrade my-release --set image.tag=1.15 ./chart |
1 2 3 4 5 6 |
… ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE my-release-chart-6786dd76d7-zzjr5 1/1 Terminating 0 105s my-release-chart-86dd7cfbcd-dffvq 0/1 ContainerCreating 0 0s … |
1 |
# helm status my-release |
1 2 3 |
==> v1/Pod(related) NAME READY STATUS RESTARTS AGE my-release-chart-86dd7cfbcd-dffvq 1/1 Running 0 8s |
1 |
# kubectl exec my-release-chart-86dd7cfbcd-dffvq -- nginx -v |
1 |
nginx version: nginx/1.15.12 |
Создание(если релиз еще не существует) или обновление(если релиз уже существует)
1 |
# helm upgrade my-release --install ./chart |
На сервере,на котором выполняли команду helm upgrade…
выполняем следующие команды, чтобы получить доступ к сервису
1 |
# export POD_NAME=$(kubectl get pods --namespace default -l "app=chart,release=my-release" -o jsonpath="{.items[0].metadata.name}") |
1 |
# kubectl port-forward $POD_NAME 8080:80 |
После чего под становится доступным на хосте 127.0.0.1 и порту 8080
1 |
# curl http://127.0.0.1:8080 |
1 2 3 |
... <h1>Welcome to nginx!</h1> ... |
Альтернативным тестированием доступности пода может быть обращение к сервису, за которым стоит этот под, например, с нового/отдельного пода
1 |
# kubectl get svc | grep chart |
1 |
my-release-chart ClusterIP 10.105.104.192 <none> 80/TCP 21m |
1 |
# kubectl run --rm -it --image=alpine my-test |
1 |
/# apk -U add curl |
1 |
/# curl -v my-release-chart |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
…… * Trying 10.105.104.192... * TCP_NODELAY set * Expire in 200 ms for 4 (transfer 0x561bdce5e7a0) * Connected to my-release-chart (10.105.104.192) port 80 (#0) > GET / HTTP/1.1 > Host: my-release-chart > User-Agent: curl/7.64.0 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.14.2 < Date: Wed, 17 Apr 2019 12:08:19 GMT < Content-Type: text/html < Content-Length: 612 < Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT < Connection: keep-alive < ETag: "5c0692e1-264" < Accept-Ranges: bytes …… <h1>Welcome to nginx!</h1> |
Просмотр доступных версий релиза
1 |
# helm history my-release |
1 2 3 4 5 6 7 |
REVISION UPDATED STATUS CHART DESCRIPTION 1 Wed Apr 17 11:51:12 2019 SUPERSEDED chart-0.1.0 Install complete 2 Wed Apr 17 12:32:35 2019 SUPERSEDED chart-0.1.0 Upgrade complete 3 Wed Apr 17 12:36:39 2019 SUPERSEDED chart-0.1.0 Upgrade complete 4 Wed Apr 17 12:38:32 2019 SUPERSEDED chart-0.1.0 Upgrade complete 5 Wed Apr 17 12:40:17 2019 SUPERSEDED chart-0.1.0 Upgrade complete 6 Wed Apr 17 12:42:12 2019 DEPLOYED chart-0.1.0 Upgrade complete |
Rollback релиза
Откат на одну из версий(например, на 4-ю версию)
1 |
# helm rollback my-release 4 |
1 |
Rollback was a success! Happy Helming! |
1 |
# helm history my-release |
1 2 3 4 5 6 7 8 |
REVISION UPDATED STATUS CHART DESCRIPTION 1 Wed Apr 17 11:51:12 2019 SUPERSEDED chart-0.1.0 Install complete 2 Wed Apr 17 12:32:35 2019 SUPERSEDED chart-0.1.0 Upgrade complete 3 Wed Apr 17 12:36:39 2019 SUPERSEDED chart-0.1.0 Upgrade complete 4 Wed Apr 17 12:38:32 2019 SUPERSEDED chart-0.1.0 Upgrade complete 5 Wed Apr 17 12:40:17 2019 SUPERSEDED chart-0.1.0 Upgrade complete 6 Wed Apr 17 12:42:12 2019 SUPERSEDED chart-0.1.0 Upgrade complete 7 Wed Apr 17 12:50:29 2019 DEPLOYED chart-0.1.0 Rollback to 4 |
1 |
# helm status my-release |
1 2 3 |
==> v1/Pod(related) NAME READY STATUS RESTARTS AGE my-release-chart-6786dd76d7-wgxqd 1/1 Running 0 75s |
1 |
# kubectl exec my-release-chart-6786dd76d7-wgxqd -- nginx -v |
1 |
nginx version: nginx/1.14.2 |
Откатимся до 6-й версти релиза(там,где nginx имеет версию 1.15)
1 |
# helm rollback my-release 6 |
1 |
Rollback was a success! Happy Helming! |
1 |
# helm status my-release |
1 2 3 |
==> v1/Pod(related) NAME READY STATUS RESTARTS AGE my-release-chart-86dd7cfbcd-k5d6p 1/1 Running 0 37s |
1 |
# kubectl exec my-release-chart-86dd7cfbcd-k5d6p -- nginx -v |
1 |
nginx version: nginx/1.15.12 |
Удаление релиза
1 |
# helm delete --purge my-release |
1 |
release "my-release" deleted |
Опция —purge удаляет чарт с хранилища и делает имя чарта доступным для дальнейшего использования
В Helm v3 поиск (helm search) поддерживает два типа поиска:
1.Поиск доступных чартов на хабе Helm-а( the Artifact Hub )
1 |
helm search hub |
Например, поиск чартов для Ingress-контроллера
1 |
# helm search hub ingress |
2.Поиск доступных чартов в ранее подключенных репозитариях
1 |
helm search repo |
Поиск чартов по репозитариям, который был добавлены ранее в свой локальный клиент helm(с помощью команды helm repo add)
Этот поиск выполняется по локальным данным, и подключение к общедоступной сети не требуется
1 |
# helm search repo |
1 |
Error: no repositories configured |
Добавляем репозитарий
1 |
# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
1 |
"ingress-nginx" has been added to your repositories |
Просмотр списка добавленных/доступных репозитариев
1 |
# helm repo list |
1 2 |
NAME URL ingress-nginx https://kubernetes.github.io/ingress-nginx |
Поиск доступных чартов в подключенных репозитариях
1 |
# helm search repo ingress |
1 2 |
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 3.19.0 0.43.0 Ingress controller for Kubernetes using NGINX a... |
Обновление локального кеша чартов, которые доступны в удаленных репозитариях
Полученная информация кешируется локально и используется командой helm search
1 |
# helm repo update |
1 2 3 |
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈Happy Helming!⎈ |
Проверка и изменение переменных перед установкой чарта
1 |
# helm show values ingress-nginx/ingress-nginx > ingress-values.yml |
В Helm v3 команда inspect была заменена на команду show (но поддержка команды inspect пока еще оставлена как alias к команде show)
1 |
# helm show --help | grep -A1 Alias |
1 2 |
Aliases: show, inspect |
Правка кастомных значений
1 |
# nano ingress-values.yml |
Установка(обновление,если уже установлен) чарта с кастомными значениями переменных
1 |
# helm upgrade --install ingress-nginx-helm ingress-nginx/ingress-nginx -f ingress-values.yml -n ingress-nginx-helm --create-namespace |
Установка чарта в dry-run режиме для проверки корректности деплоя
1 |
# helm upgrade --install --dry-run .... |
В Helm версии 3,если namespace не существует, при попытке задеплоить чарт в такой несуществующий namespace helm
выдаст ошибку, поэтому для автоматического создания namespace используется параметр
1 |
--create-namespace |
Просмотр всех релизов(задеплоенных чартов) во всех namespace-ах(-A)
1 |
# helm list -A |
1 2 |
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx-helm ingress-nginx-helm 2 2020-01-07 15:44:56.334223598 +0300 EEST deployed ingress-nginx-3.19.0 0.43.0 |
Фильтрация релизов по имени
1 |
# helm list -A --filter 'ingress+' |
1 2 |
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx-helm ingress-nginx-helm 2 2020-01-07 15:44:56.334223598 +0300 EEST deployed ingress-nginx-3.19.0 0.43.0 |
Просмотр всех версий релизов(включая удаленные) в дефолтном namespace (default)
1 |
# helm list --all |
Получение списка релизов которые были удалены с опцией —keep-history
т.е. с помощью команды helm uninstall —keep-history
1 |
# helm list --uninstalled |
Получение знaчений(values) задеплоенного чарта
1 |
# helm get values ingress-nginx-helm -n ingress-nginx-helm > ingress-nginx-helm-values.yml |
Здесь будут отображаться переменные со значениями,которые были переопределены при деплои за счет опций —set
либо за счет указания переменных в отличных от файла values.yml values-файлах
Получение примечаний(notes)(то,что выводится после деплоя чарта) задеплоенного чарта:
1 |
# helm get notes ingress-nginx-helm -n ingress-nginx-helm > ingress-nginx-helm-notes.yml |
Получение манифестов(manifests) задеплоенного чарта
1 |
# helm get manifest ingress-nginx-helm -n ingress-nginx-helm > ingress-nginx-helm-manifests.yml |
Получение всей информации о задеплоенном чарте(включая хуки)(values,notes,manifests,hooks)
1 |
# helm get all ingress-nginx-helm -n ingress-nginx-helm > ingress-nginx-helm-manifests.yml |
Получение/загрузка чарта (tar.gz-файла)
1 |
# helm pull <repo_name>/<chart_name> |
В Helm v3 команда fetch была заменена на команду pull (но поддержка команды fetch пока еще оставлена как alias к команде pull)
1 |
# helm pull --help | grep -A1 Alias |
1 2 |
Aliases: pull, fetch |
Получение/загрузка и распаковка чарта (tar.gz-файла)
1 |
# helm pull --untar ingress-nginx/ingress-nginx |
Просмотр описания оригинального чарта
1 |
# helm show chart <repo_name>/<chart_name>|path_to_local_chart|path_to_local_tgz_chart |
Просмотр README оригинального чарта
1 |
# helm show readme <repo_name>/<chart_name>|path_to_local_chart|path_to_local_tgz_chart |
Просмотр значений оригинального чарта
1 |
# helm show values <repo_name>/<chart_name>|path_to_local_chart|path_to_local_tgz_chart |
Просмотр всей информации оригинального чарта
1 |
# helm show all <repo_name>/<chart_name>|path_to_local_chart|path_to_local_tgz_chart |
Проверка синтаксиса чарта
1 |
# helm lint ingress-nginx |
1 2 3 |
==> Linting ingress-nginx 1 chart(s) linted, 0 chart(s) failed |
Источник:
https://helm.sh/docs