

Fike
22.01.2017
00:30:54
а теперь к вопросам:
в конце первого сообщения философские вопросы почему-то интересны.
1. глобальный кэш etcd - ощущение, что к нему ни у кого нет критики вообще ни у кого, это нравится, но настораживает. хочется про траблы и "грабли"
2. недоработки, ограничения внутренних днс, что там с srv поддоменами, нескольким a записям или можно ли подружить с внешними днс (роут58, например)
3. вычислительно все красиво и здорово, но что курить для раздумления правил фэн-шуйного хранения данных (ок, шардинг, реплики...), а какие есть coreos ориентированые идеи для распределенных fs, хранилищах ключей и внутрикластерной CA, например (были кейсы, когда микросервисам внутри системы нельзя было доверять друг-другу и вообще все где фигурируют финансы нужно было подписывать, а в ряде случаев, шифровать при общении с кем угодно, навернякак кто-то это уже продумал).
4. какие реальные ощущения от скорости реакции кластера на то, что происходит с его содержимым (образно, если я запущу вагрантовый вариант coreos на десктопе, проброшу все порты к нему, добавлю в кластер и решу все сервисы готовить и обкатывать на локальной ноде кластера, а в продакшн оно улетает не по команде, а просто ради ресурсов и само же "множится до нужного количества и расселяется" после клонирования сервиса/пачки сервисов с признаками продакшн хотелок. странный кейс, но идею "ждать от кластера того что бы он продолжал себя вести идеально" описывает корректно, думаю.)
5. если верно понимаю, то у нод порты для "общения между собой" обычно торчат наружу и можно повынимать кучу разных конфигов просто зная что спрашивать (или мне показалось?)
5 - https://github.com/kayrus/kubelet-exploit это единственная уязвимость такого рода, о которой слышал. kayrus сидит здесь же, скорее всего подскажет позже, актуально ли это еще. В GKE это решают просто фаерволлом.


Roman
22.01.2017
00:31:57
а не там где происходят вычисления, преимущественно.
(формулировка не идеальна, но гипотеза такова, что эксплойты могут быть просто нишевыми, а не невозможными)

Google

Fike
22.01.2017
00:34:33
м?
Про кэш etcd впервые слышу, можно поподробней? Про dns не уверен, что правильно понял вопрос, но внутренний сервис резолвится либо в один псевдоайпишник (который разруливает iptables/userland proxy), либо в несколько "прямых" айпишников, либо указывает на другой адрес (внешний или внутренний). SRV-записи должны создаваться.
Про хранение данных - тоже уточнить бы, в каком контексте идет вопрос. Правила непосредственно разнесения узлов приложения (будь то база данных или распределенная фс) устанавливает скорее само приложение. Общая рекомендация - стараться не заносить в куб хранение данных, если иначе никак, то либо хранить на подключаемом сетевом хранилище (это не [только] nfs, полный список https://kubernetes.io/docs/user-guide/persistent-volumes/#types-of-persistent-volumes), либо - самый опасный путь - хранить прямо на машине и разгребать всякие проблемы управления шедулингом.

Roman
22.01.2017
00:48:39


Fike
22.01.2017
00:50:08
я сейчас только в контексте куба говорю. корку тут вряд ли много народа гоняет, но я практически уверен, что и в корке, и в кубе etcd кэшем не является

Roman
22.01.2017
00:50:26
всем ведь нет нет, да и хочется иметь сквозну k-v хранилку за которой не нужно следить

Fike
22.01.2017
00:53:46
single source of truth скорее. Я честно скажу, что не ковырял исходники куба, но, насколько понимаю, все состояние кластера лежит там и только там.

Roman
22.01.2017
00:54:20
ну да
там и только там
но кто нам мешает хранить там еще что-то?

Fike
22.01.2017
00:56:42
Если вопрос в применимости в качестве кэша, то он под это дело не очень хорошо заточен, шардинга нет, держаться in-memory он, насколько знаю, не умеет.

Google

Roman
22.01.2017
00:56:49
образно, если раньше, когда проксмокс и опенвз... короче, издавна любил сквозной мемкэш для всех относящихся к проекту виртуалкок

Fike
22.01.2017
00:57:24
Его все равно можно поднять на tmpfs и читать с наименьшей консистентностью, но проще взять заточенное под это дело решение и не мучать

Roman
22.01.2017
00:57:32
сильно хвалил проверку наличия на мастере при отсутствии на слейве, ttl и еще разное.

Fike
22.01.2017
00:58:07
А тот etcd, который управляет коркой/кубом трогать конечно не стоит (если я конечно правильно понял вопрос)

Roman
22.01.2017
00:58:15
писать в него тоже может кто угодно локально, с доставкой всем

Fike
22.01.2017
00:59:32
у него нет локальной записи, все равно на мастер уйдет

Roman
22.01.2017
00:59:46
ну, уйдет, но думать об этом, по сути, не нужно, верно?

Fike
22.01.2017
01:00:16
я бы все-таки об этом думал

Roman
22.01.2017
01:00:35
?
всмысле
вернее, почему?

Fike
22.01.2017
01:02:03
переизбрание мастера устраивает stw всему кластеру, например

Roman
22.01.2017
01:02:33
про выборы у меня тоже есть вопрос, но он прикладной, потом пока не задал.

Fike
22.01.2017
01:02:36
не то чтобы у меня это было в продакшене и я такой весь из себя спец, просто проще взять решение, которое само заботится о том, какие узлы отвечают по какому ключу
etcd все-таки про консенсус
кэш про быстрое извлечение данных

Roman
22.01.2017
01:03:17
не против, если я более глупые, чем выше вопросы буду задавать про термины?)
stw - ?

Google

Fike
22.01.2017
01:05:20
я постоянно путаю термины, поэтому боюсь их использовать. я про шардинг, когда каждый узел в кластере обрабатывает определенный диапазон ключей
stop the world

Roman
22.01.2017
01:05:46

Fike
22.01.2017
01:05:56
нет

Roman
22.01.2017
01:05:57
ну, образно, смотри (можно на ты?)

Fike
22.01.2017
01:06:10
конечно

Roman
22.01.2017
01:06:20
есть мемкэшд, мастер, n слейвов

Fike
22.01.2017
01:06:43
консенсус - это обязательно спросить у всех (в данном случае спросить у кластера, являешься ли мастером, чтобы иметь право отдать значение)
боюсь, мы сильно в сторону ушли, и нам завтра надают по шапке за тонну сообщений


Roman
22.01.2017
01:07:56
любое приложение выполняемое где угодно в любой момент просто локально спросит и получит ответ, если ему нужен кусок контекста, json schema, права, ссылки на урлы, серты, внешние сервисы + понимание как подписаны ключи для доступа к ним и у кого про них спросить
консенсус - это обязательно спросить у всех (в данном случае спросить у кластера, являешься ли мастером, чтобы иметь право отдать значение)
ох.
там рафт же.
рафт это когда если давно не слышал новостей от мастера - начинаешь балотироваться и рассказывать соседям.
дальше чем больше соседей тебе поверили, тем скорее станешь мастером и начнешь хвастаться уже об этим (если начнешь).
есть ты хочешь стать мастером, но получил сообщение от мастера - ты начинаешь просто слушаться.
по сути, это значит, что следующим мастером (распространителем инфы) станет тот, кто быстрее всех при текущем "расселении" умудрился распространить среди большинства свою кандидатуру (а значит и с распространение справится лучше других)
ну, да ладно. спасибо за комменты, в любом случае.


Fike
22.01.2017
09:15:15
ох.
там рафт же.
рафт это когда если давно не слышал новостей от мастера - начинаешь балотироваться и рассказывать соседям.
дальше чем больше соседей тебе поверили, тем скорее станешь мастером и начнешь хвастаться уже об этим (если начнешь).
есть ты хочешь стать мастером, но получил сообщение от мастера - ты начинаешь просто слушаться.
по сути, это значит, что следующим мастером (распространителем инфы) станет тот, кто быстрее всех при текущем "расселении" умудрился распространить среди большинства свою кандидатуру (а значит и с распространение справится лучше других)
Нет, если запрос идет не с weak consistency, даже мастер обязан обратиться к кластеру и убедиться, что он является мастером. Иначе ни о каком linearizability нельзя говорить, потому что история может разойтись на двух нодах, которые одновременно считают себя мастеарми. Я не с потолка это беру https://github.com/coreos/etcd/issues/741

Roman
22.01.2017
09:15:42

Ivan
22.01.2017
10:39:18
неплохое объяснение рафта

Andrey
22.01.2017
10:54:32
Замечу, что etcd не только k-v хранилище, но ещё и очереди отлично реализованы. используем, конечно, отдельный от k8s инстанс

Fike
22.01.2017
11:12:36
очереди? в etcd?

Denis
22.01.2017
11:18:24
Отлично?

Google

Roman
22.01.2017
11:31:49

Andrey
22.01.2017
11:40:57
Я про это, bus-queue да и многое другое
https://coreos.com/etcd/docs/latest/v2/api.html#atomically-creating-in-order-keys
еслинственный неоднозначный нюанс в отношениях с coreos - это "дружба" с ансиблом

Fike
22.01.2017
11:46:03
очень эм странное решение
Непонятно, что делать с классическими проблемами роутинга и сообщений, о которых консьюмер слишком долго не отвечает (которые должны спустя какое-то время вернуться в очередь, если не пришел ack). Судя по всему, для сортировки ему нужно прочитать индекс целиком, что вызывает некоторые опасения.

Andrey
22.01.2017
11:53:47
ну для этого есть механизм блокировок и ничего не мешает разделить очередь на 2 - ожидающих и выполняющихся, также ttl сничает часть проблем
но согласен, что не для всех случаев подходит
и у нас пока всего пара десятков тысяч "сообщений" на 3 ноды и с масштабируемостью пока не столкнулись,но спасибо за идею

Fike
22.01.2017
11:56:44
Ну, окей, она выполняется уже час, и ее кто-то должен перекинуть обратно. Кто это делает и как это происходит?

Andrey
22.01.2017
12:01:15
ну если нужно имнно такое условие, то очевидно, что какой-то дополнительный процесс, имхо - это слишком специфично для приложения

Fike
22.01.2017
12:02:30
в общем, у меня ощущение, что это тоже кончается чтением всего индекса, только уже не в самом etcd, а снаружи, предварительно передавая его по сети

Andrey
22.01.2017
12:03:49
стоит проверить, место, действительно, узкое

Denis
23.01.2017
09:29:52

Fike
23.01.2017
09:54:44
Деплоймент, ингресс я даже не пробовал (но, емнип, у него нет функционала для таких перенаправлений)

Denis
23.01.2017
09:56:53
ага, получатеся это обычный pod с развернутым nginx
@etkee И в нем nginx.conf который делает простой редирект по значению сабдомена. А балансировка, если поды сервиса в нескольких репликах, происходит уже в самом сервисе, правильно понимаю?

Fike
23.01.2017
10:16:30
да, все верно
Единственный caveat - что nginx, судя по разговорам на гитхабе, идет в обход стандартных вызовов для резолва днс (насколько понял), поэтому без собственного резолвера не обойтись, и для получения ip kube-dns при запуске контейнера пришлось вызывать getent hosts kube-dns.kube-system.svc.cluster.local или что-то такое и впиливать в конфиг перед exec. Но есть еще, как минимум, traefik и haproxy, nginx я взял как решеине, с которым больше всего знаком.

Denis
24.01.2017
00:42:00
Всем привет. Подскажите конфиг для того, чтобы мониторить кластер через Prometheus + получать уведомления на SMS и email?
Grafana ещё не научилась это делать?

Victor
24.01.2017
00:54:21
Я вот эти за основу брал
https://github.com/kayrus/prometheus-kubernetes
https://github.com/giantswarm/kubernetes-prometheus
grafana тоже умеет, но все лень настроить

Denis
24.01.2017
00:55:32
Спасибо! Он нормально, не много памяти съедает? У нас что-то на тестовом кластере до 10 Гб за пару дней разошёлся

Google

Denis
24.01.2017
00:58:55
В такой схеме выходит Prom и Grafana будут дублировать друг друга? А как только у Grafana настраивается SMS + email алерты, то Prom уже не нужен становится? Или у него ещё полезное что то может есть?
Вроде ребята из Monzo что то рассказывали про полезные фильтры в Prometheus
http://docs.grafana.org/alerting/rules/
вуаля!
SMS / E-mail / Slack

Victor
24.01.2017
01:09:22
У нас ограничение в 1гигабайт стоит, за последний месяц пару раз рестартовал, данные за пару секунд потерял, пока не критично для нас
Prom не ставил, только Grafana.
Алерты сделал на Prometheus, хотя Grafana красивые скрины дашбордов иногда в slack присылает

Denis
24.01.2017
01:24:22
Она ещё и в Slack умеет слать скрины?
http://docs.grafana.org/alerting/notifications/#slack вот это?
Вот ещё что то https://github.com/raintank/kubernetes-app

Victor
24.01.2017
01:33:30

Pavel
24.01.2017
05:48:16
Всем привет!
Столкнулся с такой проблемой. В k8s 1.2.5 + Docker 1.13 не публикубтся порты через k8s сервисы (services type: NodePort).
Вернее публикуются, но они недоступны:
$nmap -p 31220-31230 <host>
PORT STATE SERVICE
31222/tcp filtered unknown
Проблема воспроизводится на Debian 8, Ubuntu 16.04 LTS.
C Docker 1.12 все ок было.
Никто не сталкивался с подобным?
C k8s 1.5.2 баг повторяется.

Aleksandr
24.01.2017
07:00:35
это баг 1.13... вообще очень нехороший релиз вышел 1.13, ожидаем патчей...

Igor
24.01.2017
07:30:42
@devosx а знаешь какое ишью в docker по этому поводу есть?
хочу почитать детали

Pavel
24.01.2017
08:05:29
+1
Если что создал тикет https://github.com/kubernetes/kubernetes/issues/40349

Paul
24.01.2017
10:00:39