Установка и начало работы с Helm

Этот мануал поможет быстро установить и начать работу с Helm, открытым менеджером пакетов для Kubernetes.

Примечание: Helm устанавливается вместе с клиентским сервисом Tiller.

Требования

Кластер Kubernetes

У вас должен быть установлен Kubernetes. Для последней версии Helm мы рекомендуем последнюю стабильную версию Kubernetes (в большинстве случаев это предпоследний релиз).

Вам также понадобится kubectl.

Примечание: Kubernetes до версии 1.6 или не поддерживают управления доступом на основе ролей (или поддерживают ограниченно).

Helm узнает, куда нужно установить Tiller, прочитав конфигурационный файл Kubernetes (обычно это $HOME/.kube/config). Это тот же файл, который использует kubectl.

Чтобы узнать, в какой из кластеров будет установлен Tiller, запустите kubectl config current-context или kubectl cluster-info:

$ kubectl config current-context
my-cluster

Настройки безопасности

Если вы используете Helm в кластере, который вы полностью контролируете (например, в minikube или кластере в частной сети), вам хватит простой установки по умолчанию, которая не использует конфигурацию безопасности. Чтобы получить Helm без дополнительных настроек безопасности, установите Helm и затем инициализируйте его.

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

Если в вашем кластере включен контроль доступа на основе ролей (RBAC), вам нужно настроить учетную запись и правила, прежде чем продолжить.

1: Общие сведения

Установка Helm

Загрузите двоичный релиз клиента Helm. Вы можете использовать инструменты типа homebrew или посетить официальную страницу релизов.

Инициализация Helm и установка Tiller

После установки Helm нужно инициализировать локальный CLI, а также установить Tiller в кластер Kubernetes:

$ helm init

Это установит Tiller в кластер Kubernetes, который указан в выводе команды kubectl config current-context.

Примечание: Если вы хотите установить Tiller в другой кластер, используйте флаг —kube-context.. Чтобы обновить Tiller, просто запустите helm init —upgrade.

По умолчанию после установки Tiller не имеет настроек аутентификации. Чтобы узнать больше о настройке надежной TLS-аутентификации для Tiller, обратитесь к руководству Tiller.

Установка тестового чарта

Чтобы установить чарт, нужно запустить команду helm install. Helm предлагает несколько вариантов поиска и установки чарта, но проще всего использовать официальные чаты stable.

$ helm repo update              # Make sure we get the latest list of charts
$ helm install stable/mysql
Released smiling-penguin

В приведенном выше примере вы видите чарт stable/mysql, название нового релиза – smiling-penguin. Чтобы получить общее представление о функциях этого чарта MySQL, выполните команду:

helm inspect stable/mysql.

Всякий раз, когда вы устанавливаете чарт, создается новый релиз. Таким образом, один чарт можно несколько раз установить в один и тот же кластер. И каждым из них можно управлять индивидуально.

Команда helm install очень мощная и имеет много функций. Больше информации о ней вы найдете в этом руководстве.

Просмотр релизов

Релизы Helm можно легко просмотреть:

$ helm ls
NAME             VERSION   UPDATED                   STATUS    CHART
smiling-penguin  1         Wed Sep 28 12:59:46 2016  DEPLOYED  mysql-0.1.0

Команда helm list выводит список всех развернутых релизов.

Удаление релизов

Чтобы удалить релиз, используйте команду helm delete:

$ helm delete smiling-penguin
Removed smiling-penguin

Эта команда удалит релиз smiling-penguin из Kubernetes, но вы по-прежнему можете запрашивать информацию об этом релизе.

$ helm status smiling-penguin
Status: DELETED
...

Поскольку Helm отслеживает релизы даже после их удаления, вы можете проверять историю кластера и даже восстанавливать релизы (с помощью helm rollback).

Чтобы узнать больше о доступных командах Helm, используйте команду helm help или введите команду с флагом -h:

$ helm get -h

2: Установка Helm

Существует две части Helm: клиент (Helm) и сервер (Tiller). Этот раздел поможет установить клиент.

Важно! Если вы несете ответственность за обеспечение контроля над клсатером и его средой (особенно при совместном использовании ресурсов), настоятельно рекомендуется установить Tiller с конфигурацией безопасности.

Клиент Helm можно установить как из исходного кода, так и из предварительно собранных бинарных релизов.

Установка Helm из бинарного релиза

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

tar -zxvf helm-v2.0.0-linux-amd64.tgz

  • В полученном каталоге найдите бинарный файл helm и переместите его:

mv linux-amd64/helm /usr/local/bin/helm

Теперь попробуйте запустить команду helm help, чтобы проверить установку.

Установка Helm в macOS с помощью Homebrew

Члены сообщества kubernetes внесли Helm в Homebrew. Эта формула, как правило, хорошо поддерживается.

brew install kubernetes-helm

Примечание: Существует также формула emacs-helm, это другой проект.

Установка Helm с помощью скрипта

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

Вы можете скачать этот скрипт, а затем выполнить его локально. Он хорошо документирован. Рекомендуем прочитать его и понять, что он делает, прежде чем запускать его.

$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh

Канареечные сборки

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

Бинарные файлы нестабильных сборок Helm хранятся в корзине Kubernetes Helm GCS. Вот ссылки на популярные сборки:

Установка Helm из исходного кода в Linux и macOS

Сборка Helm из исходного кода требует немного больше работы, но это лучший способ протестировать последнюю версию Helm (до ее релиза).

У вас должна быть рабочая среда Go, glide и Mercurial.

$ cd $GOPATH
$ mkdir -p src/k8s.io
$ cd src/k8s.io
$ git clone https://github.com/kubernetes/helm.git
$ cd helm
$ make bootstrap build

Цель bootstrap попытается установить зависимости, перестроить дерево vendor/ и проверить конфигурацию.

Цель build будет компилировать helm  и поместит его в bin/helm. Tiller также будет скомпилирован и помещен в bin/tiller.

3: Установка Tiller

Tiller, серверная часть Helm, обычно работает внутри кластера Kubernetes. Но для разработки он устанавливается локально и взаимодействует с удаленным кластером Kubernetes.

Простая установка Tiller в кластере

Самый простой способ установить Tiller – просто запустить команду helm init. Она проверит локальную среду helm (и настроит ее в случае необходимости). Затем он подключится к кластеру, который kubectl определит по умолчанию (kubectl config view). Как только подключение будет установлено, комнада установит tiller в пространство имен kube-system.

После helm init вы сможете запустить следующую команду и посмотреть, как работает Tiller.

kubectl get pods --namespace kube-system

Команда helm init поддерживает такие флаги:

  • —canary-image установит канареечную сборку.
  • —tiller-image устанавливает определенный образ (версию).
  • —kube-context позволяет определить кластер, в который нужно установить программу.
  • —tiller-namespace определяет пространство имен.

После установки Tiller запустите:

helm version

Команда должна показывать как клиентскую, так и серверную версии. Если в выводе отображается только клиентская версия, helm  не может подключиться к серверу. Используйте kubectl, чтобы проверить, не запущены ли поды tiller. Helm будет искать Tiller в пространстве имен kube-system, если не заданы параметры —tiller-namespace или TILLER_NAMESPACE.

Установка канареечной сборки Tiller

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

Самый простой способ установить канареечную версию – эта команда:

$ helm init --canary-image

При этом будет использоваться последний созданный образ контейнера. Вы всегда можете удалить Tiller, удалив развертывание Tiller из пространства имен kube-system, используя kubectl.

Локальный запуск Tiller

Для разработки иногда проще установить Tiller локально и настроить его подключение к удаленному кластеру Kubernetes.

Процесс сборки Tiller мы рассмотрели выше.

После сборки Tiller просто запустите его:

$ bin/tiller
Tiller running on :44134

Когда Tiller работает локально, он пытается подключиться к кластеру Kubernetes, который указывает kubectl. Запустите kubectl config view, чтобы посмотреть, какой именно это кластер.

Вы должны указать helm, что ему нужно подключиться к новому локальному серверу Tiller, а не к одному из кластеров. Есть два способа сделать это. Первый – указать опцию —host в командной строке. Второй – установить переменную среды $HELM_HOST.

$ export HELM_HOST=localhost:44134
$ helm version # Should connect to localhost.
Client: &version.Version{SemVer:"v2.0.0-alpha.4", GitCommit:"db...", GitTreeState:"dirty"}
Server: &version.Version{SemVer:"v2.0.0-alpha.4", GitCommit:"a5...", GitTreeState:"dirty"}

Важно отметить, что даже при локальном запуске Tiller сохранит конфигурацию релиза в ConfigMaps в Kubernetes.

Обновление Tiller

Начиная с Helm 2.2.0, Tiller можно обновлять с помощью команды:

helm init -upgrade

Для обновления Tiller на основе более старых версий Helm или для обновлений вручную вы можете использовать kubectl:

$ export TILLER_TAG=v2.0.0-beta.1        # Or whatever version you want
$ kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:$TILLER_TAG
deployment "tiller-deploy" image updated

Параметр TILLER_TAG=canary загрузит последний образ ветки master.

Удаление или переустановка Tiller

Поскольку Tiller хранит свои данные в Kubernetes ConfigMaps, вы можете безопасно удалить и переустановить Tiller, не опасаясь потерять какие-либо данные. Рекомендуемый способ удаления Tiller – это команды:

kubectl delete deployment tiller-deploy --namespace kube-system
#или
helm reset

Чтобы переустановить Tiller с клиента, введите:

$ helm init

4: Продвинутые функции

Команда helm init поддерживает много флагов для изменения манифеста развертывания Tiller перед его установкой.

Флаг —node-selectors

Флаг —node-selectors позволяет указывать метки нод, необходимые для планирования подов Tiller.

В приведенном ниже примере указанная метка создается в свойстве nodeSelector.

helm init --node-selectors "beta.kubernetes.io/os"="linux"

Установленный манифест будет содержать метку ноды nodeSelector:

...
spec:
template:
spec:
nodeSelector:
beta.kubernetes.io/os: linux
...

Флаг —override

Флаг —override позволяет указать свойства манифеста развертывания Tiller. В отличие от команды —set, helm init —override управляет свойствами окончательного манифеста (нет файла «values»). Поэтому в манифесте развертывания вы можете указать любое допустимое значение для любого допустимого свойства.

В приведенном ниже примере мы используем —override, чтобы добавить свойство revision и установить его значение 1.

helm init --override metadata.annotations."deployment\.kubernetes\.io/revision"="1"
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
...

В следующем примере определяются свойства родства нод. Команды —override можно комбинировать для изменения разных свойств одного и того же элемента списка.

helm init --override "spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].weight"="1" --override "spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].preference.matchExpressions[0].key"="e2e-az-name"

Все объявленные свойства объединяются в первый элемент preferredDuringSchedulingIgnoredDuringExecution.

...
spec:
strategy: {}
template:
...
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: e2e-az-name
operator: ""
weight: 1
...

Флаг —output

Флаг —output позволяет пропустить установку манифеста развертывания Tiller и просто выводит манифест развертывания на стандартный вывод в формате JSON или YAML. Затем выход можно изменить с помощью таких инструментов, как jq, и установить вручную с помощью kubectl.

helm init --output json

Эта команда пропустит установку Tiller, а манифест будет выведен в stdout в формате JSON.

"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "helm",
"name": "tiller"
},
"name": "tiller-deploy",
"namespace": "kube-system"
},
...

Бэкэнды хранения

По умолчанию tiller сохраняет информацию о релизах в ConfigMaps в пространстве имен, где он запущен. Начиная с Helm 2.7.0, есть бета-версия, которая использует Secrets для хранения информации о релизах. Она добавлена для дополнительной защиты чартов и релизов.

Чтобы включить бэкэнд secrets, инициируйте Tiller:

helm init --override 'spec.template.spec.containers[0].command'='{/tiller,--storage=secret}'

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

Tags: , , ,