📄 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
. - Поддерживайте актуальные версии кукилов и зависимостей.