Установка программного обеспечения в кластер Kubernetes с помощью пакетного менеджера Helm

Helm – это пакетный менеджер Kubernetes, который упрощает настройку и развертывание приложений в кластерах Kubernetes.

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

Требования

  • Кластер Kubernetes 1.8+ с поддержкой RBAC (роль-основанного контроля доступа).
  • Инструмент kubectl в кластере. Больше об установке можно узнать в официальной документации. Проверьте подключение с помощью команды:
  • kubectl cluster-infoЕсли команда не вернула ошибок, вы подключены к кластеру. Если вы используете kubectl для доступа к нескольким кластерам, убедитесь, что находитесь в правильном кластерном контексте:

    kubectl config get-contexts
    CURRENT   NAME                  CLUSTER                    AUTHINFO                      NAMESPACE

    *         nyc1-k8s-example     nyc1-k8s-example            nyc1-k8s-example-admin

              docker-for-desktop   docker-for-desktop-cluster  docker-for-desktop

    В данном примере текущий кластер отмечен звездочкой. Чтобы перейти в другой кластер, введите:

    kubectl config use-context context-name

1: Установка Helm

Для начала нужно установить утилиту командной строки Helm на локальную машину. Helm предоставляет скрипт для установки на MacOS, Windows и Linux. Перейдите в доступный для записи каталог и загрузите в него скрипт из GitHub репозитория:

cd /tmp
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

Сделайте скрипт исполняемым:

chmod u+x install-helm.sh

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

./install-helm.sh

Он может запросить ваш пароль. Введите его и нажмите Enter.

helm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

После этого нужно установить дополнительные компоненты Helm.

2: Установка Tiller

Tiller – это сопровождающая утилита helm, которая получает команды от helm в кластере и напрямую связывается с API Kubernetes, чтобы выполнить все процессы по созданию и удалению ресурсов. Чтобы предоставить Tiller права, необходимые для работы в кластере, нужно создать serviceaccount для Kubernetes.

Примечание: Мы свяжем этот serviceaccount с ролью cluster-admin. Это даст сервису tiller доступ суперпользователя к кластеру и позволит ему устанавливать все типы ресурсов во всех пространствах имен. Такой метод отлично подходит для изучения Helm, но для кластера Kubernetes вам может понадобиться более ограничительная конфигурация. За дополнительной информацией о настройке различных сценариев RBAC для Tiller обратитесь к официальной документации RBAC Helm.

Создайте serviceaccount tiller:

kubectl -n kube-system create serviceaccount tiller

Затем свяжите его с ролью cluster-admin:

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

Запустите команду helm init, которая установит Tiller в кластер и выполнит пару локальных задач (например, загрузит репозиторий stable).

helm init --service-account tiller
. . .
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

Чтобы убедиться, что Tiller работает, запросите список подов в пространстве имен kube-system:

kubectl get pods --namespace kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
. . .
kube-dns-64f766c69c-rm9tz               3/3       Running   0          22m
kube-proxy-worker-5884                  1/1       Running   1          21m
kube-proxy-worker-5885                  1/1       Running   1          21m
kubernetes-dashboard-7dd4fc69c8-c4gwk   1/1       Running   0          22m
tiller-deploy-5c688d5f9b-lccsk          1/1       Running   0          40s

Название пода Tiller начинается с префикса tiller-deploy-.

Теперь, когда вы установили оба компонента Helm, можно использовать helm для установки первого приложения.

3: Установка чарта Helm

Программные пакеты Helm называются чартами. Helm поставляется с предварительно сконфигурированным репозиторием чартов под названием stable. Вы можете просмотреть доступные чарты в репозитории GitHub. В качестве примера мы попробуем Kubernetes Dashboard.

С помощью helm установите пакет kubernetes-dashboard из репозитория stable:

helm install stable/kubernetes-dashboard --name dashboard-demo
NAME:   dashboard-demo
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED
. . .

Обратите внимание на строку NAME, выделенную в примере выше. В этом случае мы выбрали название dashboard-demo. Это название релиза. релиз Helm представляет собой единое развертывание одного чарта с определенной конфигурацией. Вы можете развернуть несколько релизов одного и того же чарта, каждый с индивидуальной конфигурацией.

Если вы не укажете имя релиза с помощью флага —name, Helm присвоит ему случайное имя.

Запросите список релизов Helm:

helm list
NAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE

dashboard-demo    1         Wed Aug  8 20:11:11 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

С помощью kubectl убедитесь, что новый сервис был развернут в кластере.

kubectl get services
NAME                                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE

dashboard-demo-kubernetes-dashboard    ClusterIP   10.32.104.73   <none>        443/TCP   51s


kubernetes                             ClusterIP   10.32.0.1      <none>        443/TCP   34m

Обратите внимание, что по умолчанию имя сервиса, соответствующее релизу, представляет собой комбинацию имени релиза и имени чарта.

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

4: Обновление релиза

Команда helm upgrade позволяет обновлять релизы с помощью новых чартов или конфигураций.

Теперь попробуйте внести простые изменения в тестовый релиз dashboard-demo, чтобы проверить процесс обновления и отката: для примера мы обновим имя с dashboard-demo-kubernetes-dashboard на dashboard.

В чарте kubernetes-dashboard представлена опция fullnameOverride для управления именем сервиса. Запустите команду helm upgrade:

helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

Вывод этой команды похож на вывод helm install.

Убедитесь, что сервис Kubernetes содержит новые данные:

kubectl get services
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes             ClusterIP   10.32.0.1       <none>        443/TCP   36m
dashboard              ClusterIP   10.32.198.148   <none>        443/TCP   40s

Примечание: На этом этапе вы можете загрузить панель управления Kubernetes в своем браузере и проверить ее. Для этого сначала выполните следующую команду:

kubectl proxy

Она создает прокси-сервер, который позволяет вам обращаться к ресурсам удаленного кластера с локального компьютера. Согласно предыдущим инструкциям, сервис называется kubernetes-dashboard  и работает в пространстве имен по default. Теперь вы можете перейти в дашборд по следующему URL-адресу:

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

При необходимости замените имя сервиса и пространство имен. Инструкции по использованию дашборда выходят за рамки этого мануала, но вы можете прочитать официальную документацию Kubernetes Dashboard.

5: Откат релиза

Когда вы обновили релиз dashboard-demo, вы создали вторую ревизию релиза. Helm сохраняет все детали предыдущих релизов, что позволяет вернуться к предыдущей конфигурации или чарту.

Введите эту команду, чтобы просмотреть релизы:

helm list
NAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE

dashboard-demo  2           Wed Aug  8 20:13:15 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

Столбец REVISION сообщает, что теперь это вторая ревизия релиза.

Используйте команду rollback для отката к первой ревизии:

helm rollback dashboard-demo 1

Вы должны увидеть следующий вывод, который указывает, что откат удался:

Rollback was a success! Happy Helming!

На этом этапе, если вы снова запустите kubectl get services, вы заметите, что имя сервиса изменилось на прежнее. Helm снова развернул приложение с конфигурацией из предыдущей ревизии.

6: Удаление релиза

Чтобы удалить релиз Helm, используйте команду:

helm delete dashboard-demo
release "dashboard-demo" deleted

Хотя релиз был удален и приложение дашборда больше не запущено, Helm сохраняет всю информацию о ревизии – на случай, если вы захотите повторно развернуть релиз. Если вы попытаетесь создать новый релиз dashboard-demo , вы получите сообщение об ошибке:

Error: a release named dashboard-demo already exists.

Флаг —deleted покажет вам удаленные релизы:

helm list --deleted
NAME            REVISION    UPDATED                     STATUS  CHART                       NAMESPACE

dashboard-demo  3           Wed Aug  8 20:15:21 2018    DELETED kubernetes-dashboard-0.7.1  default

Чтобы полностью удалить релиз и очистить все старые ревизии, используйте флаг —purge в команде helm delete:

helm delete dashboard-demo --purge

Теперь релиз полностью удален из кластера, и вы можете повторно использовать его имя.

Заключение

В этом мануале вы научились устанавливать инструмент командной строки helm и его вспомогательный инструмент tiller. Вы также изучили установку, обновление, откат и удаление чартов и релизов Helm.

Больше информации о Helm можно найти в официальной документации.

Tags: ,