Какие системы управления конфигурацией (Configuration Management) ты знаешь и в чём их различия?

«Какие системы управления конфигурацией (Configuration Management) ты знаешь и в чём их различия?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я работал с несколькими системами управления конфигурацией, каждая из которых решает задачу приведения инфраструктуры в желаемое состояние (Desired State), но с разными подходами.

Основные инструменты и их применение в моём опыте:

  1. Ansible:

    • Агентный подход: Агентless (работает по SSH/WinRM). Не требует установки дополнительного ПО на целевые хосты.
    • Язык: Playbooks на YAML, что делает их легко читаемыми.
    • Кейс использования: Идеален для оркестрации, настройки серверов «из коробки», разовых задач. Я использовал его для базовой настройки сотен серверов, установки пакетов и конфигурации сервисов.
      
      # Пример: установка Nginx и копирование конфига
    • name: Configure web servers hosts: webservers become: yes tasks:
      • name: Install nginx apt: name: nginx state: present
      • name: Deploy site configuration copy: src: mysite.conf dest: /etc/nginx/sites-available/
  2. Puppet / Chef:

    • Агентный подход: Требуют установки агента (Puppet Agent, Chef Client) на каждом управляемом узле.
    • Модель: Работают в pull-модели: агент периодически опрашивает мастер-сервер за новыми конфигурациями (манифестами на DSL Puppet или рецептами на Ruby).
    • Кейс использования: Подходят для долгосрочного поддержания состояния сложной, статичной инфраструктуры (например, парк корпоративных серверов). Chef я применял для поддержания строгой compliance-политики на серверах баз данных.
  3. Terraform (Infrastructure as Code, а не только CM):

    • Подход: Декларативное описание облачной инфраструктуры (серверы, сети, БД). Управляет жизненным циклом ресурсов.
    • Кейс использования: Я использую Terraform для создания и управления всей облачной инфраструктурой в AWS/GCP. Ansible затем может донастраивать созданные виртуальные машины.
      # Пример: создание инстанса в AWS
      resource "aws_instance" "app_server" {
      ami           = "ami-0c55b159cbfafe1f0"
      instance_type = "t2.micro"
      tags = {
      Name = "ExampleAppServerInstance"
      }
      }

Итог: Ansible — мой выбор для простоты и скорости конфигурации. Puppet/Chef — для строгого контроля состояния. Terraform — для создания инфраструктуры с нуля.