Управління конфігурацією: топологія на основі "поштовху"


22

Більш усталені системи управління конфігурацією (CM), такі як Ляльковий та шеф-кухар, використовують підхідний підхід: клієнти періодично опитують централізованого майстра для оновлень. Деякі з них також пропонують безшовний підхід (так, на основі "push"), але заявляють, що він "не для виробництва" (Saltstack) або "менш масштабований" (Ляльковий). Єдина система, про яку я знаю про це - push-based з самого початку - runner-up Ansible.

У чому полягає конкретна перевага масштабованості системи, що базується на тязі? Чому нібито легше додати більше маніпуляторів, ніж push-агентів?

Наприклад, agiletesting.blogspot.nl пише:

в системі "тягнення" клієнти звертаються до сервера незалежно один від одного, тому система в цілому є більш масштабованою, ніж система "push"

З іншого боку, Rackspace демонструє, що вони можуть обробляти 15K системи за допомогою поштовхової моделі.

infastructures.org пише:

Ми присягаємось методологією підтримання інфраструктури, використовуючи такі інструменти, як SUP, CVSup, сервер rsync або cfengine. Замість того, щоб просувати зміни клієнтам, кожна окрема клієнтська машина повинна відповідати за опитування золотого сервера під час завантаження та періодично після цього підтримувати свій власний рівень оборотів. Перш ніж прийняти цю точку зору, ми розробили обширні сценарії, що базуються на основі ssh, rsh, rcp та rdist. Проблема, яку ми виявили з r-командами (або ssh), полягала в наступному: Коли ви запускаєте скрипт, заснований на r-командах, щоб підштовхнути зміни до своїх цільових машин, шанси полягають у тому, що якщо у вас більше 30 цільових хостів, один з них буде бути в будь-який час. Ведення списку введених в експлуатацію машин стає кошмаром. У процесі написання коду, щоб виправити це, ви закінчите детальний код обгортки для вирішення: тайм-аути від мертвих господарів; ведення журналів і повторне повторення мертвих хостів; змушувати та виконувати паралельні завдання, щоб спробувати вразити багатьох господарів у розумну кількість часу; і, нарешті, виявлення та запобігання випадку використання всіх наявних розеток TCP на вихідній машині з усіма вихідними rsh сеансами. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як на основі методів витягування. змушувати та виконувати паралельні завдання, щоб спробувати вразити багатьох господарів у розумну кількість часу; і, нарешті, виявлення та запобігання випадку використання всіх наявних розеток TCP на вихідній машині з усіма вихідними rsh сеансами. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як на основі методів витягування. змушувати та виконувати паралельні завдання, щоб спробувати вразити багатьох господарів у розумну кількість часу; і, нарешті, виявлення та запобігання випадку використання всіх наявних розеток TCP на вихідній машині з усіма вихідними rsh сеансами. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як на основі методів витягування. і, нарешті, виявлення та запобігання випадку використання всіх наявних розеток TCP на вихідній машині з усіма вихідними rsh сеансами. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як на основі методів витягування. і, нарешті, виявлення та запобігання випадку використання всіх наявних розеток TCP на вихідній машині з усіма вихідними rsh сеансами. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як на основі методів витягування. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як методи, що базуються. Тоді у вас все ще виникає проблема отримати все, що ви тільки що зробили, для встановлення зображень для всіх нових хостів, які будуть встановлені в майбутньому, а також повторити це для будь-яких хостів, які вмирають і повинні бути відновлені завтра. Після проблеми, яку ми пройшли з реалізацією реплікації на основі r-команд, ми виявили, що це просто не варто. Ми не плануємо знову керувати інфраструктурою з r-командами або будь-яким іншим механізмом push. Вони не масштабують так само, як методи, що базуються. або з будь-яким іншим механізмом натискання з цього приводу. Вони не масштабують так само, як методи, що базуються. або з будь-яким іншим механізмом натискання з цього приводу. Вони не масштабують так само, як методи, що базуються.

Це не проблема реалізації, а не архітектурна? Чому складніше написати потоковий клієнт push, ніж потоковий сервер тягнення?


4
Лише зауважте, Ansible може також тягнути, через ansible-pull.
ceejayoz

1
Однією з головних переваг є подорож NAT та брандмауери. Це часто не є блокпостом, але іноді це зміна гри.
Dan Garthwaite

SALT використовує паб / під ZeroMQ. Яка різна.
Dan Garthwaite

1
Про це великі дискусії в потоці конфігурації програми "Розгортання додатків проти системи" в списку розсилки [devops-toolchain] [1]. [1]: code.google.com/p/devops-toolchain
sciurus

1
btw - Автоматизація сервера HP функціонує під натисканням і може керувати десятками тисяч пристроїв {розкриття - Я архітектор автоматизації для партнера HP}
warren

Відповіді:


8

Проблема систем, що базуються на натисканні, полягає в тому, що ви повинні мати повну модель всієї архітектури на центральному поштовху. Ви не можете натиснути на машину, про яку ви не знаєте.

Це, очевидно, може спрацювати, але для синхронізації потрібно багато роботи.

Використовуючи такі речі, як Mcollective, ви можете перетворити Лялькових та інших CM в систему, що базується на поштовху. Як правило, перетворити систему витягування в систему, що базується на поштовху, тривіально, але не завжди просто піти іншим шляхом.

Існує також питання організаційної політики. Система, що базується на натисканні, ставить усі контрольні руки центрального адміністратора. Управління складністю таким чином може бути дуже важким. Я думаю, що проблема масштабування - це червона оселедець, або будь-яка шкала підходу, якщо просто подивитися на кількість клієнтів. Багато в чому поштовх легше масштабувати. Однак динамічна конфігурація більш-менш означає, що у вас є принаймні витягнутий варіант реєстрації клієнта.

Зрештою, мова йде про те, яка система відповідає робочому процесу та власності у вашій організації. Як правило, тягові системи більш гнучкі.


2
Спасибі! Але чому динамічна конфігурація передбачає тягнення? Ansible використовує, наприклад, динамічний поштовх. Тож здається, що те, що Лялька не може робити динамічний поштовх, є обмеженням реалізації, а не обмеженням архітектури, правда?
Віллем

4
@Willem Справді "динамічне" середовище означає, що нова машина може з'являтися в будь-якому місці та в будь-який час та потребувати конфігурації. Система, що базується на натисканні, вимагає налаштувати цю систему на центральному вузлі; система, заснована на витягуванні, може витягнути (загальну) конфігурацію, без того, щоб адміністратору середовища було потрібно нічого робити на серверах налаштування.
voretaq7

1
Zabbix виявляє хостів, Ansible може використовувати динамічний інвентар, щоб передати конфігурацію "тягнути" до нововиявлених хостів.
bbaassssiiee

Так, ansible може використовувати безліч джерел для свого динамічного інвентаризації, наприклад, ESX API. Таким чином, ви дізнаєтесь про VM, як тільки він створений, і може запускати відтворення на поєднанні з малюнком.
Дж. М. Бекер

11

У випадку, якщо це когось цікавить, я думаю, як мінімум, можу дати звіт про досвід користувачів, коли я вперше використав функцію "Ансифлінг" з можливістю натиснення коробки в контексті управління патчами декількох вузлів налаштування критично важливих систем в Амазонській хмарі. Щоб зрозуміти свої попередні уявлення або упередження, я повинен пояснити, що я віддаю перевагу Рубі на рівні сценаріїв автоматизації і створив проекти для використання конфігурації маріонеткових ляльок на проект-Vpc в минулому. Тож мій досвід несе в собі попередні забобони, якщо такі були.

Мій недавній досвід був дуже сприятливим для динамічного натискання на мінливу нерухомість від десятків до багатьох сотень серверів, які можуть масштабувати вгору або вниз, бути припиненими та оновленими. У моїй ситуації мені було потрібно просту команду Ansible 1.7, яка потрібна для виправлення. Однак з огляду на ефективність налаштування AnsibleController (на t2.micro) на Vpc з цією метою, в майбутньому я маю намір розширити техніку для більш складних вимог.

Тож дозвольте повернутись до питання, заданого в цій темі: плюси і мінуси, що пропонуються в динамічно мінливій власності.

Припущення щодо типу власності сервера, на яку я орієнтувався, були:

  • Немає припущення, що IP-адреси або створені Amazon локальні імена хостів будуть довготривалими - вони можуть як прийти, так і йти
  • Усі екземпляри були створені з машинних зображень, які вже мали можливість зробити доступ до ssh від одного привілейованого адміністративного користувача
  • Індивідуалізувати сервери та потенційно розділити їх на групи відповідно до функцій або відповідно до стадії розробки (наприклад, тестування чи продукту), це можна зробити через запуск спеціальних тегів Amazon узгоджених звичайних імен
  • Що я б патч адмініструвати сервери Linux та Windows окремо, з різними спеціальними командами, тому просто дозволяти відмовитися від конкретних входів для Linux під час звернення до сервера Windows було цілком прийнятним

Зважаючи на ці умови, створити машинне зображення AnsibleController для потрапляння на численні Vpcs та налаштування (за допомогою облікових даних) in situ у межах існуючих облікових записів сервера дуже просто. Автоматизована в кожному екземплярі, створеному із зображення, є

  1. Cron завдання - регулярно просувати патч до запущених серверів, щоб до потрібної властивості постійно отримувати доступ з інтервалами
  2. Спосіб обчислення інвентарного списку на кожному такому інтервалі.

Другий предмет може бути зроблений порівняно складним у разі потреби (за допомогою інформаційної структури інвентарного списку). Але якщо вишуканість не потрібна, ось вам дуже простий приклад сценарію для обчислення всіх екземплярів Amazon EC2 на кожному інтервалі кронів і направлення результатів у відповідний інвентарний файл (наприклад, / etc / ansible / hosts)…

#!/bin/bash
# Assumes aws-cli/1.3.4 Python/2.6.9 Linux/3.4.73-64.112.amzn1.x86_64 or greater
# http://aws.amazon.com/releasenotes/8906204440930658
# To check yum list aws-cli
# Assumes that server is equipped with AWS keys and is able to access some or all
# instances in the account within it is running.
# Provide a list of host IPs each on a separate line
# If an argument is passed then treat it as the filename, whether local or absolute 
# path, to which the list is written

function list-of-ips {
    /usr/bin/aws ec2 describe-instances --filters '[ {"Name": "instance-state-code", "Values": [ "16" ] } ]' | grep -w PrivateIpAddress | awk  '{x=$2; gsub("\"","", x); gsub(",","", x); if(x && FNR!=1){print x;}}' | uniq
 }

if [ -n "$1" ]; then
   list-of-ips > "$1"
else
   list-of-ips
fi

Єдине застереження для випадку використання - це те, що команда патча повинна бути ідентичною. Бажано попередньо перевірити, щоб повністю переконатися, що це задоволено, як частина впевненості, що патч виконує саме те, що призначено.

Отже, підсумовуючи, я проілюстрував випадок використання, коли динамічний поштовх ефективний проти поставлених мною цілей. Це повторюване рішення (у сенсі того, що він інкапсульований у зображення, яке може бути розгорнутий у декілька рахунків та регіонів). На моєму досвіді, динамічну техніку натискання набагато простіше забезпечити --- і вступити в дію ---, ніж альтернативи, доступні з наборів інструментів, доступних нам на даний момент.


2
//, @jonz, це така дискусія, для якої, я думаю, досвідчені розробники полюбили модель Stack Exchange. Особливо мені подобаються вибрані вами умови, і що ця відповідь спочатку перераховує припущення.
Натан Басанес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.