Поиск по сайту:

Как установить программное обеспечение в кластерах Kubernetes с помощью диспетчера пакетов Helm 2


Введение

Helm — это менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам проще настраивать и развертывать приложения в кластерах Kubernetes.

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

Концептуальный обзор Helm и его экосистемы пакетов можно найти в нашей статье Введение в Helm.

Примечание. В этом руководстве рассматривается рабочий процесс установки программного обеспечения в кластерах Kubernetes с помощью диспетчера пакетов Helm версии 2, для которого требуется Tiller. Если вы работаете с версией 3 Helm, следуйте нашему руководству Как установить программное обеспечение в кластерах Kubernetes с помощью диспетчера пакетов Helm 3.

Предпосылки

Для этого урока вам понадобится:

  • A Kubernetes 1.8+ cluster with role-based access control (RBAC) enabled.

  • The kubectl command-line tool installed on your local machine, configured to connect to your cluster. You can read more about installing kubectl in the official documentation.

    You can test your connectivity with the following command:

    1. kubectl cluster-info

    If you see no errors, you’re connected to the cluster. If you access multiple clusters with kubectl, be sure to verify that you’ve selected the correct cluster context:

    1. kubectl config get-contexts
    Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin docker-for-desktop docker-for-desktop-cluster docker-for-desktop

    In this example the asterisk (*) indicates that we are connected to the do-nyc1-k8s-example cluster. To switch clusters run:

    1. kubectl config use-context context-name

Когда вы подключитесь к правильному кластеру, перейдите к шагу 1, чтобы начать установку Helm.

Шаг 1 — Установка шлема

Сначала мы установим утилиту командной строки helm на наш локальный компьютер. Helm предоставляет сценарий, который управляет процессом установки в MacOS, Windows или Linux.

Перейдите в доступный для записи каталог и загрузите скрипт из репозитория Helm на GitHub:

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

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

  1. chmod u+x install-helm.sh

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

  1. ./install-helm.sh

Вас могут попросить ввести пароль. Укажите его и нажмите ENTER.

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

Далее мы завершим установку, установив некоторые компоненты Helm в наш кластер.

Шаг 2 — Установка румпеля

Tiller является дополнением к команде helm, которая запускается в вашем кластере, получает команды от helm и взаимодействует напрямую с API Kubernetes для выполнения фактической работы по созданию и удалению ресурсов. Чтобы предоставить Tiller разрешения, необходимые для работы в кластере, мы создадим ресурс Kubernetes serviceaccount.

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

Дополнительные сведения о настройке различных сценариев RBAC для Tiller см. в официальной документации Helm RBAC.

Создайте румпель serviceaccount:

  1. kubectl -n kube-system create serviceaccount tiller

Затем привяжите румпель serviceaccount к роли администратора кластера:

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

Теперь мы можем запустить helm init, который установит Tiller в наш кластер вместе с некоторыми локальными вспомогательными задачами, такими как загрузка сведений о стабильном репо:

  1. helm init --service-account tiller
Output
. . . 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 запущен, перечислите модули в пространстве имен thekube-system:

  1. kubectl get pods --namespace kube-system
Output
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 поставляется с предварительно настроенным репозиторием диаграмм, который называется стабильным. В качестве примера вы можете просмотреть доступные диаграммы Kubernetes Dashboard.

Используйте helm, чтобы установить пакет kubernetes-dashboard из репозитория stable:

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

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

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

Мы можем запросить у Helm список релизов на этом кластере:

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 1 Wed Aug 8 20:11:11 2018 DEPLOYED kubernetes-dashboard-0.7.1 default

Теперь мы можем использовать kubectl, чтобы убедиться, что в кластере развернута новая служба:

  1. kubectl get services
Output
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 и имени диаграммы.

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

Шаг 4 — Обновление релиза

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

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

Диаграмма kubernetes-dashboard предоставляет параметр конфигурации fullnameOverride для управления именем службы. Давайте запустим helm upgrade с этим набором параметров:

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

Вы увидите вывод, аналогичный начальному шагу helm install.

Проверьте, отражают ли ваши сервисы Kubernetes обновленные значения:

  1. kubectl get services
Output
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 в свой браузер и проверить ее. Для этого сначала выполните следующую команду:

  1. kubectl proxy

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

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

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

Далее мы рассмотрим возможность Helm откатывать релизы.

Шаг 5 — Откат выпуска

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

Используйте helm list, чтобы снова проверить выпуск:

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 2 Wed Aug 8 20:13:15 2018 DEPLOYED kubernetes-dashboard-0.7.1 default

Столбец REVISION говорит нам, что это вторая версия.

Используйте helm rollback, чтобы вернуться к первой версии:

  1. helm rollback dashboard-demo 1

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

Output
Rollback was a success! Happy Helming!

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

Далее мы рассмотрим удаление релизов с помощью Helm.

Шаг 6 — Удаление релиза

Релизы Helm можно удалить с помощью команды helm delete:

  1. helm delete dashboard-demo
Output
release "dashboard-demo" deleted

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

Error: a release named dashboard-demo already exists.

Если вы используете флаг --deleted для списка удаленных выпусков, вы увидите, что выпуск все еще существует:

  1. helm list --deleted
Output
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:

  1. helm delete dashboard-demo --purge

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

Заключение

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

Для получения дополнительной информации о Helm и графиках Helm см. официальную документацию Helm.