Skip to Content
РуководстваNanoclРасширенные возможностиВиртуальная машина

Создание VM

С Nanocl можно быстро запускать виртуальные машины, совместимые с cloud-init .
Большинство облачных образов Linux включает cloud-init, позволяющий настроить сеть, пользователей и ключи SSH внутри VM.

Установка среды выполнения VM по умолчанию

Для удобной работы сети Nanocl запускает виртуальную машину в контейнере, используя стандартный образ nanocl-qemu .

Загрузка Ubuntu и создание диска VM init-контейнером

Nanocl использует путь образа VM напрямую. В Nanocl 0.18 InitContainer VM скачивает облачный образ Ubuntu и создаёт независимый диск qcow2 с qemu-img перед запуском контейнера QEMU. Загрузка и подготовка диска становятся частью жизненного цикла VM вместо ручной подготовки на хосте.

Следующий Statefile создаёт диск web-01 в /var/lib/nanocl/vm. Init-контейнер скачивает Ubuntu Server 24.04 и создаёт записываемую копию web-01.qcow2 через qemu-img convert. VM запускается только после завершения команды с кодом 0.

ApiVersion: v0.18 VirtualMachines: - Name: web-01 Image: /var/lib/nanocl/vm/web-01.qcow2 InitContainer: # Omit Image to use Nanocl's default nanocl-qemu runtime image. Entrypoint: ["sh", "-ec"] Cmd: - | mkdir -p /images test ! -e /images/web-01.qcow2 || { echo "VM disk already exists: /images/web-01.qcow2" >&2 exit 1 } curl -fL \ -o /images/ubuntu-24.04-base.img \ https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img qemu-img convert -p -O qcow2 \ /images/ubuntu-24.04-base.img \ /images/web-01.qcow2 HostConfig: Binds: - /var/lib/nanocl/vm:/images

qemu-img convert создаёт полную независимую копию qcow2; для каждой VM задавайте отдельное имя выходного файла. Проверка наличия предотвращает перезапись диска повторным запуском init-контейнера. Демону Nanocl и среде выполнения VM нужны права записи в /var/lib/nanocl/vm.

Запуск VM

Для запуска виртуальной машины используйте простую команду:

nanocl vm run web-01 /var/lib/nanocl/vm/web-01.qcow2

Используются следующие параметры:

  • web-01 — имя виртуальной машины.
  • /var/lib/nanocl/vm/web-01.qcow2 — полный путь к записываемой копии диска VM.

Без дополнительных параметров VM запускается со стандартными настройками:

  • 1 CPU
  • 500 МБ ОЗУ

Первый запуск со стандартными настройками занимает около 90 секунд. Его можно ускорить, включив KVM и выделив больше ресурсов.

Nanocl не создаёт снимок диска автоматически. Используйте для VM путь скопированного диска, а скачанный базовый образ сохраните как источник будущих копий.

Для наблюдения подключитесь к виртуальной машине командой:

nanocl vm attach web-01

Команда подключает вас к работающей VM для выполнения команд и других действий.

Вы увидите примерно такой вывод:

[ OK ] Finished Permit User Sessions. [ OK ] Started Serial Getty on ttyS0. [ OK ] Reached target Login Prompts. [ OK ] Finished Record successful boot for GRUB. Starting GRUB failed boot detection... [ OK ] Started LSB: automatic crash report generation. [ OK ] Finished GRUB failed boot detection. [ OK ] Finished Pollinate to seed…seudo random number generator. Starting OpenBSD Secure Shell server... [ OK ] Started User Login Management. [ OK ] Started Unattended Upgrades Shutdown. [ OK ] Started OpenBSD Secure Shell server. [ OK ] Started Dispatcher daemon for systemd-networkd. cloud-init[494]: Cloud-init v. 23.1.2-0ubuntu0~22.04.1 running 'modules:config' at Tue, 04 Jul 2023 12:36:13 +0000. Up 78.27 seconds. cloud-init[517]: Cloud-init v. 23.1.2-0ubuntu0~22.04.1 running 'modules:final' at Tue, 04 Jul 2023 12:36:18 +0000. Up 83.19 seconds. cloud-init[515]: The system is finally up, after 93.54 seconds [ OK ] Finished Execute cloud user/final scripts. [ OK ] Reached target Cloud-init target. Ubuntu 22.04.2 LTS 91daefd21c1b ttyS0 91daefd21c1b login:

По умолчанию имя пользователя и пароль — cloud:cloud. Задать учётные данные можно при первом запуске VM. Для большей безопасности настройте ключи SSH. Перед входом дождитесь завершения cloud-init .

Изменение VM

Меняйте производительность VM, изменяя ресурсы, например память и CPU.

Для этого выполните:

nanocl vm patch myvm --kvm --cpu 4 --mem 2048

В команде используются параметры:

  • myvm — имя изменяемой VM.
  • --kvm — включает ускорение KVM.
  • --cpu — задаёт число CPU.
  • --mem — задаёт объём памяти.

Если KVM не включён в системе, уберите параметр —kvm. После изменения снова подключитесь к VM.

Изменение VM остановит и перезапустит её.

Подключение SSH

Если вы не используете Docker Desktop, подключайтесь к VM по IP-адресу. Получите его командой:

nanocl vm inspect myvm

Возьмите IPAddress, здесь это 10.2.0.2. Затем подключитесь по SSH со стандартными данными: cloud:cloud.

Statefile

Определите виртуальную машину в Statefile. Пример:

ApiVersion: v0.18 Namespace: global # See all options: # https://docs.next-hat.com/references/nanocl/objects/virtual-machine VirtualMachines: - Name: myvm Image: /var/lib/nanocl/vm/myvm.qcow2 HostConfig: Cpu: 2 Memory: 2048

Публикация VM

С помощью ProxyRule можно опубликовать порт виртуальной машины. Полный пример публикации порта SSH 22 на публичном порту 5555:

ApiVersion: v0.18 Namespace: global # See all options: # https://docs.next-hat.com/references/nanocl/objects/resource Resources: - Name: myvm.ssh Kind: ncproxy.io/rule/v0.15 Data: Rules: - Protocol: Tcp Network: Public Port: 5555 Target: Key: global.myvm.v Port: 22 # See all options: # https://docs.next-hat.com/references/nanocl/objects/virtual-machine VirtualMachines: - Name: myvm Image: /var/lib/nanocl/vm/myvm.qcow2 HostConfig: Cpu: 2 Memory: 2048
Последнее обновление