User data
User data — это пользовательские данные, которые можно указать при создании облачного сервера. Сценарии или задачи, которые описаны в user data, выполнятся при первом запуске сервера.
Через user data можно настроить параметры конфигурации сервера или установить на нем программное обеспечение. Это помогает сократить время настройки серверов и развертывания инфраструктуры.
Принцип работы
В облачных серверах с дистрибутивами Linux доступ к user data получает агент cloud-init, который выполняет начальную настройку облачного сервера.
В user data можно передать файлы разных форматов, например cloud-config, или bash-скрипт. Подробнее о доступных форматах в документации cloud-init.
Cloud-init можно использовать для:
- установки и обновления пакетов и репозиториев;
- создания директорий;
- настройки сертификатов;
- добавления SSH-ключей;
- указания имени облачного сервера;
- настройки пользователей;
- настройки параметров безопасности;
- инициализации запуска Puppet, Ansible, Chef;
- обновления баз данных.
Ограничения user data
- пользовательские данные используются только при первом запуске облачного сервера;
- это данные типа opaque — вычислительная среда читает и записывает метаданные в любое время в течение времени жизни облачного сервера;
- максимальный размер user data для данных, которые не закодированы в 64-разрядный код, — 16 КБ;
- перед передачей user data через OpenStack CLI и Terraform данные нужно закодировать в 64-разрядный код.
Указать user data
Указать user data можно только при создании облачного сервера: в панели управления, через OpenStack CLI или Terraform.
После создания сервера данные изменить нельзя.
Примеры cloud-config
Файлы cloud-config — это текстовые файлы, которые закодированы в формате base64. Подробнее о cloud-config в официальной документации.
В начале файла нужно указать строку #cloud-config
Запустить команды
Пример скрипта:
#cloud-config
runcmd:
- mkdir /run/mydir
- [ wget, "http://example.com", -O, /run/mydir/index.html ]
Обновить базу репозиториев и установить пакеты
Пример скрипта:
#cloud-config
package_update: true
packages:
- pwgen
- pastebinit
Добавить SSH-ключи
Пример скрипта:
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAAAB3N…V7NZ user1@host
- ssh-rsa AAAAB3N…NtHw== user2@server
Настроить resolv.conf
Пример скрипта:
#cloud-config
manage_resolv_conf: true
resolv_conf:
nameservers: ['8.8.4.4', '8.8.8.8']
searchdomains:
- foo.example.com
- bar.example.com
domain: example.com
options:
rotate: true
timeout: 1
Пример bash-скрипта
Подробнее о bash-скриптах в официальной документации.
В начале файла нужно указать строку #!/bin/sh
#!/bin/sh
apt -y update
apt -y install docker