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"]
Схема взаимодействия компонентов
- Разработчик пишет cookbook на Workstation и загружает на сервер.
- Chef Client опрашивает сервер каждые 30 минут.
- При обновлении клиент скачивает cookbooks и применяет.
- Результат отправляется на сервер для аудита.
Структура кукбука на примере 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 }
endkitchen 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
- Аудит инфраструктуры — инвентаризация серверов, болевые точки.
- Проектирование архитектуры — standalone или HA, интеграция с LDAP.
- Развёртывание Chef Infra Server и Workstation.
- Написание cookbooks — структурирование по ролям, использование Community cookbooks.
- Настройка Test Kitchen и CI/CD — интеграция с GitLab CI или GitHub Actions.
- Тестирование — kitchen test в изолированной среде.
- Rollout — canary-подход на группы серверов.
- Документация и обучение команды.
Что входит в нашу работу
- Аудит и проектирование архитектуры.
- Развёртывание 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.







