Как установить программное обеспечение в кластерах 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 installingkubectl
in the official documentation.You can test your connectivity with the following command:
- 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:- kubectl config get-contexts
OutputCURRENT 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-desktopIn this example the asterisk (
*
) indicates that we are connected to thedo-nyc1-k8s-example
cluster. To switch clusters run:- kubectl config use-context context-name
Когда вы подключитесь к правильному кластеру, перейдите к шагу 1, чтобы начать установку Helm.
Шаг 1 — Установка шлема
Сначала мы установим утилиту командной строки helm
на наш локальный компьютер. Helm предоставляет сценарий, который управляет процессом установки в MacOS, Windows или Linux.
Перейдите в доступный для записи каталог и загрузите скрипт из репозитория Helm на GitHub:
- cd /tmp
- curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
Сделайте скрипт исполняемым с помощью chmod
:
- chmod u+x install-helm.sh
На этом этапе вы можете использовать свой любимый текстовый редактор, чтобы открыть сценарий и проверить его, чтобы убедиться, что он безопасен. Когда вы будете удовлетворены, запустите его:
- ./install-helm.sh
Вас могут попросить ввести пароль. Укажите его и нажмите ENTER
.
Outputhelm 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
:
- kubectl -n kube-system create serviceaccount tiller
Затем привяжите румпель serviceaccount
к роли администратора кластера:
- kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Теперь мы можем запустить helm init
, который установит Tiller в наш кластер вместе с некоторыми локальными вспомогательными задачами, такими как загрузка сведений о стабильном репо:
- 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:
- kubectl get pods --namespace kube-system
OutputNAME 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
:
- helm install stable/kubernetes-dashboard --name dashboard-demo
OutputNAME: dashboard-demo
LAST DEPLOYED: Wed Aug 8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED
. . .
Обратите внимание на строку NAME
, выделенную в приведенном выше примере вывода. В данном случае мы указали имя dashboard-demo
. Это название нашего выпуска. Выпуск Helm — это единичное развертывание одной диаграммы с определенной конфигурацией. Вы можете развернуть несколько выпусков одной и той же диаграммы, каждый со своей конфигурацией.
Если вы не укажете собственное имя релиза с помощью --name
, Helm создаст для вас случайное имя.
Мы можем запросить у Helm список релизов на этом кластере:
- helm list
OutputNAME 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
OutputNAME 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
с этим набором параметров:
- helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"
Вы увидите вывод, аналогичный начальному шагу helm install
.
Проверьте, отражают ли ваши сервисы Kubernetes обновленные значения:
- kubectl get services
OutputNAME 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
. Теперь вы можете получить доступ к панели управления по следующему адресу:
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/
При необходимости замените выделенные части своим именем службы и пространством имен. Инструкции по фактическому использованию панели мониторинга выходят за рамки этого руководства, но вы можете прочитать официальную документацию панели мониторинга Kubernetes для получения дополнительной информации.
Далее мы рассмотрим возможность Helm откатывать релизы.
Шаг 5 — Откат выпуска
Когда мы обновили нашу версию dashboard-demo
на предыдущем шаге, мы создали вторую редакцию этой версии. Helm сохраняет все сведения о предыдущих выпусках на случай, если вам потребуется вернуться к предыдущей конфигурации или графику.
Используйте helm list
, чтобы снова проверить выпуск:
- helm list
OutputNAME 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
, чтобы вернуться к первой версии:
- helm rollback dashboard-demo 1
Вы должны увидеть следующий вывод, указывающий на то, что откат прошел успешно:
OutputRollback was a success! Happy Helming!
На этом этапе, если вы снова запустите kubectl get services
, вы заметите, что имя службы изменилось на прежнее значение. Helm повторно развернул приложение с конфигурацией ревизии 1.
Далее мы рассмотрим удаление релизов с помощью Helm.
Шаг 6 — Удаление релиза
Релизы Helm можно удалить с помощью команды helm delete
:
- helm delete dashboard-demo
Outputrelease "dashboard-demo" deleted
Несмотря на то, что выпуск был удален, а приложение панели мониторинга больше не работает, Helm сохраняет всю информацию о редакции на случай, если вы захотите повторно развернуть выпуск. Если вы попытаетесь helm установить
новую версию dashboard-demo
прямо сейчас, вы получите сообщение об ошибке:
Error: a release named dashboard-demo already exists.
Если вы используете флаг --deleted
для списка удаленных выпусков, вы увидите, что выпуск все еще существует:
- helm list --deleted
OutputNAME 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 и графиках Helm см. официальную документацию Helm.