База знаний

Как использовать cloud-init для настройки облачных серверов после установки

Инструмент cloud-init позволяет настроить конфигурацию облачного сервера в момент его создания.

Все операционные системы на базе Linux, предоставляемые для серверов проекта CLO, поддерживают инициализацию с помощью cloud-init.

Для инициализации серверов под управлением Microsoft Windows Server используется аналогичная по функциям утилита cloudbase-init.

С помощью cloud-init можно автоматизировать выполнение целого ряда операций над сервером, например:

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

Подготовка скрипта cloud-init для CLO

Данные для cloud-init помещаются в специально подготовленный файл (в дальнейшем — скрипт) инициализации. Скрипты cloud-init записываются в формате YAML.

Подробная информация о конфигурировании cloud-init доступна в официальной документации по ссылке.

Примечание. Для утилиты cloudbase-init, используемой в Microsoft Windows Server, также существует подробное руководство.

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

Вызов cloud-init

Инструмент cloud-init вызывается с помощью программного интерфейса Public API. Скрипт передаётся при создании нового сервера с помощью параметра user_data. Значением этого параметра является строка в формате base64, содержащая закодированный скрипт.

Пример использования cloud-init

Приведённый далее пример скрипта добавляет на сервер ключ для доступа по SSH, который становится доступен при перезагрузке сервера.

Шаг 1. Напишите скрипт инициализации в формате YAML:

#cloud-config
packages:
  - wget
  - pwgen
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnKO3KL0ZCegdL6bRqiiVxcE8ECVCb2yya4OpbZcOYaZXYao/GT9+t+P5pufF5nvkrGgfgh5TJYwGu9lrcZCL+IHh4U9KeacZiHa3IWroC33+2Nu3H+T3mxgofQn49WGDT6Y4Uew9+Gv1sGLVTdut7PjtSwUYyP7e/yoAxkt3qasdfXQahqWrQRNEhCe6lyrTEIuPdHjnkE/FJuifRMFOSmigjdBfff7VsuLRR8F0CIx8dtqYyKEMNVMAe86VzEW0Q1k0Hk+mMQzHbV67CJp6kTlO3hk7QFdPVCcsqbG0EvADBciuVHvbmnWfQOmWhHsiXhdoYlAOqlX/PysYzaDgc+Z some_ssh_key

Шаг 2. Закодируйте текст скрипта в формате base64.

Шаг 3. Сформируйте запрос к API на создание сервера и передайте сформированную строку в теле запроса как значение параметра user_data.

{"name":"cloud_init_test",
 "image": "5f94e693-3917-42fc-802d-51901080712b",
 "flavor": {"vcpus":1, "ram": 2},
 "storages": [{"bootable": true, "size": 10}],
 "addresses": [{"version": 4, "external": true}],
 "user_data": "user_data: I2Nsb3VkLWNvbmZpZwpwYWNrYWdlczoKICAtIHdnZXQKICAtIHB3Z2VuCnNzaF9hdXRob3JpemVkX2tleXM6CiAgLSBzc2gtcnNhIEFBQUFCM056YUMxeWMyRUFBQUFEQVFBQkFBQUJBUURuS08zS0wwWkNlZ2RMNmJScWlpVnhjRThFQ1ZDYjJ5eWE0T3BiWmNPWWFaWFlhby9HVDkrdCtQNXB1ZkY1bnZrckdnZmdoNVRKWXdHdTlscmNaQ0wrSUhoNFU5S2VhY1ppSGEzSVdyb0MzMysyTnUzSCtUM214Z29mUW40OVdHRFQ2WTRVZXc5K0d2MXNHTFZUZHV0N1BqdFN3VVl5UDdlL3lvQXhrdDNxYXNkZlhRYWhxV3JRUk5FaENlNmx5clRFSXVQZEhqbmtFL0ZKdWlmUk1GT1NtaWdqZEJmZmY3VnN1TFJSOEYwQ0l4OGR0cVl5S0VNTlZNQWU4NlZ6RVcwUTFrMEhrK21NUXpIYlY2N0NKcDZrVGxPM2hrN1FGZFBWQ2NzcWJHMEV2QURCY2l1Vkh2Ym1uV2ZRT21XaEhzaVhoZG9ZbEFPcWxYL1B5c1l6YURnYytaIHNvbWVfc3NoX2tleQo="
}

Технические ограничения

Внимание! Ошибочные настройки параметров сервера с помощью cloud-init могут привести к некорректной работе созданного сервера.

Параметр user_data используется для передачи в создаваемые серверы информации о предустановленном ПО и о ключах для доступа по SSH. Поэтому невозможно использовать параметр user_data одновременно с  keypairs и recipe в теле запроса на создание сервера.