Любое приложение нужно конфигурировать, и самый простой способ сделать это — сохранить конфигурации в исходном коде. У этого подхода есть побочный эффект: конфигурация и код живут и умирают вместе, как описывает Киф Моррис (Kief Morris) в статье «Immutable Server» (http://bit.ly/2CoH5cj). Нам же нужна гибкость, позволяющая адаптировать конфигурацию без повторного создания образа приложения. Фактически повторное создание может потребовать много времени и считается антипаттерном в методике непрерывной доставки, когда приложение создается один раз, а затем перемещается без изменений через разные этапы конвейера развертывания, пока не достигнет места промышленной эксплуатации.
Как в таком сценарии можно было бы адаптировать приложение к различным настройкам окружений разработки, тестирования и эксплуатации? Ответ заключается в использовании внешних конфигурационных данных, различных для каждого окружения. Паттерны, которые приводятся в следующих главах, описывают настройку и адаптацию приложений к разным окружениям с использованием внешних конфигурационных данных:
• Глава 18 «Конфигурация в переменных окружения» описывает порядок использования переменных окружения для хранения конфигурационных данных.
• Глава 19 «Конфигурация в ресурсах» описывает использование ресурсов Kubernetes, таких как ConfigMap и Secret, для хранения информации о конфигурации.
• Глава 20 «Неизменяемая конфигурация» описывает способ хранения в неизменном виде больших наборов данных, помещая их в контейнеры, подключаемые к контейнерам приложений во время выполнения.
• Глава 21 «Макет конфигурации» демонстрирует прием, который может пригодиться, когда для хранения настроек разных окружений, имеющих лишь небольшие отличия, используются очень большие конфигурационные файлы.