Проблема с системами на основе push заключается в том, что у вас должна быть полная модель всей архитектуры на центральном узле push. Вы не можете нажать на машину, о которой не знаете.
Очевидно, что это может работать, но требуется много работы, чтобы синхронизировать его.
Используя такие вещи, как Mcollective, вы можете преобразовать Puppet и другие CM в push основанная система. Как правило, преобразовать вытягивающую систему в выталкивающую систему тривиально, но не всегда просто пойти другим путем.
Есть также вопрос об организационной политике. Система, основанная на push, передает все руки центральным администраторам. Таким образом может быть очень сложно управлять сложностью. Я думаю, что проблема масштабирования - отвлекающий маневр, любой подход масштабируется, если вы просто посмотрите на количество клиентов. Во многих отношениях толчок легче масштабировать. Однако динамическая конфигурация более или менее подразумевает, что у вас есть хотя бы опрашивающая версия регистрации клиента.
В конечном итоге все зависит от того, какая система соответствует рабочему процессу и владению в вашей организации. Как правило, вытяжные системы более гибкие.
В случае, если это кого-то заинтересует, я полагаю, как минимум, я могу предоставить отчет о пользовательском опыте, впервые применив встроенную в Ansible возможность push в контексте управления исправлениями для установок с несколькими хостами критически важных систем в облаке Amazon. Чтобы понять мои предубеждения или предубеждения, я должен объяснить, что я предпочитаю Ruby на уровне сценариев автоматизации и в прошлом настраивал проекты для использования конфигурации марионеток мастер-агент для каждого проекта-Vpc. Таким образом, мой опыт опровергает прошлые предрассудки, если таковые были.
Мой недавний опыт был очень благоприятным для динамического продвижения меняющегося состояния от десятков до многих сотен серверов, которые могут масштабироваться вверх или вниз, останавливаться и обновляться. В моей ситуации простая специальная команда Ansible 1.7 была всем, что мне нужно для создания патча. Однако, учитывая эффективность настройки AnsibleController (на t2.micro) на каждый виртуальный канал для этой цели, в будущем я намерен расширить эту технику для более сложных требований.
Итак, позвольте мне вернуться к вопросу, заданному в этот тред: плюсы и минусы проталкивания в динамически изменяющемся состоянии.
Предположения относительно типа состояния сервера, на который я нацелился, были:
С учетом этих условий создание образа машины AnsibleController для подключения к многочисленным виртуальным компьютерам и настройки (с учетными данными) на месте в рамках существующих учетных записей сервера очень просто. В каждом экземпляре, созданном из образа, автоматизируется
Второй элемент при необходимости можно сделать относительно сложным (с помощью структуры Info в инвентаре Ansible). Но если изощренность не требуется, вот очень простой пример сценария для вычисления всех экземпляров Amazon EC2 в каждом интервале cron и направления результатов в соответствующий файл инвентаризации (например, / 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
Единственный предостережение для варианта использования состоит в том, что команда patch должна быть идемпотентной. Желательно провести предварительное тестирование, чтобы убедиться, что это выполнено, как часть проверки того, что исправление делает именно то, что задумано.
Итак, чтобы подвести итог, я проиллюстрировал вариант использования, в котором динамическое нажатие эффективно против цели, которые я ставил. Это повторяемое решение (в том смысле, что оно инкапсулировано в изображение, которое можно развернуть в нескольких учетных записях и регионах). По моему опыту на сегодняшний день, технику динамического проталкивания гораздо проще реализовать - и приступить к действию - чем альтернативы, доступные в наборах инструментов, доступных нам на данный момент.
Это старый пост, но, что интересно, история повторяется.
Теперь встроенные IoT-устройства нуждаются в управлении конфигурацией, а топология инфраструктуры/сети кажется еще более сложной из-за сочетания брандмауэров, NAT и даже мобильных сетей.
Решение, основанное на выталкивании или вытягивании, снова столь же важно, но количество устройств еще больше.
Когда мы разрабатывали наш инструмент управления конфигурацией встроенных устройств IoT qbee.io, мы выбрали подход, основанный на вытягивании, с агентом, основанным на теории обещаний. Это означает, что агент извлекает конфигурацию и автономно переходит к желаемому состоянию. Преимущество заключается в том, что конфигурация активно поддерживается, даже если главный сервер не работает, и системе не нужно отслеживать, какое устройство получило какое изменение конфигурации. Кроме того, часто бывает трудно узнать, каковы условия локальной сети для устройства. Так что нам все равно, пока устройство не пропингует сервер.Дополнительным примером и аргументом в пользу решения на основе извлечения в случае встроенного варианта использования является длительный жизненный цикл этих устройств. Если устройство выйдет из строя и будет заменено запасным устройством (например, на нефтяной вышке), устройство немедленно получит конфигурацию для своей конкретной группы и сходится к ней. Если, например, ключи ssh меняются из соображений безопасности каждые 6 месяцев, то будет автоматически применяться последний действующий ключ для резервной группы устройств.
Будет интересно проследить, как эта дискуссия будет продолжаться на протяжении многих лет. Также с контейнерами и одноразовой инфраструктурой в качестве альтернативы системам, сохраняющим конфигурацию в течение более длительного периода времени.