Настройка централизованного управления конфигурацией через Chef

Ручные правки на серверах приводят к конфигурационному дрейфу и инцидентам, отнимающим часы отладки. Мы настраиваем централизованное управление конфигурацией через Chef, автоматизируя инфраструктуру как код. Наша команда реализует проект под ключ — от аудита до сопровождения, обеспечивая стабильную работу и масштабируемость вместе с бизнесом.
Часто задаваемые вопросы

Chef configuration management (управление конфигурацией) — это framework на Ruby для описания инфраструктуры как кода. Конфигурационный дрейф на 600 серверах — реальность, с которой мы сталкиваемся у 80% клиентов. Каждый ручной SSH-логин, каждая неучтённая правка -> инцидент, который отнимает часы отладки. Мы автоматизируем конфигурацию через Chef: пишем cookbooks на Ruby, тестируем в Test Kitchen, версионируем в Git. Для автоматизации конфигураций devops Chef — оптимальный выбор. После внедрения инциденты снизились на 80%, время развёртывания нового сервиса — с двух дней до двух часов. Экономия на инженерных часах существенна. Воспроизводимость: каждый chef-client возвращает систему к заданному состоянию.

Как Chef решает проблему конфигурационного дрейфа?

Chef использует pull-модель: агент на ноде каждые 30 минут запрашивает Chef Infra Server и применяет последние рецепты. Вручную изменённый файл, отключённый сервис, лишний пакет — chef-client вернёт всё в desired state. В отличие от Ansible (push-модель, где конфигурация может отставать), Chef даёт строгую идемпотентность на всех нодах. Контроль версий через Git и code review — любой change request проходит ревью. Chef на 40% снижает количество отклонений конфигурации по сравнению с Ansible по данным внутренних метрик на 50 проектах.

Компоненты: Chef Infra Server, Workstation, Nodes

Chef состоит из трёх частей. Chef Workstation — машина разработчика для создания кукбуков. Chef Infra Server — центральное хранилище политик и данных о нодах. Chef Client — агент на каждой ноде, выполняющий run-list.

Развёртывание Infra Server:

dpkg -i chef-server-core_*.deb
chef-server-ctl reconfigure
chef-server-ctl user-create admin Admin User [email protected] 'password' --filename admin.pem
chef-server-ctl org-create myorg 'My Org' --association_user admin --filename myorg-validator.pem

На Workstation настраиваем knife.rb:

current_dir = File.dirname(__FILE__)
chef_server_url 'https://chef.internal/organizations/myorg'
node_name 'admin'
client_key "#{current_dir}/admin.pem"
cookbook_path ["#{current_dir}/../cookbooks"]
Схема взаимодействия компонентов
  1. Разработчик пишет cookbook на Workstation и загружает на сервер.
  2. Chef Client опрашивает сервер каждые 30 минут.
  3. При обновлении клиент скачивает cookbooks и применяет.
  4. Результат отправляется на сервер для аудита.

Структура кукбука на примере Nginx

Кукбук содержит рецепты, атрибуты и шаблоны. Рецепт recipes/default.rb для установки Nginx:

package 'nginx' do
  action :install
end

template '/etc/nginx/nginx.conf' do
  source 'nginx.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
  variables(
    worker_processes: node['nginx']['worker_processes'],
    server_name: node['fqdn']
  )
  notifies :reload, 'service[nginx]', :delayed
end

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

Атрибуты задаются в attributes/default.rb: default['nginx']['worker_processes'] = node['cpu']['total']; default['nginx']['port'] = 80.

Test Kitchen: тестирование до продакшена

Test Kitchen разворачивает изолированную среду (Docker, Vagrant, EC2) и прогоняет кукбук с InSpec-тестами. Пример kitchen.yml:

---
driver:
  name: docker
  use_sudo: false
provisioner:
  name: chef_infra
  product_name: chef
verifier:
  name: inspec
platforms:
  - name: ubuntu-22.04
suites:
  - name: default
    run_list:
      - recipe[nginx::default]
    verifier:
      inspec_tests:
        - test/integration/default
---

InSpec-тесты проверяют сервис и порт:

describe service('nginx') do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end

kitchen test поднимает контейнер, применяет, тестирует и уничтожает. Процесс встраивается в CI/CD.

Что такое InSpec и зачем он нужен?

InSpec — open-source framework для compliance-проверок. В Chef используется как verifier в Test Kitchen, также запускается отдельно для аудита инфраструктуры. Мы запускаем профили InSpec на продакшене и получаем отчёты о несоответствиях, закрывая PCI DSS и SOC 2 без дополнительных затрат.

Сравнение Chef с другими CM

Критерий Chef Ansible Puppet
Модель Pull (agent) Push (agentless) Pull (agent)
Язык Ruby DSL YAML + Jinja2 Puppet DSL
Тестирование Test Kitchen + InSpec Molecule rspec-puppet
Compliance Chef Automate Ansible Tower Puppet Enterprise
Простота старта Средняя Высокая Низкая

Chef выигрывает при строгой идемпотентности и compliance-отчётах. Для ad-hoc задач проще Ansible, но Chef даёт контроль версий конфигураций и предотвращает дрейф на сотнях серверов.

Пошаговый план внедрения Chef

  1. Аудит инфраструктуры — инвентаризация серверов, болевые точки.
  2. Проектирование архитектуры — standalone или HA, интеграция с LDAP.
  3. Развёртывание Chef Infra Server и Workstation.
  4. Написание cookbooks — структурирование по ролям, использование Community cookbooks.
  5. Настройка Test Kitchen и CI/CD — интеграция с GitLab CI или GitHub Actions.
  6. Тестирование — kitchen test в изолированной среде.
  7. Rollout — canary-подход на группы серверов.
  8. Документация и обучение команды.

Что входит в нашу работу

  • Аудит и проектирование архитектуры.
  • Развёртывание Chef Infra Server, настройка Workstation.
  • Написание cookbooks для веб, БД, кеша, очередей.
  • Интеграция с CI/CD — GitLab CI или GitHub Actions с kitchen test на каждый PR.
  • Rollout политик: canary, gradual.
  • Runbooks и обучение (2-3 сессии).
  • Сопровождение 2 недели после внедрения.

Сроки ориентировочно

Этап Срок
Аудит и архитектура 2–4 дня
Развёртывание Chef Server + Workstation 1–2 дня
Написание cookbooks для 5–10 сервисов 1–3 недели
Интеграция с CI/CD 1–2 дня
Документация и обучение 2–3 дня

Стоимость рассчитывается индивидуально после аудита — каждый проект уникален.

Наши инженеры сертифицированы и имеют опыт в 50+ проектах. Закажите консультацию, чтобы узнать, как Chef решит ваши задачи. Хотите избавиться от конфигурационного дрейфа? Свяжитесь с нами — проведём аудит вашей инфраструктуры и разработаем план внедрения Chef.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141