Как использовать 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 в теле запроса на создание сервера.