Anton
подскажите как лучше оформить зависимости между helm-чартами. Есть 10 чартов, из них 4 это базы, они долго поднимаются, надо чтобы чарты с приложениями начинали подниматься только после того, как поды с базами станут ready.
ты можешь в чартах описать зависимость и тогда один чарт потянет все что ему нужно. но ты не можешь сказать "запусти под после запуска базы". зато можешь entrypoint или init container намутить, который будет тыкать в service дб. как только оно начнет что то возвращать - завершать инит с успехом и запускать твой апп
Alexander N.
про init знаю, думал может появились какие-то менее костыльные варианты )
Andrey
Нет. Никакого "умного" деплоя Helm не умеет.
Alexander N.
ок, спасибо!
Anton
в каком то смысле ваш апп будет дожидаться появления зависимостей, если например падает при недоступности бд. он же будет перезапускаться =)
Denis
Всем првиет! Подскажите в k8s service можно задать диапозон портов?
Rainbow
Что поделать, readme часть кода же
смотреть, что по факту image не поменялся. Там же есть sha256. Может он, ещё не читал. 100% можно детектить, что у контейнера отличаются только меткой.
Rainbow
там же собирается по слоям, у слоя md5 свой или ещё какой хэш. Хэши последних слоёв равны - не поменялся.
Rainbow
docker pull же не перекачивает слои, если они одинаковые у разных тегов одного image
Andor
даже если они у разных тегов разных образов
Andor
"слои" и "образы" это "многие ко многим"
Rainbow
да не, docker pull же ничего не качает, если контент не менялся
Rainbow
docker pull ничего не качает, deployment не должен обновлятся.
Andor
если тег поменялся, то обновится, даже если не качал ничего
Rainbow
поменять тег - слой не будет выкачиваться
Rainbow
и не пушит так же
Rainbow
или я прям совсем сейчас себе шаблон порву, если не так.
Andor
порвёшь
Andor
выкачиваться может и не будет, но тегаться будет
Rainbow
docker pull some:label1 docker tag -t some:label2 some:label1 docker push some:label2
Rainbow
docker pull some:label2 ничего не качнет
Rainbow
docker build ничего не пересобёрет
Andor
потому что нельзя "скачать тег"
Andor
можно "узнать sha слоёв по тегу и скачать их"
Rainbow
Я могу путать понятия, с другой стороны. Если работает some:label1 а дальше docker pull some:label2 ничего нового не выкачивает то deployment не нужно запускать, ничего не поменялось.
Rainbow
docker pull*
Vadim
потому что нельзя "скачать тег"
кроме слоев есть еще манифест, в нем хранятся теги. Меняются теги - меняется хэш манифеста
Rainbow
Ок, почитаю про манифест, что там может быть такого, что можно сделать так, чтобы одинаковые слои работали по разному.
Дмитрий
Дмитрий
Ставлю миникуб)
Дмитрий
Винда просто умерла )
Vadim
ты про манифесты кубера?
https://docs.docker.com/registry/spec/manifest-v2-2/
Andor
ну речь вроде о том что при ретеге одного и того же имджа у тебя не будет ничего качаться туда-сюда
Rainbow
У меня есть 2 тега 027cb8a34f212354af11dfc548d339e3a7ddf063 dcddfdc066d02ac80341de3e044918d49df5622c Они собраны на 100% одинаково. docker build просто берёт все их кеша слоёв. Есть же способ это задетектить, чтобы не перезапускать deployment просто так. Я про это начал говорить, в теме не разбирался пока, руки не доходят.
Vadim
ну можно ручками выдергивать какой хэш у последнего слоя, конечно
Andor
это не теги, это хеши
Rainbow
docker build -t service:dcddfdc066d02ac80341de3e044918d49df5622c .
Rainbow
это теги
Rainbow
$CI_COMMIT_SHA
Rainbow
И тут косяк только один, левые комиты заставляют deployment обновиться, хотя не нужно.
Andor
а это проблема?
Rainbow
Ну, нам уже пол года пофиг. А вообще безполезное действие
Rainbow
Я написал, что это если с этим нет проблем, то наоборот круто. Это тест, что приложение не валится от рандомных перезапусков =)
Andor
думаю этим должен CI заниматься, а не докер и не кубер
bebebe
И тут косяк только один, левые комиты заставляют deployment обновиться, хотя не нужно.
образы тегируются git коммитами (хешами) в том месте, где идет deploy сервиса в k8s по триггеру, можно выдирать метку образа, через git смотреть что поменялось, и принимать решение. деплоить или нет
Vadim
общепринята практика делать [ci skip] в хедлайне коммита, например
Andor
точнее CD
Rainbow
Зачем мне думать, что поменялось, если это знает докер.
bebebe
Я думаю, что можно опираться докеровское сравнение слоёв, потому что он уже это умеет. Пока не дошел ещё.
это сложнее, проще посмотреть что поменялось в деревере git'a, какие файлы, и напримерт создать в репозитории .deployignore куда вписать какой-нибудь /README.md /doc и прочее
Rainbow
репа поменялась, а docker build ничего не сделал, deployment не нужно перерезапускать
Rainbow
readme.md поменялось, оно в dockerignore
Rainbow
сервис не поменялся, но тег меняется, потому что новый комит, а deployment смотрит на image, сменился, перезапускаю.
Rainbow
Это МИНИ проблема, просто разговор зашел про это.
Andor
да это проблема того же типа что и "запускать тесты только если код поменялся, а не readme"
Andor
она не про докер и не про кубер
Rainbow
Ну docker может на 100% сказать, что что-то поменялось, мне для этого не нужно ничего делать. Это отличие от тестов.
Rainbow
Для тестов ещё нужно пойти напрячься, чтобы граф зависимостей собрать.
Andor
не может
Andor
докер оперирует уже артефактами сборки, а не исходными данными
Rainbow
если поменять файл, который в dockerignore, то он будет поновой все собирать? Не будет.
Rainbow
если поменять файлы, которые не попадают в image вообще, он будет пересобирать? Не будет, все из кэша
Rainbow
если у меня src docs и docs не попадает в image, просто не хотелось бы перезапускать deployment из-за комита в docs, который поменял тег.
Rainbow
это скорее всего 1 if, не более.
Andor
ну не собирай образ просто
Andor
то есть в твоём случае не тегай
Rainbow
docker build -t service:$SHA_COMMIT_SHA . выполняется всегда, после этого можно сказать, что image поменялся или нет.
Rainbow
Да не хочу я делать работу, которуюделает docker build. Уже все готово же.
Andor
ну сделай чтобы не выполнялось
Rainbow
ну так после docker build нужно смотреть,что текущий image не отличается от работающего и скипать, я про это говорю 20 минут уже)
Andor
при чём тут образ вообще?
Andrey
Да не хочу я делать работу, которуюделает docker build. Уже все готово же.
нет, не готово. У тебя одна версия для всего, что в репозитории. Если ты хочешь, чтоб у тебя образы докера соответствовали версии софта, а не репозитория, то тебе нужно использовать версию софта в теге образа.
Rainbow
docker build не собирает ничего, если не было правок. Следовательно не нужно перезапускать deployment. Я только про это.
Rainbow
docker build бесплатный если не было правок, даже если другой тег.
Rainbow
kubectl apply напряжный, если поменялся тег и 50 реплик
Andor
ну раздели build и tag