Добавить 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