Chef — инструмент управления конфигурацией инфраструктуры с использованием Ruby DSL. Описывает желаемое состояние серверов через «рецепты» (recipes) и «поваренные книги» (cookbooks). Популярен в крупных enterprise-окружениях с тысячами серверов.
Как работает
Архитектура Chef: Chef Server — центральный узел с cookbooks и политиками. Chef Client — агент на управляемых серверах, периодически (по умолчанию каждые 30 минут) опрашивает Chef Server и применяет актуальную конфигурацию. Chef Workstation — рабочая машина разработчика для создания cookbooks.
Recipe (рецепт) — последовательность ресурсов Chef:
# recipes/nginx.rb (Ruby DSL)
package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
end
template '/etc/nginx/nginx.conf' do
source 'nginx.conf.erb'
notifies :reload, 'service[nginx]', :delayed
end
История
Chef создан Адамом Джейкобом (Adam Jacob) и Джесси Тором (Jesse Toth) в компании Opscode в 2009 году. Opscode переименована в Chef Software в 2013 году. В 2019 году Chef Software поглощена Progress Software за $220 млн. В том же году Chef перевёл все проекты в Apache 2.0 License после инцидента с передачей серверов ICE (US Immigration) — разработчик удалил свои контрибуции в знак протеста. Chef Infra, Chef InSpec, Chef Habitat — продукты текущей экосистемы.
Chef vs Ansible
| Критерий | Chef | Ansible |
|---|---|---|
| Язык | Ruby DSL | YAML |
| Агент | Обязателен | Не нужен (agentless) |
| Архитектура | Pull (агент опрашивает сервер) | Push (управляющий хост толкает) |
| Порог входа | Высокий (Ruby) | Низкий (YAML) |
| Масштаб | 1000+ серверов | До 500-1000 эффективно |
Chef InSpec
InSpec — язык аудита безопасности и compliance Chef. Описывает требования к конфигурации сервера как тесты:
# Проверить что SSH root-логин отключён
describe sshd_config do
its('PermitRootLogin') { should eq 'no' }
end
# Проверить открытые порты
describe port(22) do
it { should be_listening }
end
InSpec используется независимо от Chef Infra — полезен для аудита любых серверов. Интегрируется с CI/CD для автоматической проверки security policy после деплоя.
На что обращать внимание
Для новых проектов и небольших команд (до 50 серверов) Ansible предпочтительнее из-за более низкого порога входа. Chef оправдан если команда уже знает Ruby и нужны возможности pull-модели (агенты сами обновляются) без постоянного Push от управляющего хоста. Kubernetes и GitOps-подходы (ArgoCD, Flux) вытесняют традиционные конфиг-менеджеры для контейнеризованных приложений.
Chef в практике DevOps
Chef строится вокруг концепции «infrastructure as code» — конфигурация серверов хранится в Git-репозитории, проходит code review и тестируется перед применением. Это делает изменения инфраструктуры прозрачными и обратимыми. В крупных командах Chef Server хранит все cookbooks и управляет тысячами нодов, каждый из которых периодически синхронизируется (chef-client runs).
Test Kitchen — инструмент для локального тестирования cookbooks в Docker или Vagrant перед деплоем на продакшн. Chef InSpec позволяет писать тесты безопасности и соответствия: «порт 22 должен быть доступен только с IP 10.0.0.0/8», «PHP версии не ниже 8.1». Эти тесты можно встроить в CI/CD пайплайн.
Суперсет Chef — Habitat и InSpec — расширяет концепцию до упаковки и доставки приложений. Habitat описывает сборку и зависимости приложения аналогично Docker, но без контейнеризации. Для команд, управляющих гетерогенной инфраструктурой (bare metal + VPS + cloud), Chef остаётся одним из самых мощных инструментов, хотя требует значительных первоначальных вложений в обучение и настройку. Порог входа выше, чем у Ansible, но зато масштабируется на тысячи серверов без деградации производительности.