Теперь, когда Spring Cloud Config является GA, мы планируем использовать его в качестве внешнего источника конфигурации для наших приложений Spring Boot. Поскольку задействованные технологии настолько новы для нашей организации, я получаю много вопросов о том, как Cloud Config будет работать в производственной среде, особенно в сценариях развертывания и аварийных ситуаций.
Думаю, я начинаю понимать, как сервер загружается и распределяет конфигурацию, что заставляет меня задаться вопросом, как лучше всего организовать и развернуть конфигурацию. Моя первая мысль заключалась в том, чтобы каждое приложение получило свое собственное репозиторий Git, а также общее репозиторий конфигурации.
Проблема здесь в том, что я неправильно читал документацию. У меня создалось впечатление, что я могу сделать что-то вроде этого:
git:
uri: ssh://git@stash:7999/scc/common-config.git
repos:
app-config:
uri: ssh://git@stash:7999/scc/
pattern: app*-config.git
С идеей, что часть app-config будет собирать все репозитории Git, соответствующие шаблону. По мере развертывания новых приложений мы перезапускали серверы, чтобы сохранить конфигурацию в новых репозиториях. Чего я не понимал, так это того, что шаблон относится к файлам в указанном репозитории, а не к самим файлам git. Так что мне действительно нужно было сделать что-то вроде этого:
git:
uri: ssh://git@stash:7999/scc/common-config.git
repos:
app-foo-config:
uri: ssh://git@stash:7999/scc/app-foo-config.git
pattern: app-foo*
Моя проблема с этим подходом заключается в том, что каждый раз, когда я развертываю другое приложение, мне понадобится процесс для обновления файлов bootstrap.yml серверов Cloud Config, в дополнение к их перезапуску, чтобы добавить репо другого приложения, например:
git:
uri: ssh://git@stash:7999/scc/common-config.git
repos:
app-foo-config:
uri: ssh://git@stash:7999/scc/app-foo-config.git
pattern: app-foo*
app-bar-config:
uri: ssh://git@stash:7999/scc/app-bar-config.git
pattern: app-bar*
Это не совсем идеально. Мне кажется, что мне придется разбить мою конфигурацию на несколько репозиториев по доменам, что дает мне что-то вроде этого:
git:
uri: ssh://git@stash:7999/scc/common-config.git
repos:
domain-foo-config:
uri: ssh://git@stash:7999/scc/domain-foo-config.git
pattern: domain-foo*
domain-bar-config:
uri: ssh://git@stash:7999/scc/domain-bar-config.git
pattern: domain-bar*
domain-baz-config:
uri: ssh://git@stash:7999/scc/domain-baz-config.git
pattern: domain-baz*
Это должно удерживать мою конфигурацию от выхода из-под контроля до тех пор, пока я могу поддерживать логику доменов. Итак, какие у меня вопросы? Их два:
Является ли мой последний подход разумным или я упускаю лучший способ?
Документы подразумевают, что конфигурация может находиться в папках, и это поможет сохранить конфигурацию организованной. Кому-нибудь повезло с этим?
Кроме того, поскольку вы зашли так далеко в мою стену текста, я думаю, что в шаблонах есть ошибки для нескольких конфигураций репо.
Без шаблона сервер не передает конфигурацию ни из одного файла в репо. Вдобавок к этому, хотя шаблон: «*» работает, он работает только для первого репо. После этого Cloud Config Server не может загружать какую-либо конфигурацию из любого файла в любом другом репо, независимо от того, какой шаблон задан. Это включает репо по умолчанию.