
Paul
03.09.2017
18:40:22
коллеги, а может мне кто-то внятно объяснить, для чего нужен helm?

Magistr
03.09.2017
18:43:36

Paul
03.09.2017
18:44:12
не очень понимаю, что имеется ввиду под пакетным менеджером. Образы то я все равно из registry беру

Magistr
03.09.2017
18:45:51
а конфигурации к образам и настройки ?

Google

Paul
03.09.2017
18:46:11
внутри yml файлов?

Magistr
03.09.2017
18:46:17
ага

Paul
03.09.2017
18:46:59
просто я не очень понимаю, зачем тут helm. Один раз этот yaml написал - постоянно используешь. Что дает helm?

Алексей
03.09.2017
18:48:50
хм. тоесть если я хочу первый раз сделать что то для кубера мне надо делать это либо в helm либо нет ?

Magistr
03.09.2017
18:51:37

Paul
03.09.2017
18:52:45
ну вот у меня есть yml, который описывает все, что мне необходимо для развертывания - тома, сервисы, ingress-ы. Это, грубо говоря, один файл. Я пытаюсь понять, зачем нужен helm, а то я пока как-то не въезжаю

Magistr
03.09.2017
18:57:02
хм в таком случая я хз, подождем более опытных товарищей

Алексей
03.09.2017
18:57:07
https://github.com/kubernetes/helm/pull/965/files
видимо

Paul
03.09.2017
18:58:13
просто я правда не понимаю, что именно он делает. Все же в yml описано. Но при этом все пользуются и хвалят. Вот я и думаю - может я не догоняю чего?

Алексей
03.09.2017
18:59:30
https://deis.com/blog/2015/why-kubernetes-needs-helm/
вот еще
но я пока не в теме просто прохожий

Google


Igor
04.09.2017
08:00:58
Для разворачивания сервисов в среде Kubernetes нужен инструмент, который должен делать следующие задачи:
1. Деплоить в кластер подготовленные манифесты
2. Отслеживать результат деплоймента и сообщать о неудачах
3. Откатывать релизы
4. Желательно иметь возможность создавать шаблоны манифестов, чтобы уменьшить влияние чел. фактора и копипасты
5. Желательно умение и знания про типы деплоймента (blue/green, rolling, canary)
6. История релизов
Всё это или часть можно организовать разными способами:
1. Kubectl + свой велосипед
2. Helm
3. Terraform
4. Что-то еще
Свой велосипед конечно "лучше всего", но он как каша/суп из топора. Простота этого подхода лишь обманчива. Вместе с ростом потребностей и кол-ва сервисов в кластере будут расти требования к релиз-менеджеру. И в случае велосипеда в итоге будет реализован аналогичный Helm'у инструмент. Возможно он будет лучше (свой же велосипед всегда лучше). Но на него будет потрачен серьёзный ресурс. Каша не становится бесплатной, даже если она из топора.


[Anonymous]
04.09.2017
08:21:43
Может кому полезно будет.

Let Eat
04.09.2017
09:10:05

bebebe
04.09.2017
09:19:35

Let Eat
04.09.2017
09:20:34

bebebe
04.09.2017
09:25:46

Let Eat
04.09.2017
09:44:54
сегфолтилось, не помню что делали :(

Alexander
04.09.2017
10:03:31
привет.
а кто-нибудь подскажет, как в helm правильно работать с секретами?
Например, чарт состоит из двух частей - сервиса и базы. При установке надо сгенерить пароль к базе. Но при обновлении пароль не надо менять.
Вроде бы, можно объявить шаблон секрета как pre-install hook и в значение положить что-то типа {{ .Values.scopeMysqlPassword | default (randAlphaNum 16) | b64enc }}
Но как быть, если надо секрет создать при обновлении чарта?

Let Eat
04.09.2017
10:05:53
а никак. херачить job с bash script внутри

Alexander
04.09.2017
10:06:21
ох ё, я этого и боялся :)

Mikhail
04.09.2017
10:08:42
Костылизация наше все :)

Alexander
04.09.2017
10:13:15
helm же всегда дергает kubectl apply и никогда kubectl patch ?

Let Eat
04.09.2017
10:15:31
при этом kubectl patch которые оно генерирует - кривые. в итоге у вас в кластере может быть не то, что в релизе :)

Alexander
04.09.2017
10:17:40
хм... это интересно. а карта граблей где-то есть?
в смысле - к чему готовиться?

Let Eat
04.09.2017
10:18:39
базовые вещи поломаны: релиз может "усыновить" ресурсы которые уже были, в итоге сам релиз фэйлится и пользователь скажем решает его удалить. оно удаляет и то, что реально не было установлено :) или скажем оно забывает про любые ресурсы, в которых явно прописан namespace. ну или самый ад: upgrade after failure, оно делает совсем не то, что кажется - там внутри идет генерация патча на каждый апгрейд, при этом база для патча - последний релиз, неважно зафэйлин он был или нет. в итоге скажем в релизе изменили A, B при этом B сломало релиз, пользователь делает B' и ожидает получить в кубе и A и B', а получает только B' :)
^^

Alexander
04.09.2017
10:22:03
ага, спасибо

Let Eat
04.09.2017
10:22:34
а ну еще вещи, которые вроде и не баги, но "ну как так-то??" очень даже. например dependencies не то, чем кажутся. все ямлы из всего дерева зависимостей просто рендерятся в огромный список и сортируются: сначала идут все configmaps, затем все secrets и т.д. потом оно все пачкой загужается в куб, дальше уж как карта ляжет. подтянули redis по зависиомостям и в обновлении хотите включить какую-то фишку, которое обновленное приложение использует и без нее жить не может7 готовьтся к краш рестартам ваших подов, т.к. и redis и выше приложение будут обновляться одновременно

Google

Let Eat
04.09.2017
10:24:22
короче их надпись крупными буквами "package manager for kubernetes" самый большой и наглый п%здеж

Alexander
04.09.2017
10:24:58
альтернатив же пока не видно?

Let Eat
04.09.2017
10:25:09
найдете - скажите
темплейтить ямлы и затем kubectl apply, оно хотя бы работает. единственная проблема - надо удалять то руками, что было переименовано/убрано .

Alexander
04.09.2017
10:27:27
по поводу обновлений - елси бы в helm'е была втроенная переменная .Resources для доступа к текущему состоянию ресурсов, то мою бы задачу это решило.
какой-нибудь стандартный контейнер с хелпером add_if_not_exists тоже решил бы.
не попадались никакие наработки на эту тему?

Let Eat
04.09.2017
10:28:30
ресурсы в tiller не отслеживаются, там все на уровне текста ямла

Роман
04.09.2017
11:07:11
Есть под с пхп и, когда он первый раз стартует, выполняется прогрев кэша. Занимает сей процесс около 40 секунд и в этот момент пользователь видит 504 при заходе на сайт. Даже, если у меня несколько реплик пхп, всё равно часть пользователей получит 504. Речь идёт о моменте, когда я деплою новую версию приложения в кластер.
Как-нибудь можно настроить, чтобы запросы шли на старые поды определённое время, и только потом начинали идти на новые (а старые удалялись)?

YURA
04.09.2017
11:12:19
proxy_next_upstream в nginx не подойдёт?

Роман
04.09.2017
11:17:09
Судя по документации, должно быть насколько апстримов прописано в конфиге nginx?

Alexander
04.09.2017
11:20:05
readiness probe должны помочь

Роман
04.09.2017
11:33:53

Anton
04.09.2017
11:53:59

Let Eat
04.09.2017
12:37:29

Aleksandra
04.09.2017
12:59:57

Let Eat
04.09.2017
13:11:09

bebebe
04.09.2017
13:23:54
попробуйте задеплоить таким макаром spinnaker

Mikhail
04.09.2017
13:30:39
у меня такой вопрос.
Есть 2 кластера, 1 "продовый", второй пока стоит пустой. Находятся в разных ДЦ.
Как лучше сделать (и можно ли вообще) резервирование, чтобы в случае падения (читай, пропал сетевой доступ) к первому, второй кластер поднял все поды, чтобы на первом?
По идее, этот вопрос должен решаться федерализацией? Но как я понял из доки, при федерализации идет синхронизация и все поды\сервисы запускаются одновременно на двух кластерах, только как тогда продумать маршрутизацию, я что-то не осилил :(
Может кто занимался этим вопросом, подскажет как "правильнее" продумать схему?)

Denis
04.09.2017
13:33:12
Если датацентры недалеко то там есть такая штука (https://kubernetes.io/docs/admin/multiple-zones/)

Роман
04.09.2017
13:52:33

Google

Fike
04.09.2017
13:53:40
deployment + maxSurge / maxUnavailable?

Vadim
04.09.2017
13:54:08
Всем привет. А на своих железных серверах поднимать k8s лучше на какой ОС ? Может CoreOS ? или без разницы ?

Maksim
04.09.2017
14:03:50
Ну и зависит от личных предпочтений каждого

Роман
04.09.2017
14:10:09
deployment + maxSurge / maxUnavailable?
Я придерживаюсь политики, что можно создать один лишний под и максимально недоступно - ноль. А тут получается, что новый под в состоянии running, но ещё не отвечает, так как прогревается кэш, readinessProbe решит проблему round-robin: на эти новые поды не будет отправляться трафик, но от удаления старых, когда новые ещё не работают, он не спасёт.

Let Eat
04.09.2017
14:10:49

Admin
ERROR: S client not available

Роман
04.09.2017
14:11:36

Let Eat
04.09.2017
14:12:30
должно быть так

Алексей
04.09.2017
14:13:45
господа, а как выглядит шаблонизация конфигов приложения в кубере ?

Let Eat
04.09.2017
14:14:21
configmap volume
можно и в переменные окружения отдельные ключи из configmap записывать, кому как удобнее

Mikhail
04.09.2017
14:15:07

Алексей
04.09.2017
14:16:18
тоест ьфактически контейнер сам отвечает за создания своего конфига ?

Let Eat
04.09.2017
14:17:16
кто за что отвечает , это не технический вопрос, а огранизационный :)

Алексей
04.09.2017
14:17:44
я просто сейчас сравниваю с номадом
там есть template
он берет шаблон и отрендерви кладет в нужное место
а в кубере ?

Google

Denis
04.09.2017
14:18:19
а недалеко это сколько? )
Чисто дедуктивно. В доке приводится в пример Amazon AZ в одном регионе. Погуглил среднее время пинга между AZ. медиана = 2ms, 90p = 30 ms, 99 = 47ms
вот настолько далеко :)

Let Eat
04.09.2017
14:19:25
штук вроде динамической подгрузки и обновления из vault/consul нет вообще

Mikhail
04.09.2017
14:20:07

Алексей
04.09.2017
14:20:16
ага. а как тогда решается вопрос изменился ключ в etcd HUP ни сервис ?

Let Eat
04.09.2017
14:21:01
самое близкое - научить сервис делать релоад по запросу на какой-нибудь админский порт. тогда можно рядом крутить sidecar container, который смотрит за etcd и делает curl на 127.0.0.1
ну или использовать s6-overlay чтобы крытить несколько процессов в одном контейнере, тогда они сигналы друг другу смогу слать

Алексей
04.09.2017
14:23:36
нее. процессы уже декомпозированы

Let Eat
04.09.2017
14:23:48
всегда можно добавить еще
если само приложение не умеет следить за etcd, всегда кто-то должен делать это за него

Алексей
04.09.2017
14:25:09
ну врятли можно научить nginx следить за etcd

bebebe
04.09.2017
14:25:29
можно, но не нужно

Let Eat
04.09.2017
14:26:21

Алексей
04.09.2017
14:26:22
а прикручивание чего то типа confd ?
ага