Size: a a a

Kubernetes — русскоговорящее сообщество

2020 October 21

c

corsars in Kubernetes — русскоговорящее сообщество
Alexey Shumkin
Коллеги, вопрос есть про номер пода
ТЗ такое )
Приложения-обработчики (а) журналов ... представляют собой контейнерные приложения, которые разворачиваются в namespace ... в виде StatefulSet.
Механизм Kubernetes StatefulSet используется для задания четко определенного порядкового номера каждому Pod этих приложений для шардирования площадок  между Pod-ами StatefulSet, см. https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identity
При каждом запуске, приложения ... считывают свой уникальный порядковый номер Pod, см - https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
   . Затем приложения ... обращаются к API ... по протоколу HTTP для получения списка площадок, которые они должны обслуживать, согласно порядковому номеру своего Pod

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identity
При каждом запуске, приложения ... считывают свой уникальный порядковый номер Pod, см - https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
   . Затем приложения ... обращаются к API ... по протоколу HTTP для получения списка площадок, которые они должны обслуживать, согласно порядковому номеру своего Pod

https://github.com/kubernetes/kubernetes/issues/40651
4 года уже висит 🙁

я хочу убедиться по инфе от вас, действительно ли  переменная окружения HOSTNAME и Pod hostname  (из https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identityhttps://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identity) - одно и то же? )
Ладно там afinity node хоть как параметр - все вытащить можно - вопрос только один - там федерацию хотят в ТЗ ?
источник

S

Slach in Kubernetes — русскоговорящее сообщество
народ, а как то можно через kubectl получить audit logs из EKS?
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Boriss Borisovich
Поставлю иначе вопрос: кто что использует для билда и деплоя контейнеров в куб? Сейчас есть довольно много вариантов:
docker + buildkit
buildah
kaniko

Хорошая ли практика использовать buildpacks/kpack, s2i?

Тектон это уже хорошо или ещё плохо? В тектон каталоге видно, что он умеет работать с каждым + argocd, что радует.
юзаю werf, но он пока требует docker. Обещают реализовать сборку без него, как в kaniko, buildah.
Есть еще makisu, bazel и от opensift свое что-то.
Tekton же CI просто, оно скорее всего внутри будет использовать тот же самый kaniko и подобное.
источник

GG

George Gaál in Kubernetes — русскоговорящее сообщество
buildpacks есть
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
Я понимаю, что эта тема чутка отходит от куба, тем не менее результат должен быть - "апка в кубе"...от того и пытаюсь найти решение, чтобы дэвы не парились с докерафайлами и смотрю в сторону buildpacks/s2i и тд
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
Канико насколько я понимаю до сих пор в рутлесс не умеет
источник

GG

George Gaál in Kubernetes — русскоговорящее сообщество
Boriss Borisovich
Я понимаю, что эта тема чутка отходит от куба, тем не менее результат должен быть - "апка в кубе"...от того и пытаюсь найти решение, чтобы дэвы не парились с докерафайлами и смотрю в сторону buildpacks/s2i и тд
+++
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
В кубсфере s2i оператор кстати используется и ты можешь сам тимплейты создавать под нужны код language...от того у тебя выходит удобная консоль, в каком-то плане даже удобнее шифта...и дэвы могут себе легко создать конт и пихнуть в куб.
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
+ у тебя ваниль и не нужно держать пожирающий всё и вся шифт )
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
с другой стороны, поэтому и спрашиваю здесь, норм ли это практика юзать такие тулзы..
источник

GG

George Gaál in Kubernetes — русскоговорящее сообщество
ну мне s2i не нра
источник

GG

George Gaál in Kubernetes — русскоговорящее сообщество
такое ощущение, что он непредсказуем
источник

A

Alex in Kubernetes — русскоговорящее сообщество
George Gaál
такое ощущение, что он непредсказуем
мне он концептуально не нравится
источник

A

Alex in Kubernetes — русскоговорящее сообщество
Boriss Borisovich
Канико насколько я понимаю до сих пор в рутлесс не умеет
рутлесс эт как?
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
Alex
рутлесс эт как?
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Рустамыч
Всем привет. Кто нибудь может подсказать как избежать 502 на ingress? Появляется когда я убиваю POD. Работает в 2 репликах.
Как я понял redinessProbe у тебя уж есть?
Там смотри помимо redinessProbe есть какой нюанс.

Когда ты или любой другой контроллер удаляет pod в кластере, k8s помечает его на удаление и одновременно начинает процедуру удаления пода и удаление его из endpoints сервисов, это видят другие контроллеры и запускают свои процедуры независимо друг от друга. При этом надо понимать, что удаление ip из endpoints не означает, что kube-proxy моментально почистит его на хостах, а ingress-controller моментально его удалит из upstream'ов

То есть это делают разные контроллеры, и делают это параллельно.
1) Удаление ip из endpoints (забыл какой контроллер это делает)
2) kube-proxy начинает чистить iptables/ipvs от ip пода на всех нодах, только когда увидит что он пропал из endpoints
3) ingress-controller удаляет ip пода из upstream, только когда увидит что он пропал из endpoints
4) kubelet начниет процедуру удаленя пода - кидает TERM контейнерам и тому подобное

И даже если у тебя есть redinessProbe и твое приложение умеет в graceful shutdown. Ты можешь словить такую ситуацию:

Предположем что твое приложение умеет в graceful. Оно получает SIGTERM, отказывается принимать новые запросы и шлет их лесом, завершает текущие запросы и выключается. Но когда приложение уже отказалось принимать новые запросы, из ipvs/iptables правил и upstream'ов оно могло еще не успеть удалится, поэтому нет гарантии что в этот момент к нему не прилетят новые запросы. Тем более если твое приложение не умеет в graceful shutdown, то запросы просто уйдут в никуда.

Для решения этой проблемы ты можешь добавить, в preStop хук контейнера небольшой sleep, чтобы на всякий случай не много подождать когда kube-proxy почистит правила iptables/ipvs на хостах.

Пример:
lifecycle:
           preStop:
             exec:
               command:
                 - sh
                 - -c
                 - 'sleep 10'


Эта увиличит шанс того, что когда твое приложение получит SIGTERM, kube-proxy успеет все почистить на нодах. А твое приложение будет успешно принимать запросы пока это не произошло, и только через 10 секунд получит SIGTERM, когда уже скорее всего будет выкинуто из правил iptables/ipvs и upstream'ов ingress-controller

Мог конечно просто написать, добавь sleep в preStop. Но так надеюсь понятней зачем это делать.
источник

A

Alex in Kubernetes — русскоговорящее сообщество
а, понял
источник

Р

Рустамыч in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
Как я понял redinessProbe у тебя уж есть?
Там смотри помимо redinessProbe есть какой нюанс.

Когда ты или любой другой контроллер удаляет pod в кластере, k8s помечает его на удаление и одновременно начинает процедуру удаления пода и удаление его из endpoints сервисов, это видят другие контроллеры и запускают свои процедуры независимо друг от друга. При этом надо понимать, что удаление ip из endpoints не означает, что kube-proxy моментально почистит его на хостах, а ingress-controller моментально его удалит из upstream'ов

То есть это делают разные контроллеры, и делают это параллельно.
1) Удаление ip из endpoints (забыл какой контроллер это делает)
2) kube-proxy начинает чистить iptables/ipvs от ip пода на всех нодах, только когда увидит что он пропал из endpoints
3) ingress-controller удаляет ip пода из upstream, только когда увидит что он пропал из endpoints
4) kubelet начниет процедуру удаленя пода - кидает TERM контейнерам и тому подобное

И даже если у тебя есть redinessProbe и твое приложение умеет в graceful shutdown. Ты можешь словить такую ситуацию:

Предположем что твое приложение умеет в graceful. Оно получает SIGTERM, отказывается принимать новые запросы и шлет их лесом, завершает текущие запросы и выключается. Но когда приложение уже отказалось принимать новые запросы, из ipvs/iptables правил и upstream'ов оно могло еще не успеть удалится, поэтому нет гарантии что в этот момент к нему не прилетят новые запросы. Тем более если твое приложение не умеет в graceful shutdown, то запросы просто уйдут в никуда.

Для решения этой проблемы ты можешь добавить, в preStop хук контейнера небольшой sleep, чтобы на всякий случай не много подождать когда kube-proxy почистит правила iptables/ipvs на хостах.

Пример:
lifecycle:
           preStop:
             exec:
               command:
                 - sh
                 - -c
                 - 'sleep 10'


Эта увиличит шанс того, что когда твое приложение получит SIGTERM, kube-proxy успеет все почистить на нодах. А твое приложение будет успешно принимать запросы пока это не произошло, и только через 10 секунд получит SIGTERM, когда уже скорее всего будет выкинуто из правил iptables/ipvs и upstream'ов ingress-controller

Мог конечно просто написать, добавь sleep в preStop. Но так надеюсь понятней зачем это делать.
спасибо, буду пробовать
источник

SM

Sergey Monakhov in Kubernetes — русскоговорящее сообщество
Boriss Borisovich
Я понимаю, что эта тема чутка отходит от куба, тем не менее результат должен быть - "апка в кубе"...от того и пытаюсь найти решение, чтобы дэвы не парились с докерафайлами и смотрю в сторону buildpacks/s2i и тд
У вас какой то комбайн из языков?
источник

BB

Boriss Borisovich in Kubernetes — русскоговорящее сообщество
Sergey Monakhov
У вас какой то комбайн из языков?
нет, не особо
источник