Устранение неполадок при подготовке виртуальной машины с помощью cloud-init

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который является состоянием "Конец жизни" (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Если вы создали обобщенные пользовательские образы, используя для подготовки cloud-init, но обнаружили, что виртуальная машина создана неправильно, вам потребуется устранить неполадки в пользовательских образах.

Некоторые примеры проблем с подготовкой:

  • Виртуальная машина зависает на "создании" в течение 40 минут, и создание виртуальной машины помечается как неудачное.
  • CustomData не обрабатывается.
  • Не удалось подключить временный диск.
  • Пользователи не создаются или возникают проблемы с доступом пользователей.
  • Сеть не настроена правильно.
  • Сбои файла или секции.

В этой статье описывается устранение неполадок сloud-init. Больше подробностей см. в cloud-init deep dive.

Шаг 1. Тестирование развертывания с помощью customData

Cloud-init может принять передаваемый в нее customData при создании ВМ. Во-первых, следует убедиться, что это не вызывает проблем с развертываниями. Попробуйте подготовить виртуальную машину без передачи какой бы то ни было конфигурации. Если вы обнаружите, что виртуальная машина не подготавливается, выполните описанные ниже действия, если вы обнаружите, что конфигурация, которую вы передаете, не применяется, перейдите к шагу 4.

Шаг 2. Проверка требований к образу

Основная причина сбоя подготовки виртуальной машины — образ ОС не удовлетворяет предварительным требованиям для работы в Azure. Убедитесь, что образы правильно подготовлены, прежде чем пытаться подготовить их в Azure.

В следующих статьях показаны шаги для подготовки различных дистрибутивов Linux, поддерживаемых в Azure.

Для поддерживаемых образов Azure cloud-initдистрибутивы Linux уже имеют все необходимые пакеты и конфигурации, чтобы правильно подготавливать образ в Azure. Если вы обнаружите, что виртуальная машина не может создать данные из собственного проверенного образа, попробуйте использовать поддерживаемый образ Azure Marketplace, который уже настроен для Cloud-init, с необязательным customData. Если приложение customData правильно работает с образом Azure Marketplace, возможно, у вас есть проблемы с проверенным образом.

Шаг 3. Получение & проверки журналов виртуальных машин

Если виртуальная машина не подготовилась к работе, в Azure отобразится состояние "создание" в течение 20 минут. Затем перезагрузите виртуальную машину и подождите еще 20 минут, прежде чем пометить развертывание виртуальной машины как неудачное, прежде чем помечать ее ошибкойOSProvisioningTimedOut.

Пока виртуальная машина запущена, вам понадобятся журналы с виртуальной машины, чтобы понять, почему подготовка не удалась. Чтобы понять, почему не удалось подготовить виртуальную машину, не останавливайте ее. Пусть он продолжает работать. Для получения журналов необходимо сохранить работоспособность виртуальной машины в состоянии выполнения. Чтобы собрать журналы, используйте один из следующих методов.

sudo cat /rescue/var/log/cloud-init*
sudo cat /rescue/var/log/waagent*
sudo cat /rescue/var/log/syslog*
sudo cat /rescue/var/log/rsyslog*
sudo cat /rescue/var/log/messages*
sudo cat /rescue/var/log/kern*
sudo cat /rescue/var/log/dmesg*
sudo cat /rescue/var/log/boot*

Примечание.

Кроме того, можно создать виртуальную машину спасения вручную с помощью портал Azure. Дополнительные сведения см. в статье "Устранение неполадок виртуальной машины Linux путем подключения диска ОС к виртуальной машине восстановления с помощью портал Azure".

Чтобы начать первоначальное устранение неполадок, начните с журналов cloud-init и узнайте, где произошел сбой, а затем используйте другие журналы для углубленного изучения и получения дополнительных сведений.

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log
  • Последовательный журнал/журнал загрузки

Во всех журналах начните поиск по слову "Failed", "WARNING", "WARN", "Err", "Error", "ERROR". Рекомендуется игнорировать регистр при поиске.

Совет

При устранении неполадок с пользовательским образом рекомендуется добавить пользователя во время создания образа. Если при подготовке не удается установить пользователя с правами администратора, вы по-прежнему можете войти в ОС.

Анализ журналов

Ниже приведены дополнительные сведения о том, что следует искать в каждом журнале Cloud-init.

/var/log/cloud-init.log

По умолчанию все события Cloud-init с приоритетом Debug или выше записываются в /var/log/cloud-init.log. Это предоставляет подробные журналы всех событий, произошедших во время инициализации сloud-init.

Например:

2019-10-10 04:51:25,321 - util.py[DEBUG]: Failed mount of '/dev/sr0' as 'auto': Unexpected error while running command.
Command: ['mount', '-o', 'ro,sync', '-t', 'auto', u'/dev/sr0', '/run/cloud-init/tmp/tmpLIrklc']
Exit code: 32
Reason: -
Stdout:
Stderr: mount: unknown filesystem type 'udf'
2020-01-31 00:21:53,352 - DataSourceAzure.py[WARNING]: /dev/sr0 was not mountable

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

2019-10-10 04:51:24,010 - util.py[DEBUG]: Running command ['mount', '-o', 'ro,sync', '-t', 'auto', u'/dev/sr0', '/run/cloud-init/tmp/tmpXXXXX'] with allowed return codes [0] (shell=False, capture=True)

Если у вас есть доступ к последовательной консоли, можно попробовать повторно выполнить команду, которую пытался запустить cloud-init.

Ведение журнала для /var/log/cloud-init.log можно также перенастроить в /etc/cloud/cloud.cfg.d/05_logging.cfg. Дополнительные сведения о журнале cloud-init см. в документации по cloud-init

/var/log/cloud-init-output.log

Вы можете получить сведения из stdout и stderr во время этапов сloud-init. Обычно это включает сведения о таблице маршрутизации, сведения о сети, сведения о проверке ключа узла SSH stdout и stderr для каждого этапа Cloud-init, а также отметку времени для каждого этапа. При необходимости ведение журналов stderr stdout можно перенастроить в /etc/cloud/cloud.cfg.d/05_logging.cfg.

Последовательный журнал/журнал загрузки

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

Если вы по-прежнему не можете изолировать, почему не удалось выполнить инициализацию Cloud-init, необходимо понять, какие этапы Cloud-init и когда работают модули. Дополнительные сведения см. в статье Подробнее о Cloud-init.

Шаг 4. Выясните, почему конфигурация не применяется

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

  • runcmd — запускаются ли сценарии без ошибок? Запустите конфигурацию вручную из терминала, чтобы убедиться, что они выполняются должным образом.
  • Установка пакетов. у виртуальной машины есть доступ к репозиториям пакетов?
  • Кроме того, проверьте конфигурацию данных customData, предоставленную виртуальной машине, которая находится в папке /var/lib/cloud/instances/<unique-instance-identifier>/user-data.txt.

Следующие шаги

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