Paruyr
Имеется набор доменов, нужно что бы по всем ним был редирект на основной
Как настроить Ingress?
Paruyr
Я пока вижу вариант добавить еще контейнер в под, который редиректит на нужный хост
Сейчас у меня костыльное решение - Все запросы, на которые не найдены правила идут на сервис-редиректор, в котором зашит перечень доменов (caddy, лапша в caddyfile)
Валентин
Paruyr
https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite
Типа мне нужно сделать ингресы отдельно для каждого домена ?
Paruyr
Я хотел все в одном ингресе описать)
Paruyr
Взял жопу в руки, изучил кубер
оказывается он сам по себе простой и очень крутой
Валентин
Вообщем, я согласен, что все должно накатываться из пайплайна, что база etcd должна быть отделена и так далее. Но бекап я делал и буду делать, потому что мне так намного спокойнее.
Так а хоть раз была ситуация, что кто-то зачем-то в etcd заходил? Опять же вопрос проверки разворачивания бекапа непрост - надо или тестировать вот прям сразу же после создания, чтоб воркеры смогли скачать все образы и т.д., либо получается тестирование сферического коня в вакууме. Тогда как cd пайплайны тестируются при каждом использовании. Так что бекапу etcd я лично не доверяю, а вот скриптам развертывания кластера с нуля (т.к стейджи им пересоздаю регулярно) и пайпам, которые в кластер все выкатывают - доверяю. И если че, то новый мастер, в него все деплои дальше воркеров по-очереди к нему переподключить имхо намного надежнее
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
Не использовать PV?)
Andrey
Все забывают про сайд-эффекты, которые неизбежно возникают, когда разные контроллеры в кубе взаимодействуют с окружающим миром. Видимо, реальных проблем у них ни разу ещё не возникало, а когда отвалится 40 EBS и 21 LoadBalancer в AWS, так посмотрю я на их развёртывание " с нуля" и скорость этого процесса.
𝚔𝚟𝚊𝚙𝚜
Думаю для такого рода ресурсов, можно делать
kubectl get pv -o json > pv-backup.jsonили что-то вроде того
𝚔𝚟𝚊𝚙𝚜
и коммитить в git!
𝚔𝚟𝚊𝚙𝚜
ну и сервисы типа LoadBalancer заодно, да
𝚔𝚟𝚊𝚙𝚜
@zuzzas а вы хелмом деплоите?
Andrey
Вот только потом тебе нужно будем размышлять о том, в каком порядке всё это восстанавливать. А ещё неизбежно возникнут проблемы с metadata и status field'ами, которые Kubernetes по-разному внутри использует, а ещё что-то нарушено в порядке Custom Resources будет. И вместо всего этого *тупого* головняка, может, просто etcd бэкап снять?
Andrey
@zuzzas а вы хелмом деплоите?
Да. И stateless мы kind of легко сможем парой кнопок в GitLab развернуть обратно, но что делать с кучей хитростей внутри Kubernetes... Нет, даже думать не хочу, бэкапим etcd везде.
𝚔𝚟𝚊𝚙𝚜
George
George
George
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
PV/PVC нормально бэкапятся описанным образом, сервисы типа LoadBalancer - не уверен, но там тоже вроде можно айпишник запросить через spec
Vadim
Loadbalancer как минимум на AWS нормально бэкапятся
Dmitry
Интересный вопрос. А если еще и кластер большой с кучей неймспейсов, ролей, биндингов, контроллеров и т.д. То нужно огромную кучу пайплайнов выката запустить в нужном порядке. Бэкапить pv и loadbalaner'ы можно, но если поспрашивать, то кто это реально делает?
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
Кластер у нас большой и с кучей неймспейсов, благо PV не namespaced ресурс. А если убрать uid из claimRef, то теоретически и PVC можно не бэкапить, сбиндится нормально.
𝚔𝚟𝚊𝚙𝚜
по имени и неймспейсу
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
там все айпишники, бэкапится он норм, но как восстанавливать?
Solyar
Какие вы тут интересные темы поднимаете субботним днём
𝚔𝚟𝚊𝚙𝚜
+
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
В основной всё красивенько в jsonnet описанно, не хочется её засорять
𝚔𝚟𝚊𝚙𝚜
Dmitry
Интересно будет послушать) Круто
𝚔𝚟𝚊𝚙𝚜
Dmytro
Dmitry
мой)
отличный доклад, спасибо. Я как раз выбирал под storage provider что-то, а всякие ceph и glusterfs мне показались слишком тормозными и сложными, и про linstor я не слышал, и тут на мой взгляд неплохое и довольно надежное решение для bare-metal
Dmytro
По сути все восстановление кластера это создать все неймспейсы, накатить все хелм чарты
Dmytro
Потом стейтфулсеты все погасить и подредактировать новые PV на старые EBS volumes. Убить старые ELB и новые ebs volumes
Dmytro
Вроде бы и все
Dmytro
А ну стейтфулсеты заново запустить
Dmytro
Если операторы какие и прочее тут не сталкивался
𝚔𝚟𝚊𝚙𝚜
Уже вопрос по другой теме, а как выкатываете основную репу? Инетересуют бест практики на этот счет. У меня пока совсем колхоз, так как с кубом я недавно. Если упрощенно то оно выглядет примерно так: find ./ -name '*.yaml' -exec kubectl apply -f {} \;
На самом деле всё просто, внутри репы есть несколько директорий:
/dockerfiles
docker images, каждый имеет отдельную директорию, собираются при любом изменени в /dockerfiles с тэгом из git describe для последнего коммита в /dockerfiles, таким образом выполнив git-describe в определённой директории можно всегда получить актуальный тэг для имаджа.
/deploy
здесь лежат описанные в ksonnet/qbec приложения,
каждое приложениие имеет отдельную директорию, и несколько environments. каждый environemnt - это отдельный инстанс приложения задеплоенный в каком-либо кластере. Конкретно сейчас мы имеем два окружения: staging и prod
соответсвенно каждое приложение имеет кофигурацию описанную для каждого из них, дальше всё просто:
есть две ветки: master и staging. При мердже в стейджинг происходит деплой всего в стейджинг, при мердже в мастер происходит деплой всего в прод.
𝚔𝚟𝚊𝚙𝚜
Еще там была папочка
/configuration - с примерно похожей логикой но реализованной для ansible, любая конфигурация описывалась прямо в плейбуках, и при коммите ci применял только изменённые файлы, сейчас я почти всё перевёл на CRD и ansible-оператора от operator-sdk
𝚔𝚟𝚊𝚙𝚜
Aleksey
Aleksey
Спасибо
Dmitry
На самом деле всё просто, внутри репы есть несколько директорий:
/dockerfiles
docker images, каждый имеет отдельную директорию, собираются при любом изменени в /dockerfiles с тэгом из git describe для последнего коммита в /dockerfiles, таким образом выполнив git-describe в определённой директории можно всегда получить актуальный тэг для имаджа.
/deploy
здесь лежат описанные в ksonnet/qbec приложения,
каждое приложениие имеет отдельную директорию, и несколько environments. каждый environemnt - это отдельный инстанс приложения задеплоенный в каком-либо кластере. Конкретно сейчас мы имеем два окружения: staging и prod
соответсвенно каждое приложение имеет кофигурацию описанную для каждого из них, дальше всё просто:
есть две ветки: master и staging. При мердже в стейджинг происходит деплой всего в стейджинг, при мердже в мастер происходит деплой всего в прод.
Интересно, сделано. /deploy - содержит все приложения кластеров? То есть у вас репы самих приложений отдельно, а репа для их деплоя в куб только одна на всех?
𝚔𝚟𝚊𝚙𝚜
Интересно, сделано. /deploy - содержит все приложения кластеров? То есть у вас репы самих приложений отдельно, а репа для их деплоя в куб только одна на всех?
Не совсем так, это то что касается кластера и всех кластерных служб, там лежит всё, что нужно для функционирования кластера: а это сеть, линстор, ингресс, jornalbeat, консолька, netboot-сервера, cert-manager и всё такое. То есть - это отдельный проект который отвечает чисто за инфраструктуру.
𝚔𝚟𝚊𝚙𝚜
Все остальные приложения деплоятся схожим образом но из других проектов
𝚔𝚟𝚊𝚙𝚜
к примеру у нас есть проект хостинг - из него деплоятся всё что отвечает за хостинг, отдельный проект для OpenNebula - из него деплоится всё что отвечает за OpenNebula и т.п.
Dmytro
𝚔𝚟𝚊𝚙𝚜
если убрать uid из claimRef, то подхватит чисто по имени и неймспейсу
Petrukhin
Люди, а в чем может быть проблема. Есть 2 namespace внутри каждого своя версия приклада. У каждой версии есть service,ingress, объеденяет их только url по которому они доступны. В одноим из ингресов описано canary : true, canary-wight: 100 в другом этих аннатаций нет, так вот трафик идет на поды, в которых нет аннтаций canary
Petrukhin
может подсказать кто нибудь, может логика описания ingress не та у меня?
Lucky SB
Petrukhin
$), опечатался
Lucky SB
А какой контроллер?
Lucky SB
Ингресса
Petrukhin
nginx
Dmytro
Lucky SB
Velero вам в помощь
𝚔𝚟𝚊𝚙𝚜
к примеру банальный Bound/Unbound
Dmytro
Но ведь pvc старые стейтфулсет не подхватит?
𝚔𝚟𝚊𝚙𝚜
ну и удаляя ненужные PVC, если такие вдруг обнаружатся, контроллер удалит так же и PV
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
он их по имени выбирает, вроде
Dmytro
Потому что он их генерирует из темплейта
Dmytro
А имя это UUID
Dmytro
Ну или uuid внутри но так или иначе он будет новый