Назад в блог

Введение в подготовку серверов с помощью CloudInit

Введение в подготовку серверов с помощью CloudInit

В этом месяце мы объявили об очень интересном партнерстве с Canonical, создателями Ubuntu. Прежде всего, главным элементом этого партнерства является внедрение полной поддержки CloudInit между облаком CloudSigma и Ubuntu.

Введение в CloudInit

Если вы не знакомы с CloudInit, это отраслевой стандарт для начальной загрузки облачных серверов. Иными словами, если вы используете простой DSL можно легко выполнять задачи при первой загрузке. Также стоит отметить, что CloudInit не ограничивается Ubuntu. Сегодня вы найдете поддержку CloudInit в большинстве современных дистрибутивов Linux (но поддерживаемые облака могут отличаться).

Прежде чем мы начнем работу с CloudInit, важно понять, какое место CloudInit занимает в экосистеме подготовки серверов. Хотя CloudInit можно запускать как автономную систему подготовки, гораздо чаще его используют в сочетании с другой системой, такой как Ansible, Chef, Puppet или Salt. В этом случае вы просто используете CloudInit, чтобы привести свой новый сервер в состояние, в котором система подготовки сможет продолжить работу. Лично я часто использую CloudInit в сочетании с Ansible.

Использование CloudInit в CloudSigma

Использование CloudInit в CloudSigma очень просто.

Чтобы использовать CloudInit на сервере Ubuntu 14.04, выполните следующие шаги:

    • Клонируйте диск “Ubuntu 14.04 Cloud Image” из маркетплейса (на данный момент это единственный полностью поддерживаемый диск с CloudInit). Обязательно измените размер клонированного диска до желаемого, и файловая система автоматически расширится при первой загрузке.
    • Создайте новый сервер.
    • После создания сервера вы увидите кнопку CloudInit под статусом сервера.

CloudInit

    • При нажатии на эту кнопку появится следующее диалоговое окно.

CloudInit_activate

  • Просто вставьте сюда ваши данные CloudInit и нажмите ‘Activate’.
  • Вы можете запустить свой сервер, и скрипт выполнится при первой загрузке.

Установка SSH-ключей с помощью CloudInit

Теперь, когда вы знаете, как использовать CloudInit в нашем облаке, давайте применим эти новые знания на практике и установим два SSH-ключа. Мы будем использовать два вымышленных публичных SSH-ключа: ‘ssh-rsa AAA[…] user1@host‘ и ‘ssh-rsa AAA[…] user2@host‘. (Чтобы узнать больше о генерации SSH-ключей, пожалуйста, ознакомьтесь с этой страницей на Github.)

В Ubuntu Cloud Images именем пользователя по умолчанию является ‘ubuntu’. Следовательно, ключи будут установлены в эту учетную запись пользователя.

Конфигурация CloudInit для этого будет выглядеть следующим образом:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Обратите внимание, что пробелы имеют значение. Перед ‘-‘ должно быть два пробела. Если вы поставите только один, сервер может его не прочитать.

После того как вы сохраните конфигурацию CloudInit и загрузите сервер, вы сможете подключиться к нему по SSH под пользователем ‘ubuntu’:

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun Oct 19 21:51:54 UTC 2014

System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]

Установка обновлений системы с помощью CloudInit

Еще одна очень полезная вещь, которую можно легко сделать с помощью CloudInit, — это запуск обновлений системы при первой загрузке. Хотя мы часто обновляем наши образы дисков, все же полезно принять дополнительные меры предосторожности, чтобы ваши системы оставались в актуальном состоянии.

Чтобы установить обновления системы при первой загрузке, добавьте следующее:

[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

Вы также можете заметить, что существует аналогичная опция под названием ‘package_update,’ которая является независимым от дистрибутива псевдонимом для ‘apt_update’ в Ubuntu.

Кроме того, ‘apt_update’ будет установлен в true по умолчанию, если задан параметр ‘packages’ (ниже), но я добавил его выше, чтобы сделать это более явным.

Установка пакетов с помощью CloudInit

Одной из фундаментальных частей начальной настройки систем является возможность установки пакетов при загрузке. К счастью, CloudInit упрощает и это. Все, что нам нужно сделать, это указать список пакетов, которые мы хотим установить, в разделе ‘packages.’ Например, если мы хотим установить ‘python-pip,’ ‘fail2ban’ и ‘vim’, это будет выглядеть следующим образом:

[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]

Опять же, обратите внимание, что пробелы имеют значение. Перед ‘-‘ должно быть два пробела.

Настройка имени хоста (hostname) с помощью CloudInit

При подготовке нового сервера вы также можете захотеть настроить для него имя хоста.

[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Запуск команд при первой загрузке с помощью CloudInit

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

Именно здесь вступают в игру ‘runcmd’ и ‘bootcmd’. Оба они позволяют запускать команды при первой загрузке. Разница в том, что ‘bootcmd’ выполняется на более раннем этапе процесса загрузки, чем ‘runcmd.’

Чтобы использовать любую из этих команд, добавьте следующее в ваш CloudInit:

[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Использование CloudInit с менеджером конфигураций

Наконец, если вы более продвинутый пользователь облака, вы, скорее всего, используете какой-то менеджер конфигураций. К счастью, CloudInit готов к этому. Однако это довольно сложная тема для рассмотрения, учитывая множество переменных.

Итак, вот несколько примеров, которые должны указать вам правильное направление:

Как связать воедино несколько элементов

Для тех, кто не знаком с файлами в стиле YAML, может быть неочевидно, как связать воедино несколько элементов CloudInit. Однако это довольно просто. В первой строке вам нужно ‘#cloud-config‘. После этого вы просто добавляете свою конфигурацию.

Например, объединение всех вышеперечисленных примеров в одну конфигурацию будет выглядеть следующим образом:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Дополнительные ресурсы

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

Если вы хотите узнать больше о CloudInit, я рекомендую следующие источники:

author

Viktor Petersson

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.