Alexander
Друзья, у меня вот какая задачка появилась. Есть сервис, запущенный на каждой ноде через DaemonSet. Этот сервис может по API отдать check - состояние ("in_process", "waiting") допустим... Можно как-то настроить DS так, чтобы Pod терминэйтился только когда сервис отдает "waiting"? или ждет, пока сервис не выйдет в состояние "waiting" в какой-то промежуток Timeout?
Alexander
критично - не удалять этот под, пока там что-то деалется
Alexander
даже при обновлении
Etki
DS нельзя обновлять, насколько помню
Alexander
delete/create
Etki
и с терминейтингом пода вообще не понял, может, мне не хватает квалификации, но не помню чтобы куб вообще каким-то образом терминейтил поды
Alexander
перед удалением он (Pod) переходит в состояние Terminating
Etki
я не думаю, что существует функционал защиты от удаления
Alexander
полезу в код разбираться...
Etki
Эта ответственность лежит на том, кто менеджит кластер. Иначе есть возможность бесконечно откладывать удаление.
Alexander
ну вот не зря же в Kubernetes добавили сервисные аккаунты)))
Alexander
чтобы runtime управлять кластером
Alexander
через API
Etki
это никак не противоречит тому, что я сказал
Maxim
http://kubernetes.io/docs/user-guide/liveness/
Maxim
Sat, 27 Jun 2015 13:43:03 +0200 Sat, 27 Jun 2015 13:44:34 +0200 4 {kubelet kubernetes-node-6fbi} spec.containers{liveness} unhealthy Liveness probe failed: cat: can't open '/tmp/health': No such file or directory Sat, 27 Jun 2015 13:44:44 +0200 Sat, 27 Jun 2015 13:44:44 +0200 1 {kubelet kubernetes-node-6fbi} spec.containers{liveness} killing Killing with docker id 65b52d62c635 Sat, 27 Jun 2015 13:44:44 +0200 Sat, 27 Jun 2015 13:44:44 +0200 1 {kubelet kubernetes-node-6fbi} spec.containers{liveness} created Created with docker id ed6bb004ee10 Sat, 27 Jun 2015 13:44:44 +0200 Sat, 27 Jun 2015 13:44:44 +0200 1 {kubelet kubernetes-node-6fbi} spec.containers{liveness} started Started with docker id ed6bb004ee10
Alexander
Во!!! Максим, огромное спасибо! Запамятовал - смотрел когда-то...
Maxim
;)
Alexander
только это диаметрально обратная фича ;) она про запус... вот мне бы то же самое но про удаление
Maxim
ну так она удаляет под, когда он probe не проходит
Alexander
дада... мне же наоборот надо - чтобы при kubectl delete не происходило удаления пока что-то там не чекнулось. Но действительно, архитектурно это невозможно - иначе можно получить вообще невозможность удалить под
Maxim
напиши проверку так, чтобы она это учитывала
Maxim
там же не обязательно http-check
Maxim
есть и exec
Maxim
а уж в exec'e что угодно сделать можно
Alexander
это все работает только на запуск
Alexander
на удаление не работает )))
Maxim
всмысле?
Maxim
ааа
Maxim
ты хочешь предотвращать ручные убийства
Maxim
в зависимости от "статуса" операций
Maxim
?
Alexander
да. буду думать как по-другому менеджерить это дело. Возможно уйти от DS
Maxim
так а какая разница-то, DS или нет
Maxim
что DS, что RC, что Deployment все-равно делают в итоге поды
Alexander
DS сам размазывает по нодам
Maxim
и если у меня хватает прав на kubectl delete pod в нужном неймспейсе, то я все-равно смогу его пристрелить
Alexander
мне это отлично подходит, но вот управлять ими невозможно. Допустим половину опустить, а половину оставить
Maxim
а, это да
Alexander
нет, теоретически все можно.
Alexander
можно добавлять нодам лейблы
Maxim
kubectl delete такого пода приведет к его перезапуску на целевой машине
Alexander
в рантайме
Alexander
а DS как раз мониторит эти лейблы
Maxim
кстати интересно, если контейнеру в DS повесить nodeSelector...
Alexander
и если у ноды удаляется лейбл, то K8s удаляет с этой ноды Pos относящийся к соотвествующему DS
Maxim
не попячит ли его? ;)
Alexander
да, через NodeSelector
Alexander
у меня часть нод как раз под этот сервис поднята исключительно... и на них я запускаю сервис через DS и NodeSelector
Maxim
тогда я снова утерял суть изначального вопроса
Alexander
смотри. Есть сервис который что-то считает. Этих сервисов много. Они запущены сейчас через DS на отдельных нодах Так вот мне критично нельзя удалять сервис пока он что-то считает. Встает вопрос. Как их обновлять?
Alexander
допустим фикс какой-то вылить или просто новая версия вышла?
Maxim
мне кажется, тебе нужны джобы, а не демонсеты
Maxim
http://kubernetes.io/docs/user-guide/jobs/
Maxim
ну, по описанию
Alexander
хм... а их можно размазать по-кластеру? чтобы на одной ноде был только один Под?
Alexander
чем хорош DS - я просто добавляю ноду с лейблом и там автоматически запускается нужный мне сервис
Alexander
Job этого не даст
Maxim
зато джоба не остановится, пока не кончит
Alexander
а ноды добавляются в зависимости от нагрузки. Зачем мне держать 100 нод просто простаиваюих
Alexander
я просто пока думаю возможно ли это менеджерить просто средставами k8s или придется писать свой шедуллер
Alexander
который будет сам через k8s-api запускать сервисы на нодах
Alexander
но видимо для этой задачи базовых возможностей k8s не хватит (((
Maxim
Alexander https://pracucci.com/graceful-shutdown-of-kubernetes-pods.html
Alexander
Максим, кстати отличная статья. Про preStop вообще не думал. В статье написано что он блокируется (This event handler is blocking...) правильно ли я понимаю, что я могу поставить terminationGracePeriodSeconds в нужное значение (чтобы точно через минуту, например все грохнулось) и в хуке разблокироваться после окончания расчетов... Тогда как хук разблокируется, под удалится. Если же за время terminationGracePeriodSeconds не разблокируется, то все-равно удалится по таймауту
Maxim
ну как я понял - да, так и есть
Maxim
надо пробовать
Alexander
ок! Попробую и отпишусь
Maxim
запускаю 1.3.5 и получаю ошибки про CNI
cам спросил, сам отвечаю: https://github.com/kubernetes/kubernetes/issues/30681
Denis
https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/README.md
Denis
Получилось? :)
Привет :) Да, лови: https://github.com/StartupMakers/k8s-resource
Maxim
https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/README.md
отличный солюшн, жаль только слишком крепко прибит гвоздями к GCE
Maxim
в общем, чтобы запустить кубернетес >= 1.3.5 с weave или calico, надо сначала поставить последние стабильные CNI-бинари
Maxim
wget https://github.com/containernetworking/cni/releases/download/v0.3.0/cni-v0.3.0.tgz && \ tar xvf cni-v0.3.0.tgz -C /opt/cni/bin/
Maxim
после этого k8s-1.3.5 начинает работать как по волшебству
Alexander
Это из-за этого k8s не хотел компилиться?
Maxim
Про компиляцию ничего не знаю
Alexander
))
Denis
Привет :) Да, лови: https://github.com/StartupMakers/k8s-resource
Вот ещё полезные ресурсы) https://concourse.ci/resource-types.html