Назад | Перейти на главную страницу

Поддерживают ли какие-либо системы управления конфигурацией явную поддержку изменений конфигурации, сделанных непосредственно на сервере?

В целом (насколько я понимаю) основные системы управления инфраструктурой / конфигурацией (Puppet, Chef, Ansible и SaltStack) основаны на философии, согласно которой ваши серверы являются «скотом», а не «домашними животными», и кажется, что они может противоречить идее о том, что вы когда-либо будете вносить изменения в конфигурацию непосредственно на сервере.

Хотя я работал с Chef, Puppet и Salt, с точки зрения разработчика, работающего с Vagrant, всегда требовалось настроить отдельные блоки для разработки, поэтому мой опыт не помогает ответить на этот вопрос.

Возникает вопрос: поддерживает ли какая-либо из этих систем вариант использования, когда вы вносите изменения непосредственно на сервер и оставляете его там на время, не беспокоясь о том, что локальный демон собирается перезаписать его официальной конфигурацией? Вы должны иметь возможность внести изменения (и в идеале установить временное окно, в течение которого оно будет защищено от перезаписи) без каких-либо значительных изменений (например, рецептов шеф-повара или состояний соли). Вся цель этого варианта использования состоит в том, чтобы не позволить пятиминутному изменению конфигурации увязнуть в корпоративных трениях и сложностях поиска правильного (например) солевого состояния и обеспечения отсутствия побочных эффектов и прохождения выпуска / развертывания цикл и тестирование, чтобы убедиться, что вы ничего не упали в процессе.

Если вам нужен более конкретный пример, предположим, что вы хотите настроить параметры logrotate для ряда журналов, чтобы сбалансировать экономию места на диске и доступ к историческим данным. У вас есть представление о том, сколько данных вы сохраните при любой настройке и сколько данных, по вашему мнению, вам нужно сохранить, но вы не уверены на 100%. Было бы неплохо начать просто с внесения изменений и видеть (1) кто-то жалуется, что им нужно больше исторических данных для некоторой задачи отладки, или (2) вы не экономите столько места на диске, сколько ожидаете, и вам нужно экономить .

Пятиминутное изменение может фактически быть пятиминутное изменение, если ваша система управления конфигурацией позволяет ему быть единым целым, а затем, когда вы уверены, что хотите, чтобы эти изменения были внесены во все ваши ящики, которые выполняют определенную роль, вы можете позволить Chef / Puppet / Salt / Ansible управлять это для тебя.

Примечание: я не спрашиваю о сценарии использования, когда система управления конфигурациями еще нет управление определенным типом файла конфигурации, но случай, когда он уже управление определенным типом файла конфигурации, но вы хотите внести локальные изменения, чтобы они имели приоритет на данной машине, а не перезаписывались.

Поддерживает ли какая-либо из этих систем мой вариант использования? (Без необходимости бороться с системой или делать сальто назад, чтобы заставить ее работать.)

Системы управления конфигурацией поддерживают этот вариант использования, отключая их на целевом хосте на время изменения. Используя в качестве примера chef, вы бы отключили chef-client на узле. Это приведет к тому, что узел будет отображаться как «устаревший» на сервере Chef, но это полезное напоминание о том, что узел не соответствует требованиям и что изменение следует либо откатить, либо откатить.

Для отдельных файлов вы можете использовать chattr + i, и ни один инструмент, который я видел, не знает, как обойти.

Одна дополнительная мысль для шеф-повара - для шаблонов файлов, где файл не существовал до первоначального запуска шеф-повара, вы можете указать шефу: create_if_missing, чтобы он коснулся файла только один раз.

Вы не упомянули PowerShell DSC, но я выделю для этого пару методов, особенно потому, что PowerShell выходит на другие системы, кроме Windows. Некоторые из этих методов могут иметь эквиваленты в других вариантах.

Я могу придумать четыре метода работы с вашим случаем с помощью DSC:

  1. Если вы измените что-то, что не проверено ни одним из ресурсов, это просто никогда не будет обнаружено. Я полагаю, это относится и к другим рецептам.
  2. Установите для LCM значение «Применить и отслеживать», а затем внесите изменения любыми способами. Вы можете проверить, соответствует ли ваша система требованиям, но она не будет пытаться это исправить.

Преимущество следующих вариантов состоит в том, что ваше изменение становится «частью рецепта» и может быть повторно создано.

  1. Разверните свою систему с явной настройкой частичных конфигураций, где ваши «дополнительные» настройки не публикуются изначально, но могут быть добавлены позже. Это предполагает, что любой параметр, который вы планируете «временно» установить, не конфликтует с параметром другой конфигурации. Фактически это дает вам возможность сделать ваше изменение «частью рецепта» без необходимости полностью восстанавливать конфигурацию.
  2. Опубликуйте полностью новую конфигурацию, включающую ваши изменения, и начните настройку. Как и в предыдущем варианте, конфигурация будет идемпотентно применить (вносятся только новые изменения, не затрагивая что-либо ранее установленное).

Независимо от того, используете ли вы выталкивающие или выталкивающие модели DSC, вы можете внести эти изменения для одной или нескольких машин.

Не принимая во внимание на данный момент возможное несоответствие концепции как управления конфигурацией системы из системы CM, так и не делая это в то же время, что комментаторы уже отметили ...

Следует отметить, что для этого варианта использования обычно можно использовать то, что стало условностью с современным серверным программным обеспечением - .d каталоги конфигурации, которые позволяют вставлять дополнительные фрагменты конфигурации в нужные места.

Таким образом, вы можете настроить CM для управления конфигурацией за вас, например, /etc/logrotate.d/local-whatever, в то же время вы все еще можете возиться с конкретной машиной, добавив /etc/logrotate.d/local-aaa-whatever или подобное, что затем заставит программное обеспечение обработать ваши переопределенные настройки.

Очевидно, что если у CM есть рецепты, нацеленные на контроль всего /etc/logrotate.d/ у вас по-прежнему нет другого выхода, кроме как делать что-то в CM.