← Назад к вопросам

Чем воспользуетесь для установки и управления множеством машин без Ansible и Python?

2.0 Middle🔥 162 комментариев
#Ansible и управление конфигурацией

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Альтернативы Ansible и Python для управления множеством машин

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

Основные категории инструментов

1. Инструменты на основе декларативных языков (IaC)

Эти инструменты позволяют описывать желаемое состояние инфраструктуры в виде кода, что обеспечивает повторяемость и контроль версий.

  • Terraform (Hashicorp): Хотя он в первую очередь предназначен для оркестрации облачных ресурсов, его можно использовать вместе с провижнерами (provisioners) для начальной настройки машин. Например, для выполнения скриптов на удалённых хостах.
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y nginx",
      "sudo systemctl start nginx"
    ]
    connection {
      type        = "ssh"
      user        = "ubuntu"
      private_key = file("~/.ssh/id_rsa")
      host        = self.public_ip
    }
  }
}
  • Puppet: Это зрелый инструмент управления конфигурациями на Ruby, который использует декларативный язык для описания состояния систем. Он хорошо подходит для сред, где требуется строгий контроль и централизованное управление. Модель клиент-сервер (Puppet Master/Agent) позволяет масштабировать управление тысячами нод.
# Пример манифеста Puppet для установки Nginx
package { 'nginx':
  ensure => installed,
}

service { 'nginx':
  ensure => running,
  enable => true,
  require => Package['nginx'],
}
  • Chef: Также основан на Ruby, но использует императивный подход (рецепты и кулинарные книги). Он гибкий и мощный, но требует более глубокого обучения. Chef Infra позволяет управлять конфигурациями через централизованный сервер или в бессерверном режиме (Chef Solo).
# Пример рецепта Chef для установки Apache
package 'apache2' do
  action :install
end

service 'apache2' do
  action [:start, :enable]
end

2. Инструменты на основе скриптов и SSH

Для лёгких или специфических задач можно использовать комбинацию SSH и скриптовых языков.

  • Bash/PowerShell скрипты с параллельным выполнением: С помощью утилит типа pssh (Parallel SSH), pdsh или ClusterSSH можно выполнять команды на множестве машин одновременно. Например, для массовой установки пакетов в Linux-среде.
# Установка pssh и выполнение команды на нескольких хостах
pssh -h hosts.txt -l user -A "sudo apt-get update && sudo apt-get install -y docker"
  • SaltStack: Хотя он написан на Python, SaltStack использует YAML и Jinja для конфигураций, и его можно применять без глубоких знаний Python. Он работает по модели master-minion или в бессерверном режиме (Salt SSH), предлагая высокую скорость за счёт использования ZeroMQ.
# Пример состояния SaltStack для установки PostgreSQL
install_postgresql:
  pkg.installed:
    - name: postgresql-14

enable_postgresql:
  service.running:
    - name: postgresql
    - enable: True

3. Облачные и платформенные инструменты

В облачных средах управление часто встроено в саму платформу.

  • Cloud-Init: Стандарт для инициализации виртуальных машин в облаках (AWS, Azure, GCP). Позволяет передавать скрипты пользовательских данных (user-data) для настройки при запуске инстансов.
# Пример конфигурации Cloud-Init для установки веб-сервера
#cloud-config
packages:
  - nginx
  - nodejs
runcmd:
  - [systemctl, start, nginx]
  - [npm, install, -g, pm2]
  • Системы управления контейнерами: Для контейнеризованных сред можно использовать Kubernetes с операторами и Helm для управления приложениями, что минимизирует необходимость управления отдельными виртуальными машинами.

  • Инструменты от вендоров: Например, AWS Systems Manager (SSM) позволяет выполнять команды, управлять патчами и конфигурациями на EC2-инстансах без необходимости в SSH.

Критерии выбора инструмента

При выборе альтернативы я бы руководствовался следующими факторами:

  • Масштаб инфраструктуры: Для десятков машин подойдут скрипты с SSH, для сотен или тысяч — Puppet, Chef или SaltStack.
  • Стек технологий: В среде Windows логично использовать PowerShell Desired State Configuration (DSC) или Chef, который хорошо интегрируется с Windows.
  • Производительность: SaltStack и параллельные SSH-инструменты выигрывают в скорости за счёт параллельного выполнения.
  • Интеграция с облаком: Cloud-Init и облачные инструменты (вроде AWS SSM) снижают операционные издержки.
  • Кривая обучения: Puppet и Chef требуют времени на освоение, тогда как простые скрипты могут быть реализованы быстрее.

Пример практического workflow с использованием Bash и SSH

Допустим, нам нужно развернуть веб-сервер на 50 Linux-машинах. Я бы создал скрипт для автоматизации через SSH-ключи и параллельного выполнения.

#!/bin/bash
# deploy_web.sh - Массовая установка Nginx

HOSTS_FILE="hosts_list.txt"
DEPLOY_SCRIPT="setup_nginx.sh"

# Создание скрипта для удалённого выполнения
cat > $DEPLOY_SCRIPT << 'EOF'
#!/bin/bash
sudo apt-get update
sudo apt-get install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
EOF

# Копирование скрипта и выполнение на всех хостах параллельно
for host in $(cat $HOSTS_FILE); do
    scp $DEPLOY_SCRIPT user@$host:/tmp/
    ssh user@$host "bash /tmp/setup_nginx.sh" &
done

wait
echo "Развёртывание завершено на всех хостах."

Заключение

Хотя Ansible остаётся фаворитом из-за простоты и агентной архитектуры, альтернативы вроде Puppet, Chef, Terraform с провижнерами, SaltStack или даже простых Bash-скриптов с параллельным SSH могут эффективно справляться с управлением множеством машин. Ключ — в оценке требований проекта: масштабируемости, безопасности, существующего стека и экспертизы команды. В современных облачных средах я также рекомендую использовать нативные инструменты (Cloud-Init, AWS SSM), которые снижают зависимость от сторонних решений.