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

Вступление

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

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

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

Предпосылки

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

  • Кластер Kubernetes 1.8+ с включенным управлением доступом на основе ролей (RBAC).

  • Инструмент командной строкиkubectl, установленный на вашем локальном компьютере, настроен для подключения к вашему кластеру. Вы можете узнать больше об установкеkubectlin 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.