Sergey
сощдали вы тыщу сервисов - получили тыщу кластерIP
Sergey
с правилами в айпитеблс
Sergey
плюс к нему srv запись привязывается в skydns
Sergey
я лично жду istio пока созреет
Anatoliy
Блин, ну вроде все подключил, дженкинс вроде кубер видит. Но пр ипопытке собрать проект: "ERROR: Node is not a Kubernetes node: " Я так понимаю с нодой кубера он все же не подружился( Сталкивался кто?
Anatoliy
Гугл на эту ошибку вообще молчит. Только исходники показывает и всё
Anatoliy
Хотя судя по всему там нода не с кубером свзана, это имя ноды которео в node('') указывается. Вижу что даже контейнер пошел создаваться. Но судя по всему опять как-то не так( Уже 7 подов создалось и ни один норм не завершился. щас еще и вырубать их придется кажется...
Anatoliy
А может кто посоветовать что надо сделать что бы поды в которых всё собиралось потом удалялись?
Anonymous
ну самое первое, это нужно собрать имедж. Для этого в репозиторий с проектом(сервисом) можно положить Dockerfile, Makefile, т.е. все необходимое для сборки. На этом же этапе можно делать и тесты, вплоть до интеграционных. Т.е. подняли необходимые сайд-контейнеры, развернули структуру базы, прогнали тесты, если все ок - тогда собранный имедж уже пушим в реджистри. (вариантов много, от своего до docherhub и bintray). Собирать тоже можно любым CI, хоть дженкинсом, хоть travis-ci. Здесь имхо, главное чтобы сборка была описана в Makefile, тогда переход между любой системой CI достаточно безболезнен. После того как у нас где то есть имедж в реджистри, его можно деплоить в различные среды. Здесь как удобно, кто-то использует helm, для самых простых кейсов и kubectl напрямую подойдет. У меня исторически используется ansible, поэтому в репозитории лежат темплейты сервисов. деплой через ансибл - это просто вызов плейбука в духе ansible-playbook -i environments/dev echoserver.yml Но если вы малознакомы с ансиблом, я бы посоветовал начать просто с plain kubectl манифестов, дабы не забивать мозг лишним.
Почему вы берете именно мейкфайл? Почему бы не написать просто shell скрипт? В моем понимании мейкфайл нужен когда у вас предусмотрено много разных действий и между ними существуют зависимости
Anatoliy
Почему вы берете именно мейкфайл? Почему бы не написать просто shell скрипт? В моем понимании мейкфайл нужен когда у вас предусмотрено много разных действий и между ними существуют зависимости
потому что makefile можно делать в самом репозитории, а если писать скрипты - нужно будет лезть в систему сборки для его правки. Или вы имеете в виду написать скрипт в самом репозитории?
Serega
Блин, ну вроде все подключил, дженкинс вроде кубер видит. Но пр ипопытке собрать проект: "ERROR: Node is not a Kubernetes node: " Я так понимаю с нодой кубера он все же не подружился( Сталкивался кто?
вам стоит определиться с конечными целями. В моем понимании кубер больше про долгоиграющие приложения (деплоймент, скалирование, менежмент и т.д.). То что у дженкинса существует плугин, котороый умеет использовать кубер как среду сборки - еще вовсе не значит что так имеет смысл делать. Вообщем это явно на любителя.
Anonymous
Воркеры то можно и в кубере поднять
Anonymous
Не проблема
Alex
и да плагин не использует кубер как среду сборки. он просто позволяет работать с подами над kubectl нативней с точки зрения дженкинса. чисто груви, никакого баша
Serega
нет проблем 😉 мне тоже нравится собирать дженкинсом в докере. Но есть предположение что у автора вопроса пока что каша в понимании всей цепочки. Поэтому мой вопрос был в том, нужно ли это именно ему.
Anton
заметил в helm chart в prometheus интересный контейнер в деплойменте https://github.com/jimmidyson/configmap-reload который релодит prometheus когда изменяется конфигмап вызовом url. я так понимаю pid namespace в pod не шарится и нет возможности отправлять сигнал из одного контейнера в другой. так хотелось бы просто релодить приложение при изменении конфигурации, вместо того чтобы тригерить rollout update.
Anton
какие есть костыли для обхода? если приложение ждет сигнал для релода конфигурации
Serega
я в джобу выкатки прома добавил просто вызов курл для релоада прома
Anatoliy
нет проблем 😉 мне тоже нравится собирать дженкинсом в докере. Но есть предположение что у автора вопроса пока что каша в понимании всей цепочки. Поэтому мой вопрос был в том, нужно ли это именно ему.
да с теми вопросами я уже разобрался. меня сейчас волнует как деплоить в сам кубер. Вот я собрал приложение в поде, сейчас я так понимаю мне надо сделать образ и потом выкинуть его на реджистри, а дальше - уже сдеплоить. И вот именно последние 3 шага(образ, реджистри, деплой) у меня пока проблемные. Собрать я так понимаю можно прилинковав в контейнер докер и с него собрать образ, спушить скорее всего тоже достаточно просто. А вот как сдеплоить - у меня пока никаких мыслей нет(
Vadim
Всем привет. А что сделать чтобы в deis (при bare metal инсталяции) deis-router получил внешний ip ? У меня пока так: NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE deis deis-router LoadBalancer 10.110.160.169 <pending> 80:30219/TCP,443:32497/TCP,2222:32246/TCP,9090:30516/TCP 56d
Serega
да с теми вопросами я уже разобрался. меня сейчас волнует как деплоить в сам кубер. Вот я собрал приложение в поде, сейчас я так понимаю мне надо сделать образ и потом выкинуть его на реджистри, а дальше - уже сдеплоить. И вот именно последние 3 шага(образ, реджистри, деплой) у меня пока проблемные. Собрать я так понимаю можно прилинковав в контейнер докер и с него собрать образ, спушить скорее всего тоже достаточно просто. А вот как сдеплоить - у меня пока никаких мыслей нет(
пока вам непонятна вся цепочка, старайтесь не использовать лишние компоненты (KISS). В вашем случае jenkins (пока) вообще не нужен. Собрать и упаковать приложение в докер контейнер можно даже локально. И также локально в докере запустить, убедиться что все работает. Дальше (тоже локально) можно запушить его в реджистри. Зарегистриуйте себе безоплатный аккаунт на докерхаб и в него запушите. После этого задеплоить его в кубере можно даже без каких-либо манифестов. Просто через kubectl run --image=mydockerhub/my-awesome-app my-awesome-app --port=8080
Serega
CI, автоматизация и т.д. начинаются тогда, когда вы понимаете что конкретно вам нужно сделать.
Anton
я в джобу выкатки прома добавил просто вызов курл для релоада прома
нашелся такой проект, по inotify отслеживает что логи ротировались и отправлет сигнал процессу https://github.com/occrp/watchful-nginx на nginx & logrotate в разных контейнерах ориентирован. но идею можно адаптировать и для отслеживания состояния конфигов и релода. общий pid namespace пригодился бы.
Anatoliy
А что конкретно нужно - я понимаю. И даже примерно понимаю что зачем и почему. Но как сделать некоторые из необходимых шагов - тут да, путаница
Anton
как стригерить rollout update понятно
Anton
хотелось бы иметь возможность срелодить свой сервис если что то поменялось
Serega
А что конкретно нужно - я понимаю. И даже примерно понимаю что зачем и почему. Но как сделать некоторые из необходимых шагов - тут да, путаница
я же вам и говорю, чтобы не было путаницы нужно сначала руками сделать, разобраться, а потом настроить CI и полную схему для остальных ваших 100500 контейнеров. Так сказать сделать прототип.
Anatoliy
Ты немного путаешь понятия, сделать контейнер, сделать под и сделать деплоймент.
Контейнер мы делаем докером и пушим в реджистри, под содержит контейнер, деплоймент стартует под и следит за их количеством и работой. при этом при обновлении деплоймент тоже должен быть обновлен что бы обновить поды
Anatoliy
я не прав?
Shamil
Все верно.
Михаил
А что мешает деплоить helm`ом?
Shamil
Давай попробуем метод Сократа
Shamil
@Visteras что ты хочешь делать дженкинсом?
Anatoliy
@Visteras что ты хочешь делать дженкинсом?
1) Собирать проект 2) тестировать 3) пушить в реджистри 4) деплоить из реджистри в кубер
Shamil
@Visteras что по-твоему "Собирать проект"
Anatoliy
1) берем из репы сам проект 2) тянем зависимости 3) выполняем(в моем случае go build -i -o ... ) 4) перетягиваем полученный файл в другую директорию и там уже его надо дальше упаковывать в образ докером и пушить в реджистри
Anatoliy
@youngbluesman выше написал
Anton
ага, нагуглил все решенные тикеты. с 1.13+ можно включать
Anton
хочу по изменению конфига сигнал процессу в другой контейнер отправить
G72K
Посмотри в сторону helm для деплоя и обновления, 4й пункт сведешь к одной строке "helm upgrade $PROJECT_NAME".
helm нерабочее глючное говно, где сами разработчики не понимают что пишут
Shamil
То есть ты написал вначале 2) тестирование 3) пушим в реджистри, а сейчас сразу после сборки хочешь пушить. Куда?
G72K
Недавно сломали "ручной" rollback (когда просто деплоим предыдущую версию) заразы, при этом чиня фундаментальный баг дебильной заплаткой. И баг не починили и rollback сломали.
Shamil
Да, там у тебя еще есть только go build... а контейнер ты будешь собирать?
Anton
Шарятся, но,выключили по дефолту ибо овер дофига контейнеров хотят быть pid1. Можно включить обратно флагом в kubelet
действительно, в kubelet опция: --docker-disable-shared-pid The Container Runtime Interface (CRI) defaults to using a shared PID namespace for containers in a pod when running with Docker 1.13.1 or higher. Setting this flag reverts to the previous behavior of isolated PID namespaces. This ability will be removed in a future Kubernetes release. (default true) только нафига она глобальная. или на уровне подов нужно в spec добавлять чтото?
G72K
Зато 100500 ответов позакрывали, мол все починено. Я сдался и херачу helm template | kubectl apply -f - —prune
Anton
лан, сам посмотрю =)
Anton
Anatoliy
Ну вот сборка да, а тестирование куда пропало?
ок, пропустил пункт, тестирование после сборки, потом сборка образа если все успешно, пуш в локальный реджистри и деплой на кубер
Anatoliy
Да, там у тебя еще есть только go build... а контейнер ты будешь собирать?
после go build буду собирать контейнеры. что бы исходников в контейнере не было. ложу только готовое приложение в alpine и там его сразу запускаю. всё. ну еще конфиг будет но это уже не проблема
Anatoliy
Погоди, ты торопишься, сборка контейнера, что в себя включает?
положить в образ готовое приложение и конфиг
Shamil
положить в образ готовое приложение и конфиг
Все правильно, дженкинс что делает здесь?
Shamil
Запускает билд go
Shamil
Дальше запускает Dockerfile так?
Shamil
То есть docker build
Anatoliy
Дальше запускает Dockerfile так?
да, но как его запустить я пока не понял. думаю надо слинковать как-то докер на хосте и докер в контейнере в котором это будет происходить
Shamil
Нет докера в контейнере.
Shamil
То есть ты не можешь понять, как запускать docker build
Anatoliy
Как запускать докер билд мне понятно, мне не понятно как сделать что бы он взялся в контейнере
Shamil
Где, мол, он будет контейнер для билда поднимать, в этом твой вопрос?
Anatoliy
и аналогично с деплоем кубера, там нужен будет kubectl и config. и я не понимаю как его пихнуть в контейнер
Ivan
собери контейнер для билда и деплоя
Ivan
или устанавливай каждый раз
Shamil
Не надо ничего никуда пихать, все уже запихнули до тебя смотри docker-build-step
Anatoliy
Хорошо, спасибо гляну, на это пока не натыкался