𝚔𝚟𝚊𝚙𝚜
а если не умерла?
𝚔𝚟𝚊𝚙𝚜
если на ней просто kubelet отвалился или сеть
𝚔𝚟𝚊𝚙𝚜
stateless приложение переедет
𝚔𝚟𝚊𝚙𝚜
а для stateful подобного рода костыли нужны
𝚔𝚟𝚊𝚙𝚜
ага, но как?
Михаил
ага, но как?
Ну Так ты же написал - через api убиваем unknow
Igor
но я не понимаю, как он его обрабатывает, и откуда писатель этого кода взял структуру, которую можно отправлять в dm
https://cloud.google.com/deployment-manager/docs/configuration/templates/create-template-modules Я думаю там участвует обвязка из темплейтов плагинов и еще кучи интересного https://github.com/GoogleCloudPlatform/deploymentmanager-samples/blob/b941d1f9b70390d0693d030cfc26843c75b3e165/tools/scheduled-deployments/functions/test/schedule_test.js Думаю прийдется покапаться в этой репе https://github.com/GoogleCloudPlatform/deploymentmanager-samples Но это все вам нужно только если нужен питон. Да и я не очень понимаю причем тут кубер
𝚔𝚟𝚊𝚙𝚜
Ну Так ты же написал - через api убиваем unknow
ну они unknown не просто так висят
𝚔𝚟𝚊𝚙𝚜
если ты убьешь их просто через куб, это не будет гарантировать что где-то там они прекратили выполняться
𝚔𝚟𝚊𝚙𝚜
по этому и нужен fencing сначала убиваем ноду, уже только потом убиваем ресурсы в k8s
Igor
но я не понимаю, как он его обрабатывает, и откуда писатель этого кода взял структуру, которую можно отправлять в dm
https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/b941d1f9b70390d0693d030cfc26843c75b3e165/tools/scheduled-deployments Вот описание, это кастомная хрень для Scheduled Deployments И в общемто не сильно нужна на начальной стадии
Andor
Чтобы случайно не ожила
𝚔𝚟𝚊𝚙𝚜
да, все так
𝚔𝚟𝚊𝚙𝚜
кстати softdog - вполне годный метод основанный на таймаутах, к тому же не требующий внешних fencing-агентов, вот его и можно было бы запилить в сам куб
𝚔𝚟𝚊𝚙𝚜
Типа запилить следующий функционал прямо в kubelet: - после каждого успешного общения с мастером выполнять что-то типа echo 1 > /dev/watchdog - а в случае неудачи, нода ребутнется сама по таймауту - кубернетес мастер знает про этот таймаут и если нода NotReady больше чем определенное время, значит она гарантированно мертва и ее ресурсы можно решедулить
𝚔𝚟𝚊𝚙𝚜
вот правда будет весело если умрет мастер :)
𝚔𝚟𝚊𝚙𝚜
так что, полагаю, что внешний fencing в любом случае будет работать лучше, а для реализации этого нужно дергать различные fencing-агенты, т.к. оборудование у всех разное, и куб не обязан это все поддерживать
𝚔𝚟𝚊𝚙𝚜
вот и я говорю
𝚔𝚟𝚊𝚙𝚜
хотя можно было бы придумать какой-нибудь fencing api
Andor
Опять пейсмейкер?
𝚔𝚟𝚊𝚙𝚜
да ну не
Andor
:)
𝚔𝚟𝚊𝚙𝚜
просто нужна еще одна абстракция для куба, как provisioner только для fencing
𝚔𝚟𝚊𝚙𝚜
Я запутался. Зачем ребутать ноду? Что бы unmount прошел?
ну смотри, допустим у тебя есть stateful сервис, он имеет один под к которому подключен какой-нибудь iscsi волум
𝚔𝚟𝚊𝚙𝚜
Что по твоему должно произойти если ты просто остановишь kubelet на ноде где он выполняется?
𝚔𝚟𝚊𝚙𝚜
Ну да, более того, он продолжит выполняться на ноде, при этом куб не знает выполняется он или нет. Если такой под просто удалить из API, куб его пересоздаст на другой ноде, подключит и смаунтит тот же iscsi-volume, при этом в лучшем случае под не заведется, в худшем заведется и ты получишь поврежденную фс на волуме. Так как она смонтирована на нескольких физически разных нодах.
𝚔𝚟𝚊𝚙𝚜
есть же механизм нотификации живости, таймауты настраиваются. systemd можно попросить живость kubelet проверять, зачем рестартить ноду то.
ок, другой кейс, что если у вас пропал коннект со стораджем на ноде которая выполняет под, приложение зависло на какой-то конкретной i/o-операции и не отвечает, любые проверки говорят что приложение не работает
𝚔𝚟𝚊𝚙𝚜
допустим куб перезапускает такой под на другой ноде, при этом не до конца убедившись что старый однозначно мертв. а через какое-то время восстанавливется подключение к стораджу на прежней ноде, i/o продолжается исход такой-же: поврежденная фс и даннные на ней
Михаил
Ну или не использовать stateful в кубе)
Михаил
Точнее PV
𝚔𝚟𝚊𝚙𝚜
ну есть еще вариант отрезать ноду от стораджа, но это работет немного хуже, т.к. оставляет ноду в непонятном состоянии
Artem
Как считаете, Kubernetes как гипервизор на kvm это бред или рацианальное зерно в этом есть?
𝚔𝚟𝚊𝚙𝚜
я деплою opennebula с помощью куба
Михаил
kubevirt.io
Сырая альфа
Михаил
И больше похоже на refrence архитектуру для своего проекта)
𝚔𝚟𝚊𝚙𝚜
Ну или не использовать stateful в кубе)
на самом деле все отлично работает когда все pv локальные, и не должны переезжать если нода упадет. а каждое stateful-приложение имеет несколько инстансов и redundancy на уровне приложения
𝚔𝚟𝚊𝚙𝚜
по сути любая база данных с поддержкой репликации
Михаил
Или как его там
𝚔𝚟𝚊𝚙𝚜
сейчас local volumes изобрели спецом для этого
𝚔𝚟𝚊𝚙𝚜
но я не вижу особой разницы с hostpath, тем более что nodeAffinity прекрассно работает и для тех и для других волумов
Михаил
по сути любая база данных с поддержкой репликации
Вообще есть кейс: микросервис с mysql, и тащить ту же галеру вот вообще не хочется
Михаил
Кейс: маленькая бд
Михаил
кстати
Михаил
https://github.com/rancher/longhorn
Михаил
кто-то юзал?
Konstantin
А он разве не рип?
Михаил
да вроде не
𝚔𝚟𝚊𝚙𝚜
https://github.com/rancher/longhorn
Вроде OpenEBS это форк лонгхорна, частично или полностью
𝚔𝚟𝚊𝚙𝚜
И его логичное продолжение
Vadim
я сырцов то лонхорна не нашел
https://github.com/rancher/longhorn#source-code
𝚔𝚟𝚊𝚙𝚜
Но я бы больше в сторону Linstor посмотрел бы ес честно
Михаил
https://github.com/rancher/longhorn#source-code
да, че-то протупил
𝚔𝚟𝚊𝚙𝚜
Потому что использует меньше компонентов которые могут сломаться,
𝚔𝚟𝚊𝚙𝚜
+ я сейчас активно использую drbd и доволен им как слон
𝚔𝚟𝚊𝚙𝚜
Кстати ISTGT который они используют ваще бомба!
Andor
linstor это ж drbd?
𝚔𝚟𝚊𝚙𝚜
Andor
уж лучше с сефом потрахаться
𝚔𝚟𝚊𝚙𝚜
Оркестратор
𝚔𝚟𝚊𝚙𝚜
уж лучше с сефом потрахаться
Зависит от конкретных задач, цеф под хайлоад ваще не вариант
𝚔𝚟𝚊𝚙𝚜
Оно и правильно, имхо: если приложение умеет ha и репликацию своими силами, это всегда лучше чем кластерная фс
Andor
да фс-то обычно и не нужна, нужен обжект-сторейж
Andor
если тебе нужна именно фс размерами в десятки-сотни терабайт, то у тебя что-то скорее всего не так
Anton
Не сотни тб, но под mq, redis, mysql сторейдж нужен быстрый, легко пару тб набирается