Обзор сервера Chef Infra
Сервер Chef Infra Server служит центральным хранилищем данных конфигурации. Сервер Chef Infra Server хранит кулинарные книги (cookbooks), политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, управляемый клиентом Chef Infra Client. Узлы используют клиент Chef Infra Client для запроса у сервера Chef Infra Server деталей конфигурации, таких как рецепты, шаблоны и распределения файлов. Клиент Chef Infra Client выполняет как можно больше работы по конфигурации на самих узлах (а не на сервере Chef Infra Server). Такой масштабируемый подход распределяет нагрузку по всей организации.
Фронтенд для сервера Chef Infra Server написан на языке программирования Erlang, который впервые появился в 1986 году, был выпущен под открытым исходным кодом в 1998 году и отлично подходит для критически важных задач предприятий, таких как конкурентность, отказоустойчивость и распределённые среды. Сервер Chef Infra Server может масштабироваться до размеров любого предприятия и иногда упоминается как Erchef.
Примечание
/etc/opscode/chef-server.rb. При каждом изменении этого файла необходимо выполнить команду chef-server-ctl reconfigure для применения изменений. Дополнительную информацию см. в руководстве по настройке сервера Chef Infra Server Chef Infra Server settings.Компоненты сервера
На следующей схеме показаны различные компоненты развертывания сервера Chef Infra Server и их взаимосвязи.
| Компонент | Описание |
|---|---|
| Клиенты | Сервер Chef Infra Server используется в первую очередь узлами, которые находятся под управлением Chef, так как выполняются задачи Chef Infra Client. К нему также обращаются лица, которые поддерживают кулинарные книги (cookbooks) и политики, хранящиеся на сервере Chef Infra Server, обычно со стационарного компьютера. А также отдельными пользователями с учетными данными для компонентов сервера Chef Infra Server, такими как консоль управления Chef. |
| Баллансировщик нагрузки | Nginx — это сервер HTTP и обратный прокси-сервер с открытым исходным кодом, используемый в качестве балансировщика нагрузки для сервера Chef Infra Server. Все запросы к API сервера Chef Infra Server проходят через Nginx. |
| Chef Manage | Chef Manage — веб-интерфейс для сервера Chef Infra Server, который использует API сервера Chef Infra Server для всех взаимодействий с ним. |
| Сервер Chef Infra Server |
Erchef — это полная переработка основного API сервера Chef Infra Server, которая позволяет ему работать быстрее и масштабироваться лучше, чем предыдущие версии. Сам API совместим с исходным сервером Chef Infra Server на базе Ruby, что означает, что кулинарные книги (cookbooks) и рецепты, созданные для сервера Chef Infra Server на базе Ruby, будут продолжать работать на сервере Chef Infra Server на базе Erlang. Клиент Chef Infra Client по-прежнему написан на Ruby. Примечание Несмотря на то, что сервер Chef Infra Server написан на Erlang, написание кода на Erlang НЕ является обязательным для использования Chef. |
Bookshelf |
Bookshelf используется для хранения содержимого кулинарных книг (cookbooks) — файлов, шаблонов и т. д. — загруженных на сервер Chef Infra Server в рамках версии кулинарной книги. Содержимое кулинарной книги хранится по контрольной сумме содержимого. Если две разные кулинарные книги или разные версии одной кулинарной книги содержат один и тот же файл или шаблон, Bookshelf сохранит этот файл только один раз. Содержимое кулинарных книг, управляемое Bookshelf, хранится в плоских файлах и отделено от репозиториев сервера Chef Infra Server и индексного поиска. Все кулинарные книги хранятся в отдельном репозитории. |
Сообщения |
chef-elasticsearch связывается с Elasticsearch и предоставляет его REST-API для индексации и поиска. Все сообщения добавляются в отдельный репозиторий индексного поиска. |
| PostgreSQL | PostgreSQL — это хранилище данных для сервера Chef Infra Server. |
Планирование мощности
Этот раздел предоставляет рекомендации по планированию мощности и выбору правильной конфигурации — автономной, с высокой доступностью или многоуровневой — для сервера Chef Infra Server. Этот раздел содержит рекомендации, а не жесткие правила. Это связано с тем, что некоторые запросы к API сервера Chef Infra Server более ресурсоемки, чем другие. В общем, лучше начать с малого, а затем масштабировать сервер Chef Infra Server по мере необходимости. Преждевременная оптимизация может нанести больше вреда, чем пользы, поскольку она может добавить ненужную сложность.
Масштабирование сервера Chef Infra Server
Сам сервер Chef Infra Server очень масштабируемый. Один виртуальный компьютер, на котором работает сервер Chef Infra Server, может обрабатывать запросы от многих тысяч узлов. По мере увеличения масштаба процесс расширения на многоуровневую архитектуру с передним и задним планом с горизонтально масштабируемыми фронтендами для снятия нагрузки с узких мест системы.
Тем не менее, лучше изолировать домены отказов со своим собственным сервером Chef Infra Server, а не пытаться запустить все узлы инфраструктуры с одного централизованного монолитного экземпляра/кластера сервера Chef Infra Server.
Например, если есть западное и восточное побережья, лучше иметь по одному экземпляру сервера Chef Infra Server в каждом дата-центре. Развертывания на каждом сервере Chef Infra Server могут синхронизироваться вверх по потоку с помощью CI-программного обеспечения. Основным ограничивающим фактором для установок сервера Chef Infra Server почти всегда является производительность операций ввода/вывода в секунду (IOPS) для файловой системы базы данных.
CCRs/мин
Ключевой единицей измерения для масштабирования сервера Chef Infra Server является количество запусков Chef Infra Client в минуту: CCRs/мин. Например, 500 узлов, настроенных на проверку каждые 30 минут, эквивалентны 16,66 CCRs/мин.
Как правило, серверу Chef Infra Server не требуется высокая доступность или многоуровневая топология до тех пор, пока количество CCRs/мин не превысит 333/мин (примерно 10 000 узлов).
Хотя синтетические бенчмарки следует рассматривать с осторожностью, так как они обычно не отражают реальную производительность, внутренние синтетические бенчмарки Chef показали, что автономный сервер Chef Infra Server, установленный на экземпляре c3.2xlarge Amazon Web Services (AWS), обрабатывает более 1000 CCRs/мин (30 000 узлов).
Предположения
На масштабируемость сервера могут влиять несколько факторов. Все рекомендации по размеру сервера основаны на следующих предположениях:
- Задания Chef Infra Client выполняются в фоновом режиме и не запускаются задачей cron. Использование cron для планирования запусков может создать проблемы «множественного одновременного запуска»
- Задания Chef Infra Client устанавливаются по умолчанию на интервал в 30 минут с 5-минутным разбросом
- Используется поиск и
partial_search, но не интенсивно - Количество кулинарных книг (cookbooks) на организацию, по всем версиям, на сервере Chef Infra Server составляет менее 500. (Несколько организаций с менее чем 500 кулинарными книгами (cookbooks) каждая, которые всё ещё суммируются в общее число более 500 кулинарных книг (cookbooks) на уровне сервера, нормально.)
- Максимальный допустимый размер объекта узла по умолчанию составляет 1 МБ, хотя редко узлы превышают 150 КБ. Несмотря на сжатие, эти данные дублируются дважды, один раз в Elasticsearch и один раз в PostgreSQL. На практике, выделение 2 МБ дискового пространства на разделение диска на узел должно быть достаточно.
Характеристики хоста
В следующих разделах описаны характеристики хоста для различных размеров CCRs/мин и показано, когда следует переходить от автономной топологии к топологии с высокой доступностью или многоуровневой.
ДО 33 CCRs/мин (прибл. 1000 узлов):
- Chef рекомендует использование одного виртуального экземпляра машины
- Начните с 2 процессорных ядер и 8 ГБ ОЗУ, что эквивалентно экземпляру Amazon EC2
m3.large - Выделите 2 МБ дискового пространства на разделе данных на управляемый узел
ДО 167 CCRs/мин (прибл. 5000 узлов):
- Chef рекомендует использование одного виртуального экземпляра машины
- Начните с 4 процессорных ядер и 16 ГБ ОЗУ, что эквивалентно экземпляру Amazon EC2
m3.xlarge
ДО 333 CCRs/мин (прибл. 10 000 узлов):
- Chef рекомендует использование одного виртуального экземпляра машины
- Начните с 8 процессорных ядер и 32 ГБ ОЗУ, что эквивалентно экземпляру Amazon EC2
m3.2xlarge
ДО 667 CCRs/мин (прибл. 20 000 узлов):
- Chef рекомендует два хоста: один фронтенд и один бэкенд
- Требования к диску для фронтенд-сервера ничтожны
- Начните с 8 процессорных ядер и 32 ГБ ОЗУ для каждого хоста, что эквивалентно экземпляру Amazon EC2
m3.2xlarge
Масштабирование за пределами 20 000 узлов в одном кластере:
- Дополнительную мощность можно получить, разместив фронтенд-узел за балансировщиком HTTP и далее горизонтально масштабировать фронтенд-узлы
- Chef рекомендует обратиться в компанию Chef professional services для помощи в планировании мощности и архитектуры при таких масштабах
Внешние кулинарные книги (cookbooks)
На следующем рисунке показаны конкретные изменения, которые происходят, когда кулинарные книги хранятся во внешнем расположении, таком как Amazon Simple Storage Service (S3).
В следующей таблице описаны компоненты, которые отличаются от стандартной конфигурации сервера Chef Infra Server, когда кулинарные книги хранятся во внешнем расположении:
| Компонент | Описание |
|---|---|
| Клиенты | Сервер Chef Infra предоставит подписанные URL-адреса для запросов кулинарных книг, сделанных различными клиентами (отдельными пользователями, запросами knife и от клиента Chef Infra Client, который установлен на узлах, управляемых Chef). |
| Балансировщик нагрузки | Подписанные URL-адреса кулинарных книг указываются здесь и затем перенаправляются в хранилище кулинарных книг по мере необходимости. |
| Сервер Chef Infra |
Erchef — это полная переработка основного API сервера Chef Infra Server, что позволяет ему быть быстрее и масштабируемее, чем предыдущие версии. Сам API по-прежнему совместим с исходным сервером Chef Infra Server на базе Ruby, что означает, что кулинарные книги и рецепты, которые были написаны для сервера Chef Infra Server на базе Ruby, по-прежнему будут работать на сервере Chef Infra Server на базе Erlang. Клиент Chef Infra по-прежнему написан на Ruby. Примечание Несмотря на то, что сервер Chef Infra написан на Erlang, написание кода на Erlang НЕ является требованием для использования Chef. |
Amazon Simple Storage Service (S3) |
Bookshelf используется для хранения содержимого кулинарных книг — файлов, шаблонов и т. д. — которые были загружены на сервер Chef Infra в качестве части версии кулинарной книги. Содержимое кулинарной книги хранится по контрольной сумме содержимого. Если две разные кулинарные книги или разные версии одной и той же кулинарной книги содержат один и тот же файл или шаблон, Bookshelf сохранит этот файл только один раз. Содержимое кулинарных книг, управляемое Bookshelf, хранится в плоских файлах и отделено от репозиториев сервера Chef Infra и индексного поиска. Это представляет внешнее хранилище кулинарных книг в Amazon Simple Storage Service (S3). |
Настройки AWS
Обязательные настройки
Для настройки внешнего хранилища кулинарных книг с использованием Amazon Simple Storage Service (S3) установите следующие настройки конфигурации в файле chef-server.rb и выполните chef-server-ctl reconfigure:
| Настройка | Описание |
|---|---|
bookshelf['access_key_id'] |
Идентификатор ключа доступа. Значение по умолчанию: сгенерировано по умолчанию. Не рекомендуется указывать его непосредственно в файле конфигурации. Используйте chef-server-ctl set-secret bookshelf access_key_id из команд Управление секретами. |
bookshelf['external_url'] |
Полный URL-адрес ведра S3. |
bookshelf['secret_access_key'] |
Секретный ключ. Значение по умолчанию: сгенерировано по умолчанию. Не рекомендуется указывать его непосредственно в файле конфигурации. Используйте chef-server-ctl set-secret bookshelf secret_access_key из команд Управление секретами. |
opscode_erchef['s3_bucket'] |
Имя ведра Amazon Simple Storage Service (S3). Значение по умолчанию: bookshelf. |
bookshelf['vip'] |
Виртуальный IP-адрес или имя хоста API Amazon Simple Service (S3). Значение по умолчанию: 127.0.0.1. |
Пример конфигурации chef-server.rb:
bookshelf['vip'] = 's3-external-1.amazonaws.com'
bookshelf['external_url'] = 'https://s3-external-1.amazonaws.com'
bookshelf['access_key_id'] = '<ACCESS_ID>'
bookshelf['secret_access_key'] = '<ACCESS_KEY>'
opscode_erchef['s3_bucket'] = '<BUCKET_NAME>'
Дополнительные настройки
Также доступны следующие дополнительные настройки, которые могут потребовать изменения при использовании внешнего поставщика S3:
| Настройка | Описание |
|---|---|
opscode_erchef['nginx_bookshelf_caching'] |
Используется ли Nginx для кэширования кулинарных книг. Когда :on, Nginx обслуживает кэшированное содержимое вместо перенаправления запроса. Значение по умолчанию: :off. |
opscode_erchef['s3_parallel_ops_fanout'] |
Значение по умолчанию: 20. |
opscode_erchef['s3_parallel_ops_timeout'] |
Значение по умолчанию: 5000. |
opscode_erchef['s3_url_expiry_window_size'] |
Частота, с которой генерируются уникальные URL-адреса. Это значение может быть конкретным количеством времени, например, 15m (пятнадцать минут) или процентом от значения s3_url_ttl, например, 10%. Значение по умолчанию: :off. |
opscode_erchef['s3_url_ttl'] |
Время (в секундах) до истечения срока действия подключений к серверу. Если узлы запускаются слишком долго, увеличьте это значение. Значение по умолчанию: 28800. |
Внешний PostgreSQL
На следующей схеме показаны конкретные изменения, которые происходят при конфигурации и управлении PostgreSQL независимо от конфигурации сервера Chef Infra.
В следующей таблице описаны компоненты в конфигурации внешнего PostgreSQL, которые отличаются от стандартной конфигурации сервера Chef Infra:
| Компонент | Описание |
|---|---|
| Сервер Chef Infra | Файл конфигурации сервера Chef Infra обновляется для указания на независимо настроенный набор серверов PostgreSQL. |
PostgreSQL |
PostgreSQL — это хранилище данных для сервера Chef Infra. Это представляет собой независимо настроенный набор серверов, на которых работает PostgreSQL и настроен для выполнения функции хранилища данных для сервера Chef Infra. |
Настройки PostgreSQL
Используйте следующие настройки конфигурации в файле chef-server.rb для настройки внешнего PostgreSQL для использования с сервером Chef Infra:
postgresql['db_superuser']Требуется, когда
postgresql['external']установлено вtrue. Имя пользователя PostgreSQL. Этому пользователю должны быть предоставлены разрешенияCREATE ROLEиCREATE DATABASEв PostgreSQL или разрешениеSUPERUSER. У этого пользователя также должен быть запись в файле конфигурации проверки подлинности по хостам, используемом PostgreSQL (обычно именованным какpg_hba.conf). Значение по умолчанию:'superuser_userid'.postgresql['db_superuser_password']-
Пароль для пользователя, указанного в
postgresql['db_superuser']. Требуется, когдаpostgresql['external']установлено вtrue.db_superuser_password также можно установить с помощью
chef-server-ctl set-db-superuser-passwordиз команд Управление секретами. postgresql['external']Требуется. Установите в
trueдля запуска PostgreSQL вне сервера Chef Infra. Должен быть установлен только один раз при новой установке сервера Chef Infra перед запуском первой командыchef-server-ctl reconfigure. Если это значение установлено после переконфигурации или установлено вfalse, любая переконфигурация сервера Chef Infra вернет ошибку. Значение по умолчанию:false.postgresql['port']Необязательно, когда
postgresql['external']установлено вtrue. Порт, на котором служба должна прослушивать. Порт, используемый PostgreSQL, если этот порт не 5432. Значение по умолчанию:5432.postgresql['vip']Требуется, когда
postgresql['external']установлено вtrue. Виртуальный IP-адрес. Хост для этого IP-адреса должен быть активным и доступным для сервера Chef Infra через порт, указанный вpostgresql['port']. Установите это значение на IP-адрес или имя хоста машины, на которой находится внешний PostgreSQL, когдаpostgresql['external']установлено вtrue.
Дополнительные настройки
Следующие дополнительные настройки необходимы при настройке внешнего PostgreSQL в Microsoft Azure:
bookshelf['sql_connection_user']Имя пользователя PostgreSQL в формате
'username@hostname'(например,'bookshelf@my_postgresql.postgres.database.azure.com'), гдеusernameобычно равно значениюbookshelf['sql_user'](значение по умолчанию:'bookshelf'). Эта настройка обязательна во внешней конфигурации Azure PostgreSQL как службы базы данных. Если установлено значениеnil, сервер Chef Infra предполагает, что база данных не находится в Azure, и подключение к PostgreSQL будет выполнено с использованием значения, указанного вbookshelf['sql_user']. Значение по умолчанию:nil.oc_bifrost['sql_connection_user']Имя пользователя PostgreSQL в формате
'username@hostname'(например,'bifrost@my_postgresql.postgres.database.azure.com'), гдеusernameобычно равно значениюoc_bifrost['sql_user'](значение по умолчанию:'bifrost'). Эта настройка обязательна во внешней конфигурации Azure PostgreSQL как службы базы данных. Если установлено значениеnil, сервер Chef Infra предполагает, что база данных не находится в Azure, и подключение к PostgreSQL будет выполнено с использованием значения, указанного вoc_bifrost['sql_user']. Значение по умолчанию:nil.oc_id['sql_connection_user']Имя пользователя PostgreSQL в формате
'username@hostname'(например,'oc_id@my_postgresql.postgres.database.azure.com'), гдеusernameобычно равно значениюoc_id['sql_user'](значение по умолчанию:'od_id'). Эта настройка обязательна во внешней конфигурации Azure PostgreSQL как службы базы данных. Если установлено значениеnil, сервер Chef Infra предполагает, что база данных не находится в Azure, и подключение к PostgreSQL будет выполнено с использованием значения, указанного вoc_id['sql_user']. Значение по умолчанию:nil.opscode_erchef['sql_connection_user']Имя пользователя PostgreSQL в формате
'username@hostname'(например,'opscode_chef@my_postgresql.postgres.database.azure.com'), гдеusernameобычно равно значениюopscode-erchef['sql_user'](значение по умолчанию:'opscode_chef'). Эта настройка обязательна во внешней конфигурации Azure PostgreSQL как службы базы данных. Если установлено значениеnil, сервер Chef Infra предполагает, что база данных не находится в Azure, и подключение к PostgreSQL будет выполнено с использованием значения, указанного вopscode_erchef['sql_user']. Значение по умолчанию:nil.postgresql['db_connection_superuser']Имя суперпользователя PostgreSQL в формате
'username@hostname'(например,'opscode_pgsql@my_postgresql.postgres.database.azure.com'), гдеusernameобычно равно значениюpostgresql['db_superuser']с заменой всех дефисов на подчеркивания. Эта настройка обязательна во внешней конфигурации Azure PostgreSQL как службы базы данных. Если установлено значениеnil, сервер Chef Infra предполагает, что база данных не находится в Azure, и подключение к PostgreSQL будет выполнено с использованием значения, указанного вpostgresql['db_superuser']. Значение по умолчанию:nil.
Пример конфигурации chef-server.rb для внешнего PostgreSQL в Microsoft Azure:
topology 'standalone'
postgresql['external'] = true
postgresql['vip'] = 'my_postgresql.postgres.database.azure.com'
postgresql['db_superuser'] = 'opscode_pgsql'
postgresql['db_superuser_password'] = 'My_postgres_password1!'
postgresql['db_connection_superuser'] = 'opscode_pgsql@my_postgresql.postgres.database.azure.com'
# postgresql['sslmode']='require' # required if 'Enforce SSL connection' is enabled on Azure PostgreSQL
bookshelf['sql_connection_user'] = 'bookshelf@my_postgresql.postgres.database.azure.com'
oc_bifrost['sql_connection_user'] = 'bifrost@my_postgresql.postgres.database.azure.com'
oc_id['sql_connection_user'] = 'oc_id@my_postgresql.postgres.database.azure.com'
opscode_erchef['sql_connection_user'] = 'opscode_chef@my_postgresql.postgres.database.azure.com'
Примечание
Настройки Bookshelf
В случаях, когда требуется хранить кулинарные книги в SQL-бекенде, например, в высокодоступной настройке, необходимо установить storage_type на :sql:
bookshelf['storage_type'] = :sql
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/server_overview/