###### tags: Linux, KVM, Proxmox. # Установка и настройка KVM + Proxmox. В этой заметки: Установка KVM с веб панелью Proxmox, создание виртуальной машины, создание контейнера LXC. ## Немного теории. KVM (Kernel-based Virtual Machine). Эта система виртуализации появилась вслед за тем, как Intel и AMD добавили в свои процессоры аппаратную виртуализацию. KVM это программный комплекс. Он состоит из модуля ядра Linux, проекта qemu и проекта libvirt. Модуль ядра kvm.ko дает интерфейс доступа к памяти, в т.ч. и для эмуляции устройств. Проект libvirt специализируется на эмуляции устройств, а вот qemu это как раз ПО для создания виртуальных машин. Qemu и без этого всего умеет эмулировать устройства и даже процессоры разной архитектуры. Но благодаря kvm и libvirt скорость работы виртуальный машин qemu становится приемлемой для повседневного использования. Существует большое количество утилит для управления всем этим хозяйством. Вот только малый список - virsh, virt-manager, oVirt, GKVM, QtEmu и т.д. На этом фоне неплохо выделяется панель управления сервером Proxmox. На самом деле Proxmox это не просто какая-то там панелька управления. Это целый программный комплекс, который позволяет управлять виртуальными машинами на базе qemu-kvm, а также создавать контейнеры на базе LXC. Серверы под управлением Proxmox можно объединять в кластер. А из панели можно управлять практически всеми параметрами сервера - сеть, дисковые хранилища, файрвол и т.д. Очень удобно и почти не надо лазать в консоль. ## Установка Proxmox. Есть два пути установки: 1. Есть специально собранный дистрибутив Proxmox. 2. Установить панель из внешнего репозитория на сервер с Debian. Кстати особеность Proxmox в том, что для него поддерживается репозиторий только для дистрибутива Debian. Поэтому в этот раз забудем про убунту и поставим на сервер **Debian** 11 Bullseye. Установку лучше проводить на какой-нибудь старый ПК или ноутбук. На виртуалках замеченно много багов. Старый ноутбук с 4 гб и 2 ядрами должен подойти. У меня нету такого устройтва, поэтому установим на виртуалку (к слову надо сказать у меня все работает). Я использую VMware Workstation. Воспользуемся официальной докой по установке: https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_11_Bullseye Первым делом открываем файл /etc/hosts ``` nano /etc/hosts ``` Обычно после установки там уже все хорошо, но на всякий случай проверим. В файле hosts должна быть запись подобна этой: ![](https://i.imgur.com/mFUBEGn.png) Тут должен быть ip-адрес вашей виртуалки и ее хостнейм. Без этого панель будет работать некорректно. Теперь подключаем репозиторий. ``` echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg apt update && apt full-upgrade ``` После завершения апгрейда выполняем установки минимально необходимых пакетов: ``` apt install proxmox-ve postfix open-iscsi ifupdown2 ``` По официальной документации нам рекомендуеться использовать postfix в режиме системы спутник. Это режим в которым postfix выступает в роли агента пересылки почты использую ваш аккаунт (к примеру gmail). Настраивать Postfix мы с вами не будем но тем немение: ![](https://i.imgur.com/cDE8bkG.png) В инструкции также рекомендуется удалить пакет os-proper. Этот пакет позволяет при настройке загрузчика искать установленные на жестком диске ОС и добавять их в меню загрузчика. Но в некоторых случаях он может добавить в этом меню нашу виртуальную машину. Так что удаляем. ``` apt-get remove os-proper ``` Перезагружаем виртуалку. ``` systemctl reboot ``` А также грохнем лишние ядра. Они не особо мешают. Но меню загрузчика будет красивее =). ``` apt remove linux-image-amd64 'linux-image-5.10*' ``` Обновим grub. ``` update-grub systemctl reboot ``` Проверяем версию ядра. ![](https://i.imgur.com/h0dYt6j.png) Проверяем открыты ли соединения к панели управления. ``` netstat -lpn | grep 8006 ``` ![](https://i.imgur.com/bFEkA6V.png) ## Настройка сетевого моста в Proxmox. Перейдем по ссылке https://ip_adress:8006 . ![](https://i.imgur.com/kQguB5f.png) И так мы видим следующие. Выбираем русский язык интерфейса, область видимости PAM означает что будут использоваться системные пользователи в нашем случае это root пользователь и его пароль для входа в систему. ![](https://i.imgur.com/KzbxSbi.png) В принципе уже можно создавать виртуальные машины, но есть нюанс. Они не смогут попасть в локальную сеть.Надо как минимум создать что-то вроде виртуального коммутатора, чтобы можно было виртуалки подключать к сети. В нашем случае роль такого коммутатора будет выполнять интерфейс типа "мост" (bridge). ![](https://i.imgur.com/OWMulS7.png) В левой части страницы выбираем ноду "server". Правее появится меню с параметрами ноды. Там выбираем раздел "Система" -> "Сеть". ![](https://i.imgur.com/XqeiB7e.png) Как мы видим у нас там один интерфейс ens33. Других интерфейсов нет. Поэтому виртуальные машины мы будем выпускать в мир через него. Для этого нам надо собрать мост, где ens33 будет включен в него как один из портов. Сейчас четко по порядку нужно сделать следующее: 1. Записать куда-то себе параметры ens33 и стереть их все из настроек интерфейса. 2. Создать интерфейс Linux Bridge, вписать в него сетевые параметры из пункта 1 и указать ens3 его портом. **Если ens33 получает адрес по dhcp, то ничего стирать не нужно.** Пример настройки моста. Указываем IPv4 адресс интрефейса который имеет доступ в интернет, шлюз и порт который смотрит в интернет. ![](https://i.imgur.com/PXjzQQS.png) ## Создание виртуальной машины в Proxmox. Первое что надо сделать это загрузить ISO-образ операционной системы, которую мы будем устанавливать. Для этого нам надо в панели слева внутри ноды server выбрать хранилище (local). ![](https://i.imgur.com/53KiWiT.png) Мы можем загрузить образ с нашего пк кликнув по кнопки "загрузить" или взять прямую ссылку на iso образ в интренете кликнув "Download from URL" ![](https://i.imgur.com/u5RnrTE.png) Откроеться окно загрузки. ![](https://i.imgur.com/tjro5Tw.png) Перейдем к созданию виртуальной машины. У нас есть два варианта создать VM или создать СТ. ![](https://i.imgur.com/naL6YR1.png) - "Создать VM" - создать виртуальную машину через qemu kvm - "Создать CT" - создать контейнер средствами LXC Жмем "Создать VM" и далее пошагово заполняем поля. Указываем имя виртуальной машины. ![](https://i.imgur.com/vILaSlt.png) Выбираем наш загруженный рание образ. ![](https://i.imgur.com/a4ks1X1.png) Тут оставляем все по умолчанию. ![](https://i.imgur.com/psasAaD.png) Указываем размер диска. ![](https://i.imgur.com/c8YtvLk.png) Указываем количество доступных ядер для виртуалки. ![](https://i.imgur.com/TWUHQ8y.png) Оперативная память. ![](https://i.imgur.com/oFB9XBg.png) Настройки сети. ![](https://i.imgur.com/NpRdFFB.png) Подтверждение. ![](https://i.imgur.com/Xu9okYf.png) Теперь перейдем в ноду и нажмем "start now' ![](https://i.imgur.com/WDseKma.png) Если получите такую ошибку то скорее вы забыли установить ifdownUP ![](https://i.imgur.com/Rr9rJhN.png) В настройка сети вы увидите такое уведомление. ![](https://i.imgur.com/zKLRCkp.png) Теперь у вас должно все получиться. ![](https://i.imgur.com/czrlTyw.png) Установка не чем не отличаеться любой другой установки ubuntu. ![](https://i.imgur.com/oSGzvDP.png) В итоге все установилось. ![](https://i.imgur.com/MXFhNzE.png) ## Создание контейнера в Proxmox. Контейнер в некоторых случаях тоже можно использовать как виртуальную машину. Для LXC даже существует несколько образов таких контейнеров. В терминологии Proxmox (а она пошла от древней-древней технологии OpenVZ) образ контейнера называется Template. Таких образов у нас тоже в базовой установке нет. Но с их загрузкой все проще. Переходим в файловое хранилище (local) и выбираем CT Templates. Но вместо "Загрузка" жмем кнопку "Шаблоны". Там выбираем нужный шаблон и отдаем команду на его загрузку на наш сервер. ![](https://i.imgur.com/MFWGBxT.png) К примеру ubuntu. ![](https://i.imgur.com/ghz0cZP.png) Ожидаем загрузки контейнера. ![](https://i.imgur.com/9DYDi4W.png) Как только шаблон загрузился, можно жать "Создать СТ". Создание контейнера похоже на создание виртуальной машины. Однако есть и отличия. Указываем имя хоста и задаем пароль. ![](https://i.imgur.com/4jnwcVZ.png) Выбираем шаблон. ![](https://i.imgur.com/Za29xP7.png) Размер диска. ![](https://i.imgur.com/vDiCZQN.png) Количество ядер и количество процессов. ![](https://i.imgur.com/BFzXzmn.png) Оперативная память. ![](https://i.imgur.com/UB1UAvX.png) Сеть. Я тут выбрал dhcp, но вообще обычно задают статику. ![](https://i.imgur.com/xNluRO8.png) DNS сервера. ![](https://i.imgur.com/NoowdN2.png) Подтверждение. ![](https://i.imgur.com/55VNlOc.png) Вообщем на момент написание этой статьи 20.04 образ кривой (там не логинеться под root), поэтому я взял 18.04. В целом получаем рабочий образ. ![](https://i.imgur.com/Mq8p0JQ.png) Контейнер готов. По сути эти контейнеры из стандартных шаблонов почти как виртуальные машины. Есть конечно ограничения, вроде того, что ядро в контейнере будет только то, на котором поднята хост-система. Но все же для поднятия внутренних сервисов компании ими можно пренебречь. В контейнер также можно установить Samba или Asterisk или какое-нибудь ПО для создания почтового сервера. Продолжение: [Proxmox настройка отказоустойчивости.](https://hackmd.io/HtAxFetzRwC1OPs_-I5y4A?view)