Какие инструменты Infrastructure as Code вы знаете для настройки серверов?

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

Ответ

Для конфигурации серверов (Configuration Management) я в основном использую Ansible, но также знаком с альтернативами. Их ключевая задача — привести сервер в желаемое состояние, установив пакеты, настроив сервисы и развернув код.

Ansible — мой основной инструмент для этого. Он агентлесс, использует SSH, и его YAML-плейбуки легко читать.

  • Почему Ansible? Низкий порог входа, идемпотентность (можно безопасно запускать плейбук много раз), огромная коллекция модулей (Ansible Galaxy).
  • Пример плейбука для настройки веб-сервера Nginx с установкой SSL-сертификата:
  • name: Configure web servers hosts: webservers become: yes tasks:
    • name: Ensure Nginx is installed and latest version ansible.builtin.apt: name: nginx state: latest
    • name: Copy custom Nginx configuration ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/sites-available/default notify: restart nginx
    • name: Copy SSL certificates from secure location ansible.builtin.copy: src: /secure/ssl/{{ inventory_hostname }}.pem dest: /etc/ssl/certs/ mode: '0600' handlers:
    • name: restart nginx ansible.builtin.service: name: nginx state: restarted

Другие инструменты в этой категории:

  • Puppet — использует декларативный язык на основе Ruby DSL. Требует установки агента на целевых хостах и центрального сервера (Puppet Master). Мощный, но с более сложной архитектурой.
  • Chef — также агентный, где конфигурация описывается на Ruby ("рецепты" и "поваренные книги"). Очень гибкий, но требует знания Ruby.
  • SaltStack — может работать как в агентном (Salt Minions), так и в агентлесс-режиме (используя SSH). Отличается высокой скоростью выполнения за счет использования ZeroMQ для коммуникации.

В современном DevOps-стеке Ansible часто комбинируют с Terraform: Terraform создает виртуальные машины в облаке, а Ansible сразу же их настраивает (используя provisioner или отдельный пайплайн).