Дмитрий Харитонов
как в мане написано kubectl set env RESOURCE/NAME KEY_1=VAL_1
Mikhail
за imagePullPolicy большое спасибо а зачем устанавливаете в окружение REDEPLOY_VARIABLE?
У меня был расчёт на то, что если файл деплоймента поменяется, то k8s стартанёт процесс редеплоинга. Но как правильно заметил Дмитрий, переменную можно менять не через хак файла, а через сеттинг переменной напрямую. Название переменной же выбрано в произвольном порядке
Dmitrii
У меня был расчёт на то, что если файл деплоймента поменяется, то k8s стартанёт процесс редеплоинга. Но как правильно заметил Дмитрий, переменную можно менять не через хак файла, а через сеттинг переменной напрямую. Название переменной же выбрано в произвольном порядке
Понятно. Хочу уточнить нюанс: если imagePullPolicy установлен в always — это ведь не значит, что кубер будет сам периодически перевыкачивать latest, да? Это значит, что после kubectl image set deployments/deployment-name container-name=my-registry/docker-namespace/docker-repository, он выкачеет новый latest, так ведь?
Дмитрий Харитонов
В противном случае просто запустится с тем что уже есть
Дмитрий Харитонов
Да, но когда?
при запуске деплоймента или изменении в нём
Dmitrii
Хм. Я запускал до сих пор деплоймент посредством kubectl image set...
Dmitrii
Ок, пойду читать доки, как правильно. Спасибо всем большое.
Дмитрий Харитонов
Хм. Я запускал до сих пор деплоймент посредством kubectl image set...
да, kubectl set image менят поле image в деплойменте, по этому он и перезапускается. Точно так же его можно менять через kubectl edit интерактивно, через kubectl patch ... через kubectl apply -f ... и ещё не знаю сколько способов, но суть у них одна, внесение изменений в дейплоймент.
Дмитрий Харитонов
да
Dmitrii
И это запустит деплоймент, даже если в файле нет изменений, но при этом будет проверено, нету ли свежего :latest-образа?
Дмитрий Харитонов
нет, если изменений небыло то не запустит
Dmitrii
Ясно, спасибо.
Mikhail
нет, если изменений небыло то не запустит
По этой причине я и ставил там $DATE изменяемый
Dmitrii
Короче, yaml деплоймента надо генерировать.
Mikhail
как в мане написано kubectl set env RESOURCE/NAME KEY_1=VAL_1
Если цель только перевыложить latest - лучше так
Dmitrii
Если цель только перевыложить latest - лучше так
Во. Это мне вполне подойдёт. Спасибо.
Dmitrii
Эгегей, работает! :) $ kubectl set env deployments/document-parser-deployment DATE=$(date +%F-%T) deployment.apps "document-parser-deployment" env updated
Andor
Перестаньте использовать latest и всё будет ок
Дмитрий Харитонов
как ещё использовать bleeding-edge релизы?)
Andor
Стреляя себе в ногу или без?
Andor
Если второе, то через CD
Дмитрий Харитонов
У меня, например, для ветки stage используется такой способ для выкатки на тестирование автоматически. только там не :latest, а :stage, но суть та же.
Дмитрий Харитонов
ага
Andor
Ну в смысле вешай там теги и катай на стейжинг автомагически
Дмитрий Харитонов
Ну в смысле вешай там теги и катай на стейжинг автомагически
ну а какие там теги вешать? по пушу с тегом в гит собирается и выкатывается в прод. Вешать для стэйджа что-то из тегов пайплайна какой смысл? всё равно не возникнет задачи откатить стеджинг на какую-то другую версию. Там типа выкатили в стейджинг, протестили, если норм, запушили с тего и прод. В проде уже контейнеры с нормальными тегами. При этом в CI удобно использовать одну переменную $CI_COMMIT_REF_NAME которая гитовый тэг или имя ветки.
Ivan
всегда можно использовать sha коммита
Дмитрий Харитонов
Можно хоть n+1, я же говорю, нету смысла.
Dmytro
смысл самый прямой - единообразно деплоится и прод и другие энвы
Dmytro
и понятно что же задеплоено сейчас в данный момент, потому что ну вижу я в описании пода :latest тег и что?
Dmytro
никакой возможности понять что же в данный момент внутри контейнера нет
Dmytro
короче latest для контейнеров с приложениями это бред
Dmytro
(ну и все аналоги :stable, :edge :staging и прочее)
Andor
технически версию можно в аннотации сунуть
Andor
но проще лейблом имжа
Dmytro
или в аннотациях чего?
Denis
Мужики, подскажите а с Calico в statefullSet поды могут видеть друг друга по имени сервиса ?
Ilya
админы, шо за?
Dmytro
если я правильно понял вопрос - с любой сетью должны видеть по FQDN пода (в которой есть имя headless сервиса)
Denis
если я правильно понял вопрос - с любой сетью должны видеть по FQDN пода (в которой есть имя headless сервиса)
Да решил уточнить. Просто странно. В моем кластере этого не происходит
Mikhail
Dmytro
https://kubernetes.io/blog/2018/05/24/kubernetes-containerd-integration-goes-ga/ вроде не кидал еще никто
Dmytro
так что уже и докер на нодах не нужен
Dmytro
Да решил уточнить. Просто странно. В моем кластере этого не происходит
а точно есть headless service и вы пишите правильно хостнейм? И что значит "видеть"? Пинговаться поды не будут но по телнету можно зайти на заэкспозженный порт по FQDN и порту
Andor
или в аннотациях чего?
В аннотациях деплоймента можно добавить версию, но смысла не очень
Andor
/report
Dmytro
В аннотациях деплоймента можно добавить версию, но смысла не очень
так это ж ничего не дает, никакой гарантии что то что написано в аннотации и то скачается из реджистри по latest тегу как-то связано
Andor
Конечно
Andor
Про containerd интересно
Andor
А чо тогда с cri-o будет
Andor
А, кажется это оно и есть по сути
Dmytro
я так понял что CRI это интерфейс/стандарт а containerd - одна из реализаций (наверное пока других и нет)
Dmytro
по сути как они сделали сначала с нетворк а потом с девайс плагинами
Andor
Ага, похоже на то
Andor
А крио был типа пруф оф концепт
Lex
cri-o емнип независимый проект
Denis
а точно есть headless service и вы пишите правильно хостнейм? И что значит "видеть"? Пинговаться поды не будут но по телнету можно зайти на заэкспозженный порт по FQDN и порту
Хостнейм точно пишу правильно. Ну покрайней мере hostname -f на самом поде врать не будет. Видеть, имеется в виду взаимодействовать и обмениватся информацией к примеру. У меня обычный сервис по типу ClusterIP. Причем попробовал на нашем тестовом кластере это все дело развернуть, который деплоил не я. Там все завелось. Но какой сетевой плагин я не знаю.
Denis
host <service dns name> В контейнере делали?
Да. Свой DNS резолвит ,а вот соседние не хочет
Andor
cri-o емнип независимый проект
то-то он в kubernetes-incubator/cri-o обитает
Lex
cri это интерфейс, протокол
Lex
cri-o имплементация
Lex
Но Я могу ошибаться
Andor
всё так
Dmytro
кстати, если количество нод динамически не меняется то можно вот такой скрипт юзать (я для монги юзаю) ## ## Generate statefulset peer hostnames in the form $(statefulset name)-$(ordinal) ## and from host names and knowing service name generate pod dns names. ## I.e. for replicas=3 pod hostnames will be: ## $(statefulset name)-0 ## $(statefulset name)-1 ## $(statefulset name)-2 ## and pod dns names will be: ## $(statefulset name)-0.$(service name).$(namespace name).svc.cluster.local ## $(statefulset name)-1.$(service name).$(namespace name).svc.cluster.local ## $(statefulset name)-2.$(service name).$(namespace name).svc.cluster.local ## ## Links: ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identity ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantee ## https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#srv-records ## function get_peers() { local stateful_set_name=${1:?} local service_name=${2:?} local replicas=${3:?} local my_dns_name=${4:?} local namespace_name=${5:?} local peers_dns_names="" for i in $(seq 0 $(($replicas - 1))); do local peers_dns_name="$stateful_set_name-$i.$service_name.$namespace_name.svc.cluster.local" if [[ "$peers_dns_name" != "$my_dns_name" ]]; then peers_dns_names="$peers_dns_names $peers_dns_name" fi done echo "$peers_dns_names" }
вот нашел в хистори какие имена у подов стейтфулсета
Dmytro
## and pod dns names will be: ## $(statefulset name)-0.$(service name).$(namespace name).svc.cluster.local ## $(statefulset name)-1.$(service name).$(namespace name).svc.cluster.local ## $(statefulset name)-2.$(service name).$(namespace name).svc.cluster.local
Dmytro
у меня тоже калико сеть - работает
Dmytro
а что видно в endopints у этого headless service если сделать describe?
Dmytro
кстати, а это https://mcs.mail.ru/containers было или нет?
Dmytro
> Надежные кластеры Kubernetes в облаке от Mail.Ru Cloud Solutions для высоконагруженных сайтов и приложений
Mikhail
Было дело. Если есть желание почитать про то, как его полили говном, можно проскролить чуть выше
Dmytro
ясно, я глянул калькулятор - как-то дорого выходит
Dmytro
в vscale сильно дешевле будет, понятно что селфхостед