###### 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 должна быть запись подобна этой:

Тут должен быть 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 мы с вами не будем но тем немение:

В инструкции также рекомендуется удалить пакет os-proper. Этот пакет позволяет при настройке загрузчика искать установленные на жестком диске ОС и добавять их в меню загрузчика.
Но в некоторых случаях он может добавить в этом меню нашу виртуальную машину. Так что удаляем.
```
apt-get remove os-proper
```
Перезагружаем виртуалку.
```
systemctl reboot
```
А также грохнем лишние ядра. Они не особо мешают. Но меню загрузчика будет красивее =).
```
apt remove linux-image-amd64 'linux-image-5.10*'
```
Обновим grub.
```
update-grub
systemctl reboot
```
Проверяем версию ядра.

Проверяем открыты ли соединения к панели управления.
```
netstat -lpn | grep 8006
```

## Настройка сетевого моста в Proxmox.
Перейдем по ссылке https://ip_adress:8006 .

И так мы видим следующие. Выбираем русский язык интерфейса, область видимости PAM означает что будут использоваться системные пользователи в нашем случае это root пользователь и его пароль для входа в систему.

В принципе уже можно создавать виртуальные машины, но есть нюанс. Они не смогут попасть в локальную сеть.Надо как минимум создать что-то вроде виртуального коммутатора, чтобы можно было виртуалки подключать к сети. В нашем случае роль такого коммутатора будет выполнять интерфейс типа "мост" (bridge).

В левой части страницы выбираем ноду "server". Правее появится меню с параметрами ноды. Там выбираем раздел "Система" -> "Сеть".

Как мы видим у нас там один интерфейс ens33. Других интерфейсов нет. Поэтому виртуальные машины мы будем выпускать в мир через него.
Для этого нам надо собрать мост, где ens33 будет включен в него как один из портов.
Сейчас четко по порядку нужно сделать следующее:
1. Записать куда-то себе параметры ens33 и стереть их все из настроек интерфейса.
2. Создать интерфейс Linux Bridge, вписать в него сетевые параметры из пункта 1 и указать ens3 его портом.
**Если ens33 получает адрес по dhcp, то ничего стирать не нужно.**
Пример настройки моста. Указываем IPv4 адресс интрефейса который имеет доступ в интернет, шлюз и порт который смотрит в интернет.

## Создание виртуальной машины в Proxmox.
Первое что надо сделать это загрузить ISO-образ операционной системы, которую мы будем устанавливать. Для этого нам надо в панели слева внутри ноды server выбрать хранилище (local).

Мы можем загрузить образ с нашего пк кликнув по кнопки "загрузить" или взять прямую ссылку на iso образ в интренете кликнув "Download from URL"

Откроеться окно загрузки.

Перейдем к созданию виртуальной машины. У нас есть два варианта создать VM или создать СТ.

- "Создать VM" - создать виртуальную машину через qemu kvm
- "Создать CT" - создать контейнер средствами LXC
Жмем "Создать VM" и далее пошагово заполняем поля.
Указываем имя виртуальной машины.

Выбираем наш загруженный рание образ.

Тут оставляем все по умолчанию.

Указываем размер диска.

Указываем количество доступных ядер для виртуалки.

Оперативная память.

Настройки сети.

Подтверждение.

Теперь перейдем в ноду и нажмем "start now'

Если получите такую ошибку то скорее вы забыли установить ifdownUP

В настройка сети вы увидите такое уведомление.

Теперь у вас должно все получиться.

Установка не чем не отличаеться любой другой установки ubuntu.

В итоге все установилось.

## Создание контейнера в Proxmox.
Контейнер в некоторых случаях тоже можно использовать как виртуальную машину. Для LXC даже существует несколько образов таких контейнеров.
В терминологии Proxmox (а она пошла от древней-древней технологии OpenVZ) образ контейнера называется Template.
Таких образов у нас тоже в базовой установке нет. Но с их загрузкой все проще.
Переходим в файловое хранилище (local) и выбираем CT Templates. Но вместо "Загрузка" жмем кнопку "Шаблоны". Там выбираем нужный шаблон и отдаем команду на его загрузку на наш сервер.

К примеру ubuntu.

Ожидаем загрузки контейнера.

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

Выбираем шаблон.

Размер диска.

Количество ядер и количество процессов.

Оперативная память.

Сеть. Я тут выбрал dhcp, но вообще обычно задают статику.

DNS сервера.

Подтверждение.

Вообщем на момент написание этой статьи 20.04 образ кривой (там не логинеться под root), поэтому я взял 18.04.
В целом получаем рабочий образ.

Контейнер готов. По сути эти контейнеры из стандартных шаблонов почти как виртуальные машины. Есть конечно ограничения, вроде того, что ядро в контейнере будет только то, на котором поднята хост-система. Но все же для поднятия внутренних сервисов компании ими можно пренебречь.
В контейнер также можно установить Samba или Asterisk или какое-нибудь ПО для создания почтового сервера.
Продолжение: [Proxmox настройка отказоустойчивости.](https://hackmd.io/HtAxFetzRwC1OPs_-I5y4A?view)