Kubernetes 1.7 – Использование Helm
Использование Helm – это самый простой способ запуска и управления приложениями в кластере Kubernetes. Helm позволяет выполнять ключевые операции по управлению приложениями.
В прошлой статье мы установили небольшой кластер Kubernetes 1.7 на CentOS. Сегодня мы продолжим знакомство с Kubernetes, добавив к нему пакетный менеджер Helm.
Использование Helm – это самый простой способ запуска и управления приложениями в кластере Kubernetes. Helm позволяет выполнять ключевые операции по управлению приложениями, т.к. установка, обновление или их удаление. Если совсем просто, то Helm можно легко рассматривать yum и apt в CentOS или Ubuntu.
Helm состоит из двух частей: Helm (клиент) и Tiller (сервер). Далее мы рассмотрим очень простой процесс установки Helm и Tiller.
Установка Helm
Для установки Helm вам необходимо выполнить следующие команды на хосте, с которого вы администрируете ваш Kubernetes кластер (там, где установлен kubectl):
$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
Для пользователей OS X можно воспользоваться brew
$ brew install kubernetes-helm
Что такое Tiller
После того как вы установили клиент Helm, можно переходить к установке Tiller
$ helm init
Если вы хотите обновить уже установленный Tiller на последнюю версию, это делается не менее просто
$ helm init --upgrade
Для проверки, что Tiller установлен корректно, выполните следующую команду
$ kubectl --namespace kube-system get pods | grep tiller
tiller-deploy-3360264398-d82c5 1/1 Running 0 2d
Обязательно проверьте вывод команды
$ helm list
Если вы увидите ошибку
Error: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system". (get configmaps),
выполните следующие инструкции для создания сервисной учетной записи, необходимой Helm для работы с включенным RBAC (более подробно на GitHub):
$ kubectl create serviceaccount --namespace kube-system tiller
serviceaccount "tiller" created
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding "tiller-cluster-rule" created
$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment "tiller-deploy" patched
$ helm init --service-account tiller --upgrade
$HELM_HOME has been configured at /user/.helm.
$ helm list
Error: could not find a ready tiller pod
# Это нормально, tiller pod пересоздается
$ helm list
Установка приложений с помощью Helm
Приложения в Helm называются чартами (charts). Посмотреть список актуальных и доступных чартов можно в их официальном репозитории.
При выполнении команды helm install, выбранное приложение будет развернуто в вашем кластере Kubernetes.
Пример установки Redis:
$ helm install stable/redis
NAME: nuanced-fish
LAST DEPLOYED: Mon Aug 14 07:05:46 2017
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Secret
NAME TYPE DATA AGE
nuanced-fish-redis Opaque 1 1s
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
nuanced-fish-redis Pending 1s
==> v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nuanced-fish-redis 10.106.51.9 6379/TCP 0s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nuanced-fish-redis 1 1 1 0 0s
NOTES:
Redis can be accessed via port 6379 on the following DNS name from within your cluster:
nuanced-fish-redis.default.svc.cluster.local
To get your password run:
REDIS_PASSWORD=$(kubectl get secret --namespace default nuanced-fish-redis -o jsonpath="{.data.redis-password}" | base64 --decode)
To connect to your Redis server:
1. Run a Redis pod that you can use as a client:
kubectl run nuanced-fish-redis-client --rm --tty -i --env REDIS_PASSWORD=$REDIS_PASSWORD --image bitnami/redis:3.2.9-r2 -- bash
2. Connect using the Redis CLI:
redis-cli -h nuanced-fish-redis -a $REDIS_PASSWORD
В следующей статье мы поговорим о Helm чуть подробнее, рассмотрим структуру чартов, а также механизм создания собственных.