Автоматическая оркестровка облачного сервера с помощью Salt Cloud

Примечание: Данное руководство протестировано на сервере Ubuntu 12.04. Хотя Ubuntu 12.04больше не поддерживается, с небольшими поправками руководство можно использовать на других дистрибутивах.

Данный мануал поможет выполнить простую, базовую установку мастер-сервера Salt Cloud. Затем с его помощью можно автоматизировать процесс создания облачных серверов.

Управление инфраструктурой

Salt Stack – это открытая система управления конфигурацией, удаленного управления и мониторинга. Возможно, ранее вы не слышали о Salt, но вы точно знакомы с Puppet или Chef. Salt является аналогичным инструментом, но он относительно легкий с точки зрения ресурсов и требований, и многие считают, что Salt намного проще в использовании. Инструменты типа Salt, Puppet и Chef позволяют одновременно запускать команды на нескольких компьютерах, а также устанавливать и настраивать программное обеспечение. Salt имеет два основных аспекта: управление конфигурацией и удаленное выполнение. Облачное развертывание выполняет Salt Cloud.

Читайте также:

Salt Cloud – это инструмент облачной оркестровки, который предназначен для автоматизации развертывания облачных серверов. Он может интегрировать Salt с API провайдера облачного хостинга, а также создавать, управлять и выполнять оркестровку облачных серверов через maps и profiles. Это позволяет автоматически создавать и настраивать отдельные серверы или группы серверов.

Требования

  • Сервер Ubuntu 12.04, настроенный по этому мануалу.
  • Предварительно установленная система Salt (читайте мануал Установка Salt на сервер Ubuntu 12.04).

Безопасность сервера

Любой сервер, доступный в Интернете, нуждается в надежной защите, и ваш мастер Salt не исключение.

Измените стандартный порт SSH. Вместо порта 22 настройте любой другой порт до 1024.

Мастер Salt связывается с миньонами, используя шифрованное соединение AES ZeroMQ. Взаимодействие осуществляется через TCP-порты 4505 и 4506, которые должны быть доступны только на мастере.

Откройте в брандмауэре свой пользовательский порт SSH и TCP-порт 4505 и 4506.

Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian

По умолчанию в Ubuntu используется брандмауэр ufw. Чтобы открыть порты Salt, просто выполните:

sudo ufw allow [custom SSH port below 1024]/tcp
sudo ufw allow salt
sudo ufw enable
sudo ufw status verbose

Отключите парольную аутентификацию или разверните Fail2ban и DenyHosts.

Читайте также:

Создание пары SSH-ключей для панели управления

Salt Cloud использует шифрование по открытым ключам для обеспечения связи между мастером Salt и хостинг-провайдером. На мастер-сервере создайте каталог, в котором будут храниться ваши SSH-ключи:

sudo mkdir /keys

Затем введите:

sudo ssh-keygen -t rsa

Система ответит:

Enter file in which to save the key (/root/.ssh/id_rsa):.

Введите:

/keys/my-provider-salt-cloud

Нажмите Enter. Система выведет:

Enter passphrase (empty for no passphrase):

Введите пароль (опционально). Создавать парольную фразу не нужно. Просто нажмите Enter дважды.

Теперь новый SSH-ключ находится в /keys/my-provider-salt-cloud. Выполните команду:

cat /keys/my-provider-salt-cloud

Скопируйте и вставьте открытый ключ в панели управления вашего хостинг-провайдера (оставьте имя открытого ключа my-provider-salt-cloud.pub).

Убедитесь, что имя хоста и полное доменное имя мастера Salt правильно установлены.

Установка зависимостей Salt

Система Salt Stack построена на языке программирования Python; поэтому для работы понадобится pip (система управления пакетами, написанными на Python). Кроме того, нужно загрузить пакет Salt Cloud из репозитория GitHub (несмотря на то, что он доступен в репозитории Python).

Установите pip и git:

sudo apt-get -y install python-pip git

Теперь выполните команды:

sudo apt-get -y install python-m2crypto
sudo pip install pyzmq PyYAML pycrypto msgpack-python jinja2 psutil salt
sudo pip install apache-libcloud

Установка Salt Cloud

Чтобы установить инструмент, введите:

sudo pip install git+https://github.com/saltstack/salt-cloud.git#egg=salt_cloud

Убедитесь, что инструмент Salt Cloud установлен успешно:

salt-cloud --version

Команда вернет версию Salt Cloud.

Настройка Salt Cloud

Salt Cloud работает на модульной системе, подобной основному проекту Salt, и по умолчанию использует синтаксис PyYAML в файлах шаблонов, но может также использовать многие другие языки шаблонов. При создании конфигурационных файлов обязательно учитывайте форматирование YAML.

Примечание: Для устранения ошибок в файлах YAML можно использовать онлайн-анализатор YAML.

Базовая настройка

Базовая конфигурация Salt Cloud обрабатывается в файле cloud. Этот файл состоит из глобальных конфигураций, которые затрагивают всех облачных провайдеров в системе. Кроме того, файл cloud предоставляет конфигурацию новым миньонам.

Создайте конфигурационный файл cloud:

sudo vim /etc/salt/cloud

Читайте также: Установка и использование текстового редактора Vim

На клавиатуре нажмите i; используйте клавиши со стрелками для перемещения по тексту; скопируйте и вставьте в файл следующие строки (заменив master.yourdomain.tld полным доменным именем мастера Salt, а your-provider – именем своего облачного провайдера):

provider: your-provider
# Set the location of the Salt master
minion:
master: master.yourdomain.tld

Чтобы сохранить и выйти, нажмите Esc, а затем :, w, q и Enter.

Salt предлагает еще много опций для пользовательской настройки, но здесь мы ограничимся простейшей настройкой.

Модули облачного провайдера

Теперь создайте два каталога:

sudo mkdir /etc/salt/{cloud.profiles.d,cloud.providers.d}

В них будут храниться YAML-файлы вашего хостинг-провайдера.

Чтобы создать файл для конфигурации хостинг-провайдера, введите:

sudo vim /etc/salt/cloud.providers.d/your-provider.conf

Скопируйте и вставьте в файл следующие параметры:

provider: your-provider
# Account keys
client_key: YourClientIDCopiedFromControlPanel
api_key: YourAPIKeyCopiedFromControlPanel
ssh_key_name: your-provider-salt-cloud.pub
# Directory & file name on your Salt master
ssh_key_file: /keys/your-provider-salt-cloud

Теперь нужно настроить API. Для этого вам нужны ключи client_key и api_key. Их вы можете найти с помощью панели управления в разделе настроек API.

Создайте ключ API. Скопируйте и вставьте Client ID и API Key в конфигурационный файл хостинг-провайдера.

Настроив провайдера в файле /etc/salt/cloud.providers.d/your-provider.conf, вы получите доступ к командам:

sudo salt-cloud --list-images do
sudo salt-cloud --list-sizes do
sudo salt-cloud --list-locations do
sudo salt-cloud --help

Результат этих команд важен, поскольку он предоставляет переменные, необходимые для создания профилей виртуальных серверов.

Профили облачного хостинга

Чтобы создать профиль для своего провайдера, введите:

sudo vim /etc/salt/cloud.profiles.d/your_provider.conf

Скопируйте и вставьте в файл следующие строки:

# Official distro images available for Arch, CentOS, Debian, Fedora, Ubuntu
ubuntu_512MB_ny2:
provider: your_provider
image: Ubuntu 12.04.4 x64
size: 512MB
#  script: Optional Deploy Script Argument
location: New York 2
private_networking: True
ubuntu_1GB_ny2:
provider: your_provider
image: Ubuntu 12.04.4 x64
size: 1GB
#  script: Optional Deploy Script Argument
location: New York 2
private_networking: True
ubuntu_2GB_ny2:
provider: your_provider
image: Ubuntu 12.04.4 x64
size: 2GB
#  script: Optional Deploy Script Argument
location: New York 2
private_networking: True
# Create additional profiles, if you wish
#[profile_alias_of_your_choosing]:
#  provider: your_provider
#  image: [from salt-cloud --list-images your_provider]
#  size: [from salt-cloud --list-sizes your_provider]
#  script: [optional deployment script e.g. Ubuntu, Fedora, python-bootstrap, etc.]
#  location: [from salt-cloud --list-locations your_provider]
#  private_networking: [True or False: currently only available in NY2 region]

В дополнение к приведенным примерам, Salt Cloud может поддерживать несколько конфигурационных файлов, что обеспечивает более гибкую конфигурацию и прекрасно взаимодействует с различными инструментами управления конфигурацией, а также системами управления версиями.

Поддержка ОС для виртуальных машин

Salt Cloud работает путем повторного выполнения сценария на новых серверах. По умолчанию для этого используется сценарий salt-bootstrap script, если в облачном профиле не объявлен другой сценарий развертывания (рекомендуется использовать сценарий по умолчанию). Если сценарий salt-bootstrap не соответствует вашим потребностям, вы можете передать аргументы сценариев развертывания или написать свой собственный сценарий.

Продвинутые функции

При создании VPS  существует ряд опций, которые не входят в данный мануал. Когда вы научитесь основам работы с Salt, можете подумать о создании более сложной настройки с помощью map-файлов. Этот файл позволяет создать несколько виртуальных машин и связать их с определенными профилями.

Оркестровка облачного сервера

Чтобы создать новый облачный сервер, выполните команду (укажите имя своего хоста):

sudo salt-cloud --profile ubuntu_512MB_ny2 hostname

Если все пойдет хорошо, у вас появится новый облачный сервер, который загрузится как миньон Salt (ключи SSH нового миньона будут автоматически добавлены на мастер Salt). Если вы хотите создать несколько виртуальных машин из одного профиля, вы можете сделать это с помощью этой команды.

sudo salt-cloud -p ubuntu_1GB_ny2 hostname1 hostname2 hostname3

Примечание: Флаги —profile и -p взаимозаменяемы.

Чтобы настроить миньон, читайте мануал Создание формул Salt.

Команда salt-cloud поддерживает множество разных опций. Например, чтобы удалить миньон, нужно выполнить команду:

sudo salt-cloud -d hostname

Читайте также:

Tags: , ,