
Denis
07.04.2017
20:39:08
Как тема с контейнерами зашумела )

Paul
07.04.2017
21:05:51
Карго с вивом увы - не работает

Roman
07.04.2017
23:55:50
Что вы используйте для incremental mongodb backup? только для полных снапшотов бэкап на s3 нахожу образы

Google

Denis
08.04.2017
04:05:05

Victor
08.04.2017
07:13:46
а между вивом и фланелькой кто какой выбор сделал? если можно, то с обоснованием

Paul
08.04.2017
10:42:33

Victor
08.04.2017
11:02:30
и каково ваше мнение насчет держать весь к8 на отдельной lxd?

Paul
08.04.2017
11:08:55

Victor
08.04.2017
11:11:18
ну что бы на одной ОС держать несколько вариантов исполнения к8, пока не определюсь с лучшим стеком

Aleksandr
08.04.2017
11:18:49
k8 не работает в lxc/lxd :(

Eugene
08.04.2017
11:37:49
работает, но нужно патчить
https://github.com/opencontainers/runc/pull/1386/files
https://github.com/kubernetes/kubernetes/pull/43079

Victor
08.04.2017
12:13:21

Google

Paul
08.04.2017
13:45:17
он не OCI, а CRI, вспомнил термин

Ihor
08.04.2017
20:07:41
CRI (для docker) в бете начиная с 1.6
Планируем что в 1.7 расширится поддержка до rkt как минимум, stable будет в 1.7 или 1.8
К слову, планирование фич на 1.7 будет уже в ближайший вторник

Victor
08.04.2017
21:09:56
поправьте, но cri - это плугин для контейнеров внутри к8. я же изначально спрашивал, нормально ли будет на изначальной оси рубануть кусок lxd и на нём поднять весь к8, а потом рубануть ещё кусок и поднять к8 с отличающейся архитектурой. и что бы потом их переключать, например.

Paul
08.04.2017
22:01:22

Victor
08.04.2017
22:02:37
да, контейнер внутри контейнера наше всё)
например один к8 на фланели, второй на виве


Paul
08.04.2017
22:18:15
сомнительно что оверлейная сеть будет работать. Но попробовать никто не запрещает, конечно
коллеги, сталкивался ли кто-нибудь с сообщениями в сислоге вида:
kubelet[4245]: E0408 22:29:56.209468 4245 remote_runtime.go:109] StopPodSandbox "f61b626d23f0b36b1542c0ddec0b157c504923b912a66e3743b263849905c668" from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "tiller-deploy-1491688397-8vkfm_kube-system" network: CNI failed to retrieve network namespace path: Error: No such container: f61b626d23f0b36b1542c0ddec0b157c504923b912a66e3743b263849905c668
Apr 8 22:29:56 app3 kubelet[4245]: E0408 22:29:56.209479 4245 kuberuntime_gc.go:138] Failed to stop sandbox "f61b626d23f0b36b1542c0ddec0b157c504923b912a66e3743b263849905c668" before removing: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "tiller-deploy-1491688397-8vkfm_kube-system" network: CNI failed to retrieve network namespace path: Error: No such container: f61b626d23f0b36b1542c0ddec0b157c504923b912a66e3743b263849905c668
Известен ли способ лечения?


Aleksandr
09.04.2017
05:29:14

Let Eat
09.04.2017
06:41:18


Paul
09.04.2017
08:16:45

Let Eat
09.04.2017
08:17:13
"NetworkPlugin cni failed to teardown pod"

Andrey
09.04.2017
14:18:58
всем привет
создал новый инстанс монгодб чтобы данные мигрировать... сделал дамп большой таблицы
получил OOM в ноде, она удачно вывалилась и похерила кучу подов, продакшн упал
через 10 минут все просралось и восстановилось, но роутинг не шел пока вручную игресс контроллер не перезапустил какого то хрена
вопрос: порекомендуйте набор практик чтобы такой жопы не было плиз?

Let Eat
09.04.2017
14:23:27
Pod limits
Чтобы падала не нода, а под

Andrey
09.04.2017
14:25:21
ну у меня как бы разброс сильный... та же монга жрет под задачи неограниченно
то есть ей 2 гига хватает обычно, но может бурстом до 16 выжрать
если я поставлю лимит 16 и реквест 16 то эти 16 будут вечно заняты и шедулер будет отбивать другие поды типа "нафиг пошел, памяти нет"
а по факту 2 гига только юзаться и будет
а реквест 2 и лимит 16 = все равно OOM в результате

Google

Andrey
09.04.2017
14:28:03
есть возможность на текущем уровне кубернетеса задать алгоритмы oom eviction?
важность там, туда-сюда
или типа "это не проблема кубернетеса, а проблема линукса под капотом"? :)

Let Eat
09.04.2017
14:43:22
важность там, туда-сюда
косвенно важность задается: guaranteed (requests == limits) > burstable (requests < limits) > best effort (limits == 0)
kubelet может вышибать поды когда ресурс подбирается к отметке, описано тут https://kubernetes.io/docs/concepts/cluster-administration/out-of-resource/
но ему тоже необходимо время на среагировать

Andrey
09.04.2017
14:45:09
Да, я че то такое читал но не мог вспомнить ссылку, спасибо

Let Eat
09.04.2017
14:45:56
> если я поставлю лимит 16 и реквест 16 то эти 16 будут вечно заняты и шедулер будет отбивать другие поды типа "нафиг пошел, памяти нет"
разумный оверкомит нужен, совсем без лимитов жить тоже не дело

Paul
09.04.2017
14:46:17

Let Eat
09.04.2017
14:50:21
там есть еще хаки навроде прибивания oom_score в -9000 для critical pods. Если повесить annotation: {scheduler.alpha.kubernetes.io/critical-pod: 1} , то ваш под тоже важным и невышибаемым станет. но это скользкая дорожка.

Andrey
09.04.2017
14:55:37
Я вот из доки понял что эвиктится по тому кто как ресурсы запрашивает и потребляет. Но не увидел или пропустил как можно повлиять вручную (шедулер альфа не подходит) на формулу.
То есть вот этот сервис и вот эта база должны стоять до конца

Let Eat
09.04.2017
14:56:20
никак, приоритеты и SLA для подов будут в 1.7 или 1.8 или когда-нибудь еще, но сейчас нет :)

Andrey
09.04.2017
14:56:49
Ок
Неприятно слышать "никак" для вещей которые уже в продакшне )

Let Eat
09.04.2017
14:58:49
повесьте на отдельную ноду эту базу и всё
если ресурсов нехватает - кто-то должен умереть, чудес не бывает

Andrey
09.04.2017
15:04:06
Ну я в целом только себя и чмоню: не предусмотрел, не ознакомился, не хватило знаний, и тп

Paul
09.04.2017
17:28:43

Andrey
09.04.2017
18:16:09
самое интересное что не ограничивая ресурсы и пытаясь залить большие объемы инфы я получаю oom для всего кластера, если ограничиваю то операция не может выполниться потому что оперативки не хватает (пытался залить 6 гб инфы с ограничением на под в 6 гб оперативы, странно так-то)
короче, пришло время избавляться от монги, буду в сторону cocroachdb ковырять :)

Google

Andrey
09.04.2017
18:24:20
я кстати думал что приложения выполняются в "песочнице", и типа не смогут заюзать больше оперативки чем прописано в лимитах
а по факту их просто пристреливают когда они переходят за лимит... открытие сегодняшнего дня
или... они работают в "песочнице" и все норм, но если глобально лимит превышен то пристреливают те которые в очереди на убийство согласно формуле? так правильнее сформулировал?

Paul
09.04.2017
18:56:47
честно говоря я не в курсе, но стоит посмотреть в документации
судя по тому, что я в доке прочитал, контейнер, который попытается вылезти за квоту - просто не получит ресурсов. Терминирован он не будет.

Vitaliy
09.04.2017
20:53:11

Paul
09.04.2017
20:54:16
А можно линк? А то я как-то читал про убиение
в оффдоке сказано, что лимиты по памяти и процу передаются контейнеру через аргумент в докере. Если контейнер выскочит за лимит (то есть докер проигнорирует ограничение, хотя вообще-то не должен) - контейнер будет убит
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#how-pods-with-resource-limits-are-run
в общем-то вполне логичное поведение. Если контейнер вышел за пределы ограничений - его поведение точно ненормально и он подлежит уничтожению. Мало ли что еще он натворит?

Andrey
09.04.2017
20:59:31
Если лимит на память гиг и вы куском этот гиг аллоцируете - докер прибьет, если же сначала саллоцируете 500, а затем еще гиг - ничего не произойдет

Let Eat
09.04.2017
21:03:21

Andrey
09.04.2017
21:07:32

Fike
09.04.2017
21:29:43
у меня ощущение, что докер вообще напрямую с памятью контейнера не контактирует и знает кто кому сколько выделил только пост-фактум, собирая метрики, и аллокация и ограничения действительно происходит только на уровне ОС

Let Eat
09.04.2017
21:48:30
докер настраивает cgroups, всю работу делает ядро

Vitaliy
10.04.2017
08:39:03
всем ку.
kube-apiserver, параметер —apiserver-count
что он конкретно делает? кто-то вкурсе?

Let Eat
10.04.2017
08:39:23
жуткая вещь
определяет сколько записей будет добавлено в kubernetes.svc
если он меньше, чем живых apiservers -> они постоянно пытаются добавить себя и обновляют эту запись если себя не видят,при этом выкидывая одну из записей которая там уже есть
если он больше, чем живых apiservers -> все живые добавляют себя и не парятся, а лишние "мертвые" записи так и висят, и периодически отдаются клиентам, клиенты в этом случае не могут свзяться с apiserver и спамят в лог

Vitaliy
10.04.2017
08:45:07
тоесть, для 3х-нодового сетапа мастеров, мне достаточно манифест подсунуть с этим параметром=3? если он просто менеджит кол-со записей но не сами контейнеры с апи.

Let Eat
10.04.2017
08:45:31
вобщем если хотите настоящий HA то не ставьте этот параметр и терпите вечный трафик в etcd на обновление этой записи каждые N секунд. в противном случе если apiserver упадет (или будет выключен для обновления скажем), то 1/X коннектов к apiserver будут с ошибкой, где X - количетсво apiservers

Google

Vitaliy
10.04.2017
08:47:27
ок, понял.
А если я хочу ему передать параметр bind (не равный advertise) и на "advertise-нный" адрес повесить балансер (nginx к примеру) то можно будет не терпеть?

Let Eat
10.04.2017
08:49:11
мы для себя решили незамечать проблему и оставить как есть --apiserver-count=1 :)

Vitaliy
10.04.2017
08:52:43
эт значит что клиенты будут ходить в разные api, постоянно. а если они в разных DC?
на сколько вообще (по вашему опыту) критично время отклика api?

Let Eat
10.04.2017
08:53:46
у нас нет практического опыта иметь один кластер на несколько DC. мне кажется лучше их держать внутри DC , а наверх повесить federation
но это теория :)
в etcd всё равно пишется в лидера, а лидер один и если он в другом DC, то может получится 2 хопа между DC: client (dc1) -> apiserver (dc2) -> etcd leader (dc3)

Vitaliy
10.04.2017
08:58:02
кстати я не знал этого про etcd. я дцумал что принимает "принявший" и потом уже они внутри синхронизируются. мало знаю про это. спасибо
моя косноязычна, сорри.

Maksim
10.04.2017
08:58:52
ТОгда были бы коолизии...
И нужно было бы изобретать механизм их разрешения

Vitaliy
10.04.2017
09:02:49
еще вопрос:
на какой адрес должен адвертайзиться апи?
бест праксис какой?

Let Eat
10.04.2017
09:03:56
адрес по которому он доступен :)

Vitaliy
10.04.2017
09:07:24
ну это в обзем понятно.... но после фразы "не все поды могут (должны) покидать kube, для доступа к балансеру придется"
но если я привяжу апи к "внешнему адресу" то в чем разница с просто nginx на том-же адресе/порте?

Maksim
10.04.2017
09:11:54
Это что промт перевод?

Let Eat
10.04.2017
09:12:09
нет :)