Установка программного обеспечения в кластер 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: Helm, Kubernetes