IP-адрес не назначен с помощью cloud-init

Вопрос или проблема

У меня есть следующая конфигурация cloud-init:

user-data:

#cloud-config
users:
  - name: k8s_user
    gecos: k8s_user
    shell: /bin/bash
    primary_group: k8s
    groups: users
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDX2gcunVOrLn5ULiht/FJo4xHjslWubSG7K5b5YFaF6

package_update: true
package_upgrade: true
packages:
  - ca-certificates
  - curl

runcmd:
 - curl -LsSf https://get.k3s.io | sh -

meta-data:

instance-id: iid-k8s-vm
local-hostname: k8s-vm

network-config:

version: 2
ethernets:
  ens3:
    dhcp4: true

И я хочу использовать это для создания виртуальной машины следующим образом:

genisoimage -output cloud-init.iso -volid cidata -J -R user-data meta-data network-config

virt-install \
  --name k8s-vm \
  --os-variant ubuntu22.04 \
  --vcpus 2 \
  --memory 2048 \
  --disk path=./jammy-server-cloudimg-amd64.img,format=qcow2,bus=virtio \
  --disk path=./cloud-init.iso,device=cdrom \
  --network network=default,model=virtio \
  --graphics none \
  --console pty,target_type=serial \
  --import

Это не работает должным образом, во-первых, во время загрузки я застреваю на Reached target Host and Network Name Lookups. на две минуты, а затем, когда это пропускается, IP-адрес не присвоен виртуальной машине. Почему это происходит? Я предполагаю, что это проблема с libvirtd, но ранее я мог создавать виртуальные машины на той же машине через Terraform, и в тех случаях DHCP работал.

.

Ответ или решение

Теория

Cloud-init — это инструмент, который используется для инициализации виртуальных машин с заданными конфигурациями. Он обеспечивает автоматическую настройку систем, включая управление пользователями, установку пакетов и настройку сети. В вашем случае вы используете cloud-init для создания и конфигурации виртуальной машины (VM) с назначением IP-адреса с помощью DHCP.

Судя по предоставленной информации, вы сталкиваетесь с проблемой, когда ваша VM не получает IP-адрес. Это обычно может быть связано с несколькими факторами:

  1. Причины сети: Плохая конфигурация сети может привести к тому, что DHCP-клиент не получает IP-адрес.
  2. Настройки конфигурации cloud-init: Ошибки в файлах конфигурации могут привести к неверной инициализации.
  3. Проблемы с виртуализатором: Неправильная конфигурация или неполадки с libvirt могут блокировать получение IP.
  4. Проблемы с DHCP-сервером: Даже если VM правильно настроен, оно не сможет получить IP, если DHCP-сервер недоступен или неправильно настроен.

Пример

Рассмотрим ваш файл конфигурации cloud-init и сценарий, используемый для создания VM:

  • Конфигурация пользовательских данных (user-data): Здесь определены настройки, касающиеся пользователей и пакетов, но настройки сети не указаны, что правильно, если вы используете отдельный файл network-config.

  • Конфигурация сетевых данных (network-config): Вы задаете DHCP в версии 2 с используемым интерфейсом ens3.

  • Создание ISO с образом: Генерация ISO-образа с использованием утилиты genisoimage — это успешный и распространенный метод.

  • Распределение ресурсов через virt-install: Вы создаете VM с несколькими параметрами, включая подключение ISO-образа cloud-init через cdrom и указание модели сети virtio.

Применение

Для решения данной проблемы, выполним следующие шаги:

  1. Проверка конфигурации сети:

    • Убедитесь, что network-config действительно выставлен на использовать DHCP для интерфейса ens3. В коде, который вы предоставили, всё правильно настроено, одна это требует, чтобы виртуальная сеть default была правильно настроенной на работу с DHCP.
  2. Проверка DHCP сервера:

    • Убедитесь, что на вашей хост машине и в сети виртуальной машины настроен и запущен DHCP-сервер. Наиболее часто в libvirt используется dnsmasq для предоставления DHCP, и он должен быть активен.
  3. Проверка логов:

    • Изучите логи cloud-init, которые обычно находятся в /var/log/cloud-init.log и /var/log/cloud-init-output.log, чтобы выявить ошибки, связанные с сетью.
    • Проверьте, что виртуальная сеть default активна и действует через virsh net-list и virsh net-info default.
  4. Убедитесь в актуальности VM образа:

    • Проверка правильности образа операционной системы: ваш текущий Hosted VM-образ (jammy-server-cloudimg-amd64.img) должен быть совместим с используемой конфигурацией с версии cloud-init.
  5. Проверка настроек сети внутри VM:

    • После установки убедитесь, что внутри ОС не происходит блокировки сети или есть некорректные маршруты, для этого можно использовать утилиты как ipaddr или ifconfig для диагностики.
  6. Альтернативные проверки:

    • Попробуйте перезагрузить libvirtd и, при необходимости, перезапустить виртуальные сети и убедиться, что ваше сетевое подключение протестировано с другими VM.
    • Рассмотрите использование дополнительной диагностики с tcpdump для мониторинга пакетов DHCP.

Уточнение каждой из этих областей повышает вероятность нахождения источника проблемы, связанной с отсутствием присвоение IP. Также это обеспечит более эффективное устранение проблемы и улучшит понимание работы cloud-init и сетевой подсистемы VM.

Оцените материал
Добавить комментарий

Капча загружается...