Внутри каждого шаблона для виртуальной машины в Облаке КРОК установлен cloud-init. Это великолепный инструмент для автоматизации рутинных операций в процессе начального запуска вашей виртуальной машины. В этой статье я расскажу, как автоматизировать установку имени сервера (hostname).

Как работает cloud-init

В каждом публичном Облаке (AWS, GCP, Azure) или частном Облаке (OpenStack или CloudStack) есть так называемый сервис метаданных. Задача этого сервиса предоставлять виртуальной машине информацию об окружении, в котором она запущена. Эта информация обычно как минимум содержит в себе:

  • Внутренний IP адрес ВМ
  • Публичный IP адрес ВМ
  • Имя сервера
  • Публичный SSH-ключ
  • Тип ВМ
  • и т.д.

Сервис метаданных для большинства облачных платформ доступен из виртуальной машины по адресу http://169.254.169.254/latest/meta-data/, получать информацию от которого очень удобно при помощи утилиты curl. Чтобы посмотреть список доступной вам информации, предоставляемой этим сервисом, выполните команду внутри вашей виртуальной машины, запущенной в Облаке:

curl http://169.254.169.254/latest/meta-data/

Например, ваша виртуальная машина может самостоятельно узнать собственный hostname следующим образом:

curl http://169.254.169.254/latest/meta-data/hostname

Cloud-init в свою очередь представляет собой набор скриптов, поддерживаемых сообществом в актуальном состоянии, который настраивает вашу виртуальную машину на основании информации из сервиса метаданных.

У сервиса метаданных есть одно интересное поле, которое может быть изменено в любой момент жизненного цикла виртуальной машины — «пользовательские данные» (user-data), доступное внутри виртуальной машины по адресу:

curl http://169.254.169.254/latest/user-data

Пользовательские данные сервиса метаданных используются для всевозможной автоматизации ваших шаблонов, например, автоматическая установка в процессе запуска необходимого ПО, задания имени сервера, установка и запуск ПО управления изменениями в конфигурации, т.к. Chef, Puppet или Ansible и т.д.

Сloud-init работает следующим образом: он читает данные настроек «Пользовательских данных» и, если они заданы в формате, который понимает cloud-init, то он может выполнять действия описанные в пользовательских данных, игнорируя настройки сервиса метаданных.

Задание имени хоста при загрузке виртуальной машины

Простейший пример «Пользовательских данных» — это задание имени хоста при загрузке виртуальной машины. Для этого в процессе создания виртуальной машины задайте «Пользовательские данные» следующим образом:

#cloud-config
hostname: node-3
fqdn: node-3.vol.avmaksimov.ru
manage_etc_hosts: true

Описание настроек:

  • #cloud-config — указание на то, что все дальнейшие инструкции предназначены для cloud-init
  • hostname — короткое имя хоста
  • fqdn — полное имя хоста
  • manage_etc_hosts — управлять содержимым файла /etc/hosts. Не забудьте изменить «пользовательские данные» и выставить эту опцию в false, если вам в последствие потребуется изменять содержимое файла /etc/hosts, в противном случае внесенные вами вручную изменения будут стерты после перезагрузки cloud-init-ом