Как установить сервер Chef, рабочую станцию и клиент на экземплярах Ubuntu VPS
Это руководство предназначено для Chef 11. Платформа Chef 12 имеет некоторые существенные отличия в конфигурации. Вы можете найти руководство по настройке сервера, рабочей станции и узла Chef 12 здесь.
Введение
По мере роста вашей организационной структуры и расширения отдельных компонентов, необходимых для управления вашей средой, администрирование каждого сервера и службы может стать неуправляемым.
Решения по управлению конфигурацией предназначены для упрощения управления системами и инфраструктурой. Цель инструментов управления конфигурацией — позволить вам управлять вашей инфраструктурой как кодовой базой. Chef — это решение для управления конфигурацией, которое позволяет легко управлять большим количеством серверов.
В предыдущем руководстве мы обсудили общую структуру компонентов Chef и то, как система работает на концептуальном уровне. Мы рассмотрели некоторые ключевые термины и взаимосвязь между многими различными компонентами.
В этом руководстве мы будем работать над установкой небольшой установки Chef 11. Это будет один сервер Chef, используемый для хранения данных конфигурации и администрирования прав доступа. Это послужит центром для других наших машин.
Мы также установим рабочую станцию, которая позволит нам взаимодействовать с нашим сервером и создавать наши политики конфигурации. Именно здесь мы будем выполнять работу по управлению нашей инфраструктурной средой.
Наконец, мы загрузим узел, который будет представлять один из серверов в нашей организации, которым будет управлять Chef. Мы сделаем это, используя сервер и рабочую станцию, которые мы настроили.
Все три из этих машин будут использовать экземпляры Ubuntu 12.04 x86_64 VPS для простоты. Мы будем ориентироваться на выпуск Chef 11, поскольку он стабилен и хорошо протестирован.
Установка сервера
Первый компонент, который нам нужен для подключения к сети, — это сервер Chef. Поскольку это является центральным для связи с другими нашими компонентами, он должен быть доступен для других наших машин, чтобы завершить их настройку.
Прежде чем сделать это, важно настроить доменное имя для вашего сервера Chef, чтобы правильно разрешать запросы. Вы можете ознакомиться с нашим руководством по настройке доменного имени с помощью DigitalOcean здесь.
Если у вас нет доменного имени, вам нужно будет отредактировать файл /etc/hosts
на каждом из экземпляров VPS, которые вы будете использовать, чтобы все они могли разрешать сервер Chef по имени. . Если у вас есть доменное имя, оно должно быть необходимо только на VPS, который вы будете использовать в качестве сервера Chef. Вы можете сделать это, набрав это на VPS, который вы будете использовать в качестве сервера Chef:
<пред>
Внутри добавьте IP-адрес этого компьютера, а затем имя, которое вы хотели бы использовать для подключения к серверу. Затем вы можете добавить короткое имя после этого. Что-то вроде этого:
<пред>
Измените 111.222.333.444
на IP-адрес вашего сервера Chef и измените два других значения на то, что вы хотите использовать для обозначения вашего сервера. Добавьте эту строку, чтобы указать серверу Chef этот файл на каждой из машин, которые вы планируете использовать, если вы не используете доменное имя.
Вы можете проверить правильность настройки, набрав:
<пред>
Это должно дать вам имя, которое используется для доступа к этому серверу.
Вы можете получить пакет сервера шеф-повара, посетив эту страницу в своем веб-браузере.
Перейдите на вкладку «Сервер Chef» и выберите меню, соответствующее вашей операционной системе:
Выберите самую последнюю доступную вам версию сервера Chef 11 с правой стороны:
Вам будет представлена ссылка на файл deb. Щелкните правой кнопкой мыши и выберите параметр, аналогичный «копировать расположение ссылки».
В экземпляре VPS, который вы будете использовать в качестве сервера, перейдите в домашний каталог вашего пользователя и используйте утилиту wget
для загрузки файла deb. На момент написания этой статьи последняя ссылка была такой:
cd ~
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.10-1.ubuntu.12.04_amd64.deb
Это загрузит установочный пакет, который затем можно установить следующим образом:
sudo dpkg -i chef-server*
Это установит серверный компонент на этот компьютер.
После этого на экран выводится сообщение о том, что вы должны запустить следующую команду, чтобы фактически настроить службу для вашей конкретной машины. Это настроит все автоматически:
sudo chef-server-ctl reconfigure
После завершения этого шага сервер должен быть запущен и запущен. Вы можете сразу получить доступ к веб-интерфейсу, набрав https://
, а затем доменное имя или IP-адрес вашего сервера.
<пред>
Поскольку SSL-сертификаты были подписаны уполномоченным органом, который по умолчанию не распознается вашим браузером, вы увидите предупреждающее сообщение:
Нажмите кнопку «Все равно продолжить», чтобы пропустить этот экран и получить доступ к экрану входа в систему. Он будет выглядеть примерно так:
Учетные данные для входа по умолчанию следующие:
<пред>
При первом входе в систему вам сразу же будет предложено изменить пароль. Выберите новый пароль и нажмите кнопку «Сохранить пользователя» внизу:
Теперь вы настроили сервер так, что мы можем оставить его и начать настройку нашей рабочей станции.
Установка рабочей станции
Наша рабочая станция — это VPS, который мы будем использовать для создания и редактирования реальных политик, определяющих среду нашей инфраструктуры. На этом компьютере есть копия репозитория Chef, в котором описываются наши машины и сервисы, и он загружает их на сервер Chef для реализации.
Мы начнем с простой установки git
для контроля версий:
sudo apt-get update
sudo apt-get install git
Это на самом деле имеет две цели. Очевидное использование заключается в том, что мы будем держать нашу конфигурацию под контролем версий, чтобы отслеживать изменения. Вторая цель — временно кэшировать наш пароль с помощью sudo, чтобы работала следующая команда.
Теперь мы загрузим и запустим сценарий установки клиента с веб-сайта Chef. Введите эту команду, чтобы выполнить все эти шаги:
curl -L https://www.opscode.com/chef/install.sh | sudo bash
Наш компонент рабочей станции Chef теперь установлен. Однако он очень далек от настройки.
Следующим шагом является получение структуры каталогов \chef-repo для правильно отформатированного репозитория Chef с GitHub. Мы можем клонировать структуру в наш домашний каталог, набрав:
cd ~
git clone https://github.com/opscode/chef-repo.git
Это создаст каталог с именем chef-repo
в вашем домашнем каталоге. Здесь будет содержаться вся конфигурация для вашей установки.
Мы создадим каталог конфигурации для самих инструментов Chef в этом каталоге:
mkdir -p ~/chef-repo/.chef
В этот каталог нам нужно будет поместить некоторые файлы аутентификации с нашего сервера Chef. В частности, нам нужны два закрытых ключа.
Генерация и копирование ключей с сервера
Вернитесь на свой сервер Chef в веб-браузере:
<пред>
Войдите в систему, используя учетные данные пользователя admin
, которые вы изменили ранее.
Нажмите на вкладку «Клиенты» на верхней панели навигации. Вы увидите два клиента с именами шеф-валидатор и шеф-вебуи:
Нажмите кнопку «Редактировать», связанную с клиентом chef-validator
. Восстановите закрытый ключ, установив этот флажок и нажав «Сохранить клиент»:
Вы увидите экран с вновь сгенерированными значениями для файла ключей.
Примечание. Этот ключ будет доступен только один раз, поэтому не уходите с этой страницы! Если вы это сделаете, вам нужно будет снова сгенерировать ключ.
Скопируйте значение поля закрытого ключа (то, что внизу).
На вашей рабочей станции перейдите в каталог конфигурации Chef, который мы создали в репозитории:
cd ~/chef-repo/.chef
Откройте новый файл для только что созданного ключа валидатора:
nano chef-validator.pem
В этот файл вставьте содержимое ключа, который вы скопировали из веб-интерфейса сервера (здесь для краткости удалены некоторые строки):
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6Np8f3J3M4NkA4J+r144P4z27B7O0htfXmPOjvQa2avkzWwx
oP28SjUkU/pZD5jTWxsIlRjXgDNdtLwtHYABT+9Q5xiTQ37s+eeJgykQIifED23C
aDi1cFXOp/ysBXaGwjvl5ZBCZkQGRG4NIuL7taPMsVTqM41MRgbAcLCdl5g7Vkri
. . .
. . .
xGjoTVH1vBAJ7BG1RHJZlx+T9QnrK+fQu5R9mikkLHayxi13mD0C
-----END RSA PRIVATE KEY-----
Убедитесь, что над или под клавишей нет лишних пустых строк. Сохраните и закройте файл.
Мы будем следовать той же процедуре, чтобы восстановить и сохранить файл ключа пользователя-администратора. На этот раз ключ для пользователя, поэтому нажмите на вкладку «Пользователи» вверху.
Снова нажмите кнопку «Изменить», связанную с пользователем-администратором, установите флажок «Повторно создать закрытый ключ» и нажмите кнопку «Сохранить пользователя»:
Скопируйте значение закрытого ключа на следующем экране. Еще раз, это не будет показано снова, поэтому скопируйте его правильно в первый раз.
Вернувшись на компьютер рабочей станции, вам нужно будет создать еще один файл для пользователя-администратора в том же каталоге:
nano admin.pem
Вставьте содержимое ключа, который вы скопировали из интерфейса сервера (опять же, это сокращено):
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA/apu0+F5bkVtX6qGYcfoA6sIW/aLFUEc3Bw7ltb50GoZnUPj
0Ms1N1Rv/pdVZXeBa8KsqICAhAzvwSr0H9j+AoURidbkLv4urVC9VS4dZyIRfwvq
PGvAKop9bbY2WJMs23SiEkurEDyfKaqXKW687taJ9AKbH2yVx0ArPI2RwS3Sze3g
. . .
. . .
VTkNpg3lLRSGbQkvRUP6Kt20erS2bfETTtH6ok/zW4db8B/vnBlcZg==
-----END RSA PRIVATE KEY-----
Убедитесь, что над или под вставленными ключевыми строками нет лишних строк. Сохраните и закройте файл.
Настройка команды ножа
Теперь нам нужно настроить команду knife
. Эта команда является центральным способом связи с нашим сервером и узлами, которые мы будем настраивать. Нам нужно сообщить ему, как пройти аутентификацию, а затем сгенерировать пользователя для доступа к серверу Chef.
К счастью, мы заложили основу для этого шага, получив соответствующие файлы учетных данных. Мы можем начать настройку, набрав:
knife configure --initial
Это задаст вам ряд вопросов. Мы пройдемся по ним один за другим:
<пред>
Значения в скобках ([]) — это значения по умолчанию, которые будет использовать нож, если мы не выберем значение.
Мы хотим поместить наш файл конфигурации ножа в скрытый каталог, который мы использовали:
<пред>
В следующем вопросе введите доменное имя или IP-адрес, который вы используете для доступа к серверу Chef. Это должно начинаться с https://
и заканчиваться :443
:
<пред>
Вам будет предложено ввести имя для нового пользователя, которого вы будете создавать. Выберите что-нибудь описательное:
<пред>
Затем он попросит вас ввести имя администратора. Это вы можете просто нажать Enter, чтобы принять значение по умолчанию (мы не изменили имя администратора).
Затем он запросит у вас местоположение существующего ключа администратора. Это должно быть:
<пред>
Он задаст аналогичный набор вопросов о валидаторе. Мы также не изменили имя валидатора, поэтому можем оставить его как chef-validator
. Нажмите Enter, чтобы принять это значение.
Затем он спросит вас о местонахождении ключа проверки. Это должно быть что-то вроде этого:
<пред>
Далее он запросит путь к репозиторию. Это папка chef-repo
, в которой мы работали:
<пред>
Наконец, он попросит вас выбрать пароль для вашего нового пользователя. Выберите все, что вы хотели бы.
Это должно завершить конфигурацию нашего ножа. Если мы посмотрим в наш каталог chef-repo/.chef
, мы должны увидеть файл конфигурации ножа и учетные данные нашего нового пользователя:
ls ~/chef-repo/.chef
admin.pem chef-validator.pem knife.rb station1.pem
Очистка и тестирование рабочей станции
Наша конфигурация для нашей рабочей станции почти завершена. Нам нужно сделать несколько вещей, чтобы очистить и убедиться, что наши соединения работают.
Во-первых, мы должны поставить наш репозиторий Chef под контроль версий. Поскольку конфигурация Chef работает как исходный код, мы можем обращаться с ней так же, как с файлами любой программы.
Во-первых, нам нужно инициализировать наше имя git и адрес электронной почты. Тип:
<пред>
Поскольку наша структура каталогов \chef-repo была взята прямо из GitHub, она уже находится под контролем версий git.
Однако мы не хотим включать каталог \chef-repo/.chef в этот контроль версий. Он содержит наши закрытые ключи и файл конфигурации ножа. Они не имеют ничего общего с нашей инфраструктурой, которую мы хотим спроектировать.
Добавьте этот каталог в список игнорирования, открыв файл .gitignore
:
nano ~/chef-repo/.gitignore
В нижней части файла введите .chef
, чтобы включить весь каталог:
<пред>
.шеф/*.пэм
Сохраните и закройте файл.
Теперь мы можем зафиксировать наше текущее состояние (которое, вероятно, не будет иметь никаких изменений, кроме файла .gitignore
, который мы только что изменили), набрав:
git add .
git commit -m 'Finish configuring station1'
Мы также хотим убедиться, что наш пользователь использует версию Ruby, упакованную с нашей установкой Chef. В противном случае вызовы, сделанные Chef, могут быть интерпретированы системной установкой Ruby, которая может быть несовместима с остальными нашими инструментами.
Мы можем просто изменить наш путь, добавив строку в конец нашего файла .bash_profile
.
Введите это, чтобы добавить строку:
echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile
Теперь мы можем реализовать эти изменения в нашей текущей среде, набрав:
source ~/.bash_profile
Мы можем проверить, можем ли мы успешно подключиться к серверу Chef, запросив некоторую информацию с сервера с помощью команды ножа.
Это вернет список всех наших пользователей:
knife user list
admin
station1
Если это удастся, наша рабочая станция сможет успешно взаимодействовать с нашим сервером.
Начальная загрузка клиентского узла
Теперь, когда сервер Chef и рабочая станция подключены к сети, мы можем попытаться запустить клиент Chef на образце узла. Мы будем использовать другой экземпляр Ubuntu.
Процесс начальной загрузки включает в себя настройку клиента Chef на узле. Клиент Chef — это часть программного обеспечения, которая связывается с сервером, чтобы получить указания для своей собственной конфигурации. Затем клиент приводит узел, на котором он установлен, в соответствии с политикой, предоставленной ему сервером.
Этот процесс просто настроит наш новый экземпляр VPS так, чтобы он находился под эгидой нашей системы управления Chef. Затем мы можем настроить его по своему усмотрению, создав политики на нашей рабочей станции и загрузив их на наш сервер.
Чтобы завершить этот процесс, нам нужно знать только три части информации о VPS, на котором мы хотим установить клиентское программное обеспечение:
- IP-адрес или доменное имя
- Имя пользователя (доступно через SSH и с правами sudo)
- Пароль
Имея эти фрагменты информации, мы можем установить соответствующие пакеты, используя наш инструмент-нож на нашей рабочей станции.
Вы хотите ввести команду, которая выглядит следующим образом:
<пред>
Давайте немного разберем это. Доменное имя/IP-адрес сообщает ножу, к какому серверу подключаться. Имя пользователя и пароль обеспечивают учетные данные для входа.
Если используемый вами пользователь не является пользователем root, то параметр --sudo
необходим для успешной установки программного обеспечения на удаленном компьютере в процессе начальной загрузки. Вам будет предложено ввести пароль, как только вы войдете в систему, чтобы использовать команду sudo.
Имя узла — это имя, которое вы выбираете и которое используется внутри Chef. Именно так вы будете обращаться к этой машине при создании полисов и использовании ножа.
После запуска команды клиентское программное обеспечение будет установлено на удаленном узле. Он будет настроен для связи с сервером Chef для получения инструкций.
Мы можем запросить наш список клиентов, набрав:
knife client list
chef-validator
chef-webui
client1
Мы видим два клиента, настроенных по умолчанию при установке сервера Chef (chef-validator и chef-webui), а также только что созданный нами клиент.
Вы можете так же легко настроить другие узлы, чтобы поставить их под контроль конфигурации вашей системы Chef.
Заключение
Теперь у вас должен быть сервер Chef, отдельная рабочая станция для создания ваших конфигураций и пример узла.
На данный момент мы не выполнили никакой фактической настройки узла через Chef, но мы готовы начать этот процесс. В будущих руководствах мы обсудим, как реализовать политики и создать рецепты и кулинарные книги для управления вашими узлами.