Вступление
Helm - это менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам более легко настраивать и развертывать приложения в кластерах Kubernetes.
В этом руководстве мы настроим Helm и будем использовать его для установки, перенастройки, отката, а затем удаления экземпляраthe Kubernetes Dashboard application. Панель инструментов - это официальный веб-интерфейс Kubernetes.
Концептуальный обзор Helm и его экосистемы упаковки можно найти в нашей статьеAn Introduction to Helm.
Предпосылки
Для этого урока вам понадобятся:
-
Кластер Kubernetes 1.8+ с включенным управлением доступом на основе ролей (RBAC).
-
Инструмент командной строки
kubectl
, установленный на вашем локальном компьютере, настроен для подключения к вашему кластеру. Вы можете узнать больше об установкеkubectl
in the official documentation.Вы можете проверить подключение с помощью следующей команды:
kubectl cluster-info
Если ошибок нет, значит, вы подключены к кластеру. Если вы обращаетесь к нескольким кластерам с помощью
kubectl
, убедитесь, что вы выбрали правильный контекст кластера: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-desktop
В этом примере звездочка (
*
) указывает, что мы подключены к кластеруdo-nyc1-k8s-example
. Для переключения кластеров выполните:kubectl config use-context context-name
Когда вы подключены к правильному кластеру, перейдите к шагу 1, чтобы начать установку Helm.
[[step-1 -—- install-helm]] == Шаг 1. Установка Helm
Сначала мы установим утилиту командной строки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 в нашем кластере.
[[step-2 -—- install-tiller]] == Шаг 2 - Установка культиватора
Tiller является дополнением к командеhelm
, которая выполняется в вашем кластере, получает команды отhelm
и напрямую взаимодействует с Kubernetes API для выполнения фактической работы по созданию и удалению ресурсов. Чтобы предоставить Tiller разрешения, необходимые для работы в кластере, мы собираемся создать ресурс Kubernetesserviceaccount
.
[.Примечание]##
Note: Мы свяжем этотserviceaccount
с ролью кластераcluster-admin. Это предоставит суперпользователю службыtiller
доступ к кластеру и позволит ему установить все типы ресурсов во всех пространствах имен. Это хорошо для изучения Helm, но вам может потребоваться более закрытая конфигурация для производственного кластера Kubernetes.
Пожалуйста, обратитесь кthe official Helm RBAC documentation для получения дополнительной информации о настройке различных сценариев RBAC для Tiller.
Создайтеtillerserviceaccount
:
kubectl -n kube-system create serviceaccount tiller
Затем привяжитеtillerserviceaccount
к ролиcluster-admin:
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Теперь мы можем запуститьhelm init
, который устанавливает Tiller в нашем кластере вместе с некоторыми локальными служебными задачами, такими как загрузка деталей репозиторияstable:
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 работает, перечислите модули в пространстве именkube-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
для установки нашего первого приложения.
[[step-3 -—- install-a-helm-chart]] == Шаг 3 - Установка Helm Chart
Программные пакеты Helm называютсяcharts. Helm поставляется с предварительно настроенным репозиторием диаграмм под названиемstable. Вы можете просмотреть доступные графикиin their GitHub repo. Мы собираемся установить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
. Это имя нашегоrelease. Helmrelease - это единичное развертывание одной диаграммы с определенной конфигурацией. Вы можете развернуть несколько выпусков одной и той же диаграммы, каждая со своей конфигурацией.
Если вы не укажете собственное название выпуска с помощью--name
, 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 443/TCP 51s
kubernetes ClusterIP 10.32.0.1 443/TCP 34m
Обратите внимание, что по умолчанию имя службы, соответствующее нашему выпуску, является комбинацией имени выпуска Helm и имени диаграммы.
Теперь, когда мы развернули приложение, давайте используем Helm, чтобы изменить его конфигурацию и обновить развертывание.
[[step-4 -—- update-a-release]] == Шаг 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 443/TCP 36m
dashboard ClusterIP 10.32.198.148 443/TCP 40s
Название нашей службы обновлено до нового значения.
[.Примечание]##
Note: На этом этапе вы можете фактически загрузить панель Kubernetes Dashboard в свой браузер и проверить ее. Для этого сначала выполните следующую команду:
kubectl proxy
Это создает прокси, который позволяет вам получить доступ к ресурсам удаленного кластера с локального компьютера. В соответствии с предыдущими инструкциями ваша служба информационной панели называетсяkubernetes-dashboard
и работает в пространстве именdefault
. Теперь вы можете получить доступ к панели инструментов по следующему адресу:
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/
При необходимости замените собственное имя службы и пространство имен выделенными частями. Инструкции по фактическому использованию панели управления выходят за рамки этого руководства, но вы можете прочитатьthe official Kubernetes Dashboard docs для получения дополнительной информации.
Далее мы рассмотрим способность Хелма откатывать релизы.
[[step-5 -—- roll-back-a-release]] == Шаг 5. Откат выпуска
Когда мы обновили наш выпускdashboard-demo
на предыдущем шаге, мы создали второй выпускrevision. 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.
[[step-6 -—- deleting-a-release]] == Шаг 6 - Удаление выпуска
Релизы Helm можно удалить командойhelm delete
:
helm delete dashboard-demo
Outputrelease "dashboard-demo" deleted
Хотя версия была удалена и приложение панели мониторинга больше не работает, Helm сохраняет всю информацию о ревизиях на случай, если вы захотите повторно развернуть версию. Если вы попытаетесьhelm install
новую версию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
Чтобыreally удалить выпуск и очистить все старые версии, используйте флаг--purge
с командойhelm delete
:
helm delete dashboard-demo --purge
Теперь релиз действительно удален, и вы можете повторно использовать его название.
Заключение
В этом руководстве мы установили инструмент командной строкиhelm
и сопутствующий ему сервисtiller
. Мы также рассмотрели установку, обновление, откат и удаление диаграмм и выпусков Helm.
Для получения дополнительной информации о диаграммах Helm и Helm см.the official Helm documentation.