Что такое Ansible и как ты его применяешь?

«Что такое Ansible и как ты его применяешь?» — вопрос из категории Ansible, который задают на 29% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ansible — это инструмент для автоматизации конфигурационного менеджмента и оркестрации, который работает по модели push через SSH (для Linux) или WinRM (для Windows) без необходимости установки агентов на целевые хосты. Его ключевые принципы — идемпотентность и декларативность, описанные на языке YAML.

Как я его применяю в DevOps:

  1. Базовый конфигурационный менеджмент: Приведение серверов в желаемое состояние (Desired State).

    - name: Ensure Nginx is installed and running
      hosts: webservers
      tasks:
        - name: Install Nginx package
          apt:
            name: nginx
            state: present
            update_cache: yes
          become: yes
    
        - name: Enable and start Nginx service
          systemd:
            name: nginx
            enabled: yes
            state: started
          become: yes
  2. Provisioning инфраструктуры: Хотя Terraform чаще используется для создания ресурсов, Ansible отлично дополняет его для пост-конфигурации. Например, настройка только что созданных виртуальных машин: добавление в inventory, установка базовых пакетов, настройка мониторинга.

  3. Управление конфигурациями приложений: Развертывание и обновление конфигурационных файлов (например, nginx.conf, prometheus.yml) с помощью модуля template, который использует шаблоны Jinja2.

    - name: Deploy Nginx configuration
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: '0644'
      notify: restart nginx
      become: yes
  4. Оркестрация обновлений: Выполнение задач в определенном порядке на группах серверов. Например, graceful drain узлов Kubernetes перед обновлением, последовательный перезапуск сервисов в кластере.

  5. Создание ролей (Roles) и коллекций (Collections): Для повторного использования кода я упаковываю логически связанные задачи, handlers, файлы и переменные в роли (например, роль common для базовой настройки всех серверов, роль docker для установки Docker).

Преимущества, которые я ценю: читаемость YAML, большое количество готовых модулей для работы с облачными провайдерами (AWS, GCP), Docker, Kubernetes, базами данных, и активное сообщество. Ansible Tower (AWX) использую для централизованного управления плейбуками, планирования задач и RBAC в команде.