Skip to content

📄 Chef

1. Общее описание

Chef — это платформа управления инфраструктурой с открытым исходным кодом, позволяющая автоматизировать настройку и эксплуатацию серверов. Chef позволяет описывать инфраструктуру в виде кода (Infrastructure as Code), что делает её воспроизводимой, масштабируемой и управляемой.

Основные компоненты:

  • Chef Server — центральное хранилище данных, рецептов, политик и информации о нодах.
  • Chef Workstation — рабочая станция разработчика, где создаются и тестируются рецепты.
  • Chef Node (Client) — сервер, на котором запускается клиент Chef и применяются рецепты.

2. Архитектура Chef

[Chef Workstation] ↔ [Chef Server] ↔ [Chef Nodes]
Компонент Описание
Chef Workstation Машина, где устанавливаются CLI (knife, chef), пишутся рецепты и кукилы.
Chef Server Хранит рецепты, атрибуты, роли, политики, данные о нодах.
Chef Node Сервер или контейнер, на котором установлен chef-client и выполняются рецепты.

3. Основные понятия

Термин Описание
Recipe (Рецепт) Файл Ruby, содержащий набор инструкций для настройки системы.
Cookbook (Кукил) Коллекция рецептов, файлов, шаблонов и определений, предназначенная для выполнения конкретной задачи.
Resource Базовый элемент рецепта, описывающий часть состояния системы (например, пакет, сервис, файл).
Provider Реализация Resource под конкретную ОС.
Attribute Переменные, которые хранят информацию о ноде.
Role Группировка рецептов и атрибутов, применяемых к группе нод.
Environment Логическое окружение (dev, test, prod) для управления версиями кукилов.
Chef Client Агент, который запускается на ноде и применяет рецепты.
Run List Список рецептов или ролей, которые будут применены к ноде.

4. Установка и настройка

4.1 Chef Workstation

  • Скачать: https://www.chef.io/downloads/tools/chef-workstation
  • Установить на локальную машину.
  • Проверить установку:
chef --version
knife --version

4.2 Chef Server

  • Можно использовать Chef Automate или открытый Chef Server.
  • Установка на Ubuntu/Debian:
wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/focal/chef-server-core_13.2.0-1_amd64.deb
sudo dpkg -i chef-server-core_*.deb
sudo chef-server-ctl reconfigure

4.3 Chef Node

Установка клиента:

curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chef

5. Работа с Cookbook'ами

Создание кукила:

chef generate cookbook myapp

Структура кукила:

myapp/
├── recipes/
│   └── default.rb
├── attributes/
├── files/
├── templates/
└── metadata.rb

Пример рецепта (recipes/default.rb):

package 'nginx' do
  action :install
end

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

Метаданные (metadata.rb):

name 'myapp'
version '0.1.0'
depends 'nginx'

6. Работа с Knife

Knife — основной CLI-инструмент для взаимодействия с Chef Server.

Команда Описание
knife node list Список всех нод
knife cookbook list Список кукилов на сервере
knife cookbook upload myapp Загрузка кукила на сервер
knife node run_list add NODE_NAME 'recipe[myapp]' Добавление рецепта в Run List
knife ssh 'name:*' 'sudo chef-client' Выполнение команды на всех нодах

7. Пример использования

Цель: Установить и запустить NGINX

Шаг 1: Создать кукил

chef generate cookbook nginx_setup

Шаг 2: Изменить рецепт (recipes/default.rb)

package 'nginx' do
  action :install
end

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

Шаг 3: Загрузить кукил на сервер

knife cookbook upload nginx_setup

Шаг 4: Применить к ноде

knife node run_list add mynode 'recipe[nginx_setup]'
ssh mynode 'sudo chef-client'

8. Best Practices

  • Все изменения должны быть в виде кода (IaC).
  • Используйте тестирование (Test Kitchen, InSpec).
  • Разделяйте ответственность между кукилами.
  • Используйте roles и environments.
  • Не храните секреты в открытом виде — используйте encrypted data bags.
  • Поддерживайте актуальные версии кукилов и зависимостей.

9. Полезные ссылки