Cloud-init: автоматическая установка hostname для виртуальной машины
Внутри каждого шаблона для виртуальной машины в K2 Cloud установлен cloud-init. Это великолепный инструмент для автоматизации рутинных операций в процессе начального запуска вашей виртуальной машины. В этой статье я расскажу, как автоматизировать установку имени сервера (hostname).
Как работает cloud-init
В каждом публичном Облаке (AWS, GCP, Azure) или частном Облаке (OpenStack или CloudStack) есть так называемый сервис метаданных. Задача этого сервиса предоставлять виртуальной машине информацию об окружении, в котором она запущена. Эта информация обычно как минимум содержит в себе:
- Внутренний IP адрес ВМ
- Публичный IP адрес ВМ
- Имя сервера
- Публичный SSH-ключ
- Тип ВМ
- и т.д.
Сервис метаданных для большинства облачных платформ доступен из виртуальной машины по адресу , получать информацию от которого очень удобно при помощи утилиты 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-ом