Я збираюся зорієнтувати цю відповідь так, ніби запитання було "які переваги шеф-кухаря-соло", тому що це найкращий спосіб, який я знаю, щоб покрити відмінності між підходами.
Моя підсумкова рекомендація відповідає іншим: використовуйте шеф-кухар-сервер, якщо вам потрібно керувати динамічною, віртуалізованою середовищем, де ви будете часто додавати та видаляти вузли. Сервер шеф-кухаря - це також хороший CMDB , якщо він вам потрібен. Використовуйте шеф-кухаря, якщо у вас менш динамічне середовище, де вузли не будуть змінюватися занадто часто, але ролі та рецепти будуть. Розмір і складність вашого оточення більш-менш не мають значення. Обидва підходи масштабують дуже добре.
Якщо ви розгортаєте шеф-кухаря, використовуйте cronjob з rsync, 'git pull' чи іншим механізмом передачі файлів ідентичності, щоб підтримувати повну копію шеф-кухаря сховища на кожному вузлі. Cronjob повинен легко налаштовуватися так, щоб (a) не запускався взагалі і (b) запускався, але без синхронізації локального сховища. Додайте у своє сховище шеф-кухаря вузли / каталогі з файлом json для кожного вузла. Ваш cronjob може бути настільки витонченим, як ви хочете, з точки зору визначення правильного вузла (хоча я рекомендую просто $ (ім'я хоста -s) .json. Ви також можете створити обліковий запис opscode і налаштувати клієнта з розміщеним шеф-кухарем, якщо для немає іншої причини, крім того, щоб мати можливість використовувати нож для завантаження кулінарних книг спільноти та створення скелетів.
У цього підходу є кілька переваг, окрім очевидного "не потрібно адмініструвати сервер". Ваш джерело управління буде остаточним арбітром всіх змін конфігурації, репозиторій буде включати всі вузли та списки запуску, а кожен сервер, повністю незалежний, полегшує зручні сценарії тестування.
Шеф-кухар-сервер вводить дірку, де ви використовуєте "завантаження ножем" для оновлення кулінарної книги, і ви повинні самостійно закріпити цю дірку (наприклад, за допомогою гачка після завершення) або ризикувати, що зміни сайту будуть мовчки перезаписані тим, хто "завантажує ножем" s застарілий рецепт із застарілого локального сховища на своєму ноутбуці. Це з меншою ймовірністю станеться з шеф-кухарем, оскільки всі зміни будуть синхронізовані з серверами безпосередньо з головного сховища. Тут питання - дисципліна та кількість співробітників. Якщо ви соло-розробник або дуже маленька команда, завантажувати кулінарні книги через API не дуже ризиковано. У більшій команді це може бути, якщо ви не поставите належного контролю.
Крім того, за допомогою шеф-кухаря ви можете зберігати всі ролі ваших вузлів, спеціальні атрибути та списки запуску як файли node.json у вашому головному сховищі шеф-кухаря. За допомогою шеф-кухаря-сервера ролі та списки списків змінюються на ходу за допомогою API. За допомогою шеф-кухаря ви можете відстежувати цю інформацію під контролем редагування. Тут чітко видно конфлікт між статичним та динамічним середовищем. Якщо ваш список вузлів (незалежно від того, як довго він тривав) не змінюється часто, то ці дані під контролем редагування дуже корисні. З іншого боку, якщо ви часто нерестуєте нові вузли та знищуєте старі (більше ніколи не побачите їх ім’я хоста чи fqdn), тримати це все під контролем редагування - це лише непотрібні клопоти, а наявність API для внесення змін дуже зручно. Chef-сервер також має цілі функції, спрямовані на керування динамічними хмарними середовищами, як-от параметр імені на "ножовому завантажувальному", який дозволяє замінити fqdn як спосіб за замовчуванням визначити вузол. Але в статичному середовищі ці особливості мають обмежену цінність, особливо порівняно з тим, що вони мають ролі та списки списків у контролі редагування з усім іншим.
Нарешті, середовища для тестування рецептів можуть бути налаштовані практично без зайвих робіт. Ви можете відключити роботу cronjobs на сервері та вносити зміни безпосередньо до свого локального сховища. Ви можете перевірити зміни, запустивши шеф-кухар-соло, і ви точно побачите, як сервер налаштує себе у виробництві. Після того, як все буде перевірено, ви можете зареєструвати зміни та знову ввімкнути локальну роботу. При написанні рецептів ви не зможете використовувати API "Пошук", тобто якщо ви хочете писати динамічні рецепти (наприклад, балансири), вам доведеться зламати це обмеження, збираючи дані з файлів json у ваші вузли / каталог, що, ймовірно, буде менш зручним і не матиме деяких даних, доступних у повному CMDB. Ще раз, більш динамічні середовища сприятимуть підходу, керованого базами даних, менш динамічне середовище буде добре з файлами json на локальному диску. У серверному середовищі, де запуск шеф-кухаря повинен здійснювати дзвінки API до центральної бази даних, ви будете залежати від керування всіма тестовими середовищами в цій базі даних.
Останній також може бути використаний у надзвичайних ситуаціях. Якщо ви вирішите критичну проблему на виробничих серверах і вирішите її зі зміною конфігурації, ви можете внести зміни негайно у сховище сервера, а потім підштовхнути її до головного майстра.
Це основні переваги шеф-кухаря. Є деякі інші, наприклад, не потрібно адмініструвати сервер або платити за розміщеного шеф-кухаря, але це відносно незначні проблеми.
Підводячи підсумок: Якщо ви динамічний і сильно віртуалізований, шеф-кухар-сервер надає ряд чудових функцій (охоплених в інших місцях), і більшість переваг соло-шеф-кухаря будуть менш помітні. Однак є певні, часто не згадані переваги шеф-кухаря, особливо в більш традиційних умовах. Зауважте, що розгортання у хмарі не обов'язково означає, що у вас є динамічне середовище. Якщо ви не можете, наприклад, додати більше вузлів у вашу систему, не випускаючи нову версію програмного забезпечення, ви, ймовірно, не динамічні. Нарешті, з точки зору високого рівня CMDB може бути корисним для будь-якої кількості речей, лише дотичних до системного адміністрування та конфігурації, таких як облік та обмін інформацією між командами. Використання шеф-кухаря-сервера, можливо, варто лише для цієї функції.