Найти в Дзене

Виртуализация в Linux

Короче, что такое виртуальность? Это когда ты делаешь вид, что работаешь в Интернете, а на самом деле смотришь сериал.
(С) Балобоба, искусственный интеллект Яндекса. Одной из важнейших технологий, стоящей за улучшениями в предоставлении многих сервисов, является визуализация. И Linux - та операционная система, на которой работает большинство виртуальных рабочих нагрузок. Она позволяет эффективно использовать вычислительные ресурсы, автоматически выделяя их из одного физического сервера или целого пула таких серверов на время выполнения определённых задач и высвобождая их, когда задача выполнена. Можно безопасно разделять память, хранилище и сетевые средства высокопроизводительных машин между несколькими сервисами и даже создавать на их основе экземпляры виртуальных серверов. Услуги по их предоставлению называются арендой VPS (Virtual Private Server) и VDS (Virtual Dedicated Server), которые отличаются друг от друга используемыми технологиями виртуализации. В настоящее время существуе
Короче, что такое виртуальность? Это когда ты делаешь вид, что работаешь в Интернете, а на самом деле смотришь сериал.
(С) Балобоба, искусственный интеллект Яндекса.
Рис. Fusion Brain: IT-специалист виртуально работает на дому.
Рис. Fusion Brain: IT-специалист виртуально работает на дому.

Одной из важнейших технологий, стоящей за улучшениями в предоставлении многих сервисов, является визуализация. И Linux - та операционная система, на которой работает большинство виртуальных рабочих нагрузок. Она позволяет эффективно использовать вычислительные ресурсы, автоматически выделяя их из одного физического сервера или целого пула таких серверов на время выполнения определённых задач и высвобождая их, когда задача выполнена. Можно безопасно разделять память, хранилище и сетевые средства высокопроизводительных машин между несколькими сервисами и даже создавать на их основе экземпляры виртуальных серверов. Услуги по их предоставлению называются арендой VPS (Virtual Private Server) и VDS (Virtual Dedicated Server), которые отличаются друг от друга используемыми технологиями виртуализации.

Виды виртуализации (отличия между VPS и VDS).
Виды виртуализации (отличия между VPS и VDS).

В настоящее время существует два основных средства виртуализации:

  • Гипервизоры - в той или иной степени управляют оборудованием хост-системы, предоставляя каждой гостевой ОС необходимые ей ресурсы. Гостевые машины запускаются как системные процессы, но с виртуализированным доступом к аппаратным ресурсам. Этот подход реализует полную (аппаратную) виртуализацию, в частности называемую KVM (Kernel-based Virtual Machine) и позволяет запускать виртуальные машины с отдельными экземплярами операционной системы на физическом сервере. Каждая виртуальная машина KVM имеет собственное виртуальное аппаратное обеспечение и ядро операционной системы. Часто именно эта технология подразумевается, когда речь идёт о VDS-сервере. Существует различные реализации технологии этого типа - VMware ESX, Xen, Microsoft Hyper-V, Virtual Box, Gnome Boxes, QEMU и т.д.
Гипервизоры и Контейнеры - виртуализация доступа к оборудованию и виртуализация доступа к ОС
Гипервизоры и Контейнеры - виртуализация доступа к оборудованию и виртуализация доступа к ОС
  • Контейнеры - чрезвычайно лёгкие виртуальные серверы, которые вместо того, чтобы работать как полноценные операционные системы, совместно используют ядро своей хостовой машины. Контейнеры могут быть построены на базе текстовых сценариев, созданы и запущены за считанные секунды, а также легко доступны для совместного использования в сетях. Самая известная реализация контейнерной технологии - Docker. Существуют также и другие - LXC (Linux Container), OpenVZ. Последняя часто ассоциируется с сервисами VPS, позволяя запускать несколько изолированных экземпляров операционной системы на одном физическом сервере. Каждый контейнер OpenVZ использует общее ядро операционной системы хоста, что делает его более эффективным по ресурсам и обеспечивает более высокую плотность виртуализации. Однако, из-за общего ядра, контейнеры в OpenVZ могут быть совместимы только с одной операционной системой.
Архитектура KVM виртуализации
Архитектура KVM виртуализации

Полномасштабные гипервизоры, такие как Xen и KVM обычно используются для развёртывания на уровне предприятия. Для тестирования и экспериментов лучше подходят Virtual Box и Gnome Boxes. Контейнерные технологии, такие как LXC и Docker часто используются для обкатки новых технологий и безопасного создания стеков программного обеспечения ОС.

Установка данных средств на компьютер с Linux мало чем отличается от установки других программ:
- установить Virtual Box в Ubuntu:
sudo apt install virtualbox
- установить Gnome Boxes:
sudo apt install gnome-boxes
- установить LXC:
sudo apt install lxc

Но можно пощупать виртуализацию за вымя и обратившись к поставщикам соответствующих услуг. Благо в настоящее время имеется их широкий выбор по ценам и возможностям. Поиск в Яндексе привёл меня (после фильтрации по минимальной цене), например, к таким результатам:
1. Timeweb Cloud —IT-решения в облаке
https://timeweb.cloud/

Минимальные тарифы Timeweb Cloud
Минимальные тарифы Timeweb Cloud

2. ESTT - услуги дата-центра, связи и бизнес-решения
https://estt.ru/

Минимальные тарифы ESTT
Минимальные тарифы ESTT

3. 4VPS - услуги хостинга, аренда VPS/VDS и выделенных серверов
https://4vps.su/

Минимальные тарифы 4VPS
Минимальные тарифы 4VPS

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

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

Итак, чтобы приобщиться к технологиям виртуализации, регистрируюсь на странице
https://4vps.su/account/login и оплачиваю по тарифу LP-cx01 (80 рублей/месяц) аренду VPS на базе сервера 2xE5-2670v2, расположенного в Новосибирске.

Процесс формирования заказа
Процесс формирования заказа

В процессе оформления заказа можно выбрать вариант предустановленной ОС на сервере. Но я выбрал NoOS специально, чтобы опробовать возможность установки произвольного образа.

Пополнение счёта
Пополнение счёта

Чтобы заказ состоялся, на счету клиента должны быть тити-мити в достаточном количестве. Это можно организовать посредством банковских карт, СБП и электронных кошельков.

Личный кабинет и страница информации о сервера
Личный кабинет и страница информации о сервера

И вот я захожу на страницу доступных мне серверов. Там я вижу различные пункты меню из которых меня пока что интересует как раз открытая: Сервера. То что мне нужно - название моего сервера: "Inventive-ink-service". Это ссылка, нажав на которую можно открыть страницу с подробной информацией о нём и настройками. Здесь есть одна полезная на текущий момент кнопка: "Перейти в панель VM", её-то я и нажимаю. В результате в отдельной вкладке браузера открывается Страница VMmanger для управления сервером (кстати, он открывается в браузере Chromium, но почему-то не в браузере Firefox). Здесь тоже есть ссылка с названием моего сервера. Если её нажать, то на странице появится информация об уровне использования доступных вычислительных ресурсов (vCPU, RAM, Storage), также выделенный IP адрес, доменное имя, установленная ос и тип кластера - KVM.

 Получение данных для настройки сети
Получение данных для настройки сети

Но пока что более важной для продолжения работы является кнопка "Parameters". Если на неё нажать появятся дополнительные пункты меню, позволяющие уточнить информацию и произвести настройки. Конкретно пригодиться пункт "IP adresses", нажав на который можно узнать IP-адрес, маску и шлюз, которые отдельно нигде больше не сообщаются, а для настройки сети они нужны.

Монтирование образа дистрибутива Linux
Монтирование образа дистрибутива Linux

Чтобы установить дистрибутив, нужно сначала заиметь какой-нибудь ISO-образ и смонтировать его.

Подходящий образ можно найти на зеркале Яндекса:
https://mirror.yandex.ru/archlinux/iso/2023.07.01/archlinux-x86_64.iso
Но скачивать его не нужно, достаточно будет указать ссылку. Для этого на страничке VMmanager нужно нажать кнопку "Menu" в правом верхнем углу и выбрать пункт "Mount ISO-image". Когда процесс монтирования звершится, в столбце статус появится надпись: "ISO-image is mounted". После этого нужно снова нажать "Menu" и выбрать пункт "VNC", для того чтобы подключиться к своему серверу для работы в режиме командной строки.

Запустится копия окна терминала в браузере, активировать которое можно наведя курсор мыши в эту область и сделав щелчок левой клавишей (если курсора не видно, это не значит что его нет). После этого нужно настроить сеть, поскольку по умолчанию DHCP сервис не настроен как надо. Это можно сделать с помощью команды ip.

Вводим сначала ip a, чтобы узнать доступные сетевые интерфейсы и их состояние. Помимо петли lo имеется ens3, который не имеет IP адреса и вообще выключен.
Затем добавляем к нему свой IP-адрес, маску, шлюз:
ip addr add 193.233.18.65/24 dev ens3
ip route add default via 193.233.18.1
Включаем интерфейс:
ip link set dev ens3 up
Проверяем что получилось, введя команду: ping -c 5 archlinux.org.

Проверка работоспособности сети с помощью команды ping
Проверка работоспособности сети с помощью команды ping

Сеть работает, значит всё необходимое для начала установки имеется.
Добавим русскую раскладку клавиатуры:
loadkeys ru
И загрузим шрифт с поддержкой русского языка:
setfont cyr-sun16
Включаяем синхронизацию времени через интернет:
timedatectl set-ntp true
Устанавливаем синхронизацию времени через Интернет:
timedatectl set-ntp true
Устанавливаем часовой пояс:
timedatectl set-timezone Europe/Moscow
Для проверки времени используется команда:
timedatectl status

Проверка настройки времени
Проверка настройки времени

Теперь можно переходить к более приземлённым вещам - разметке диска и установке на него важных программ.

Для начала нужно заглянуть в каталог /dev чтобы узнать, что там у нас имеется. То что надо для последующих действий - блочное устройство vda - это выделенный моему серверу диск на 5GB (убедиться в том, что это именно он можно с помощью команды lsblk).

Просмотр доступных устройств хранения в каталоге /dev
Просмотр доступных устройств хранения в каталоге /dev

Для подготовки этого диска к использованию я скормлю его программе parted: parted /dev/vda
Запустится диалоговый режим работы этой программы. В нём можно создавать и удалять разделы диска, присваивать им типы и названия и т.д. Все изменения происходят сразу же, поэтому нужно внимательно смотреть что будет введено. Задача состоит в том чтобы создать три раздела: корневой (root) для системы, подкачки (swap) и загрузочный (boot).

Вводим команды:
mkpart primary ext4 0% 4096M
mkpart primary linux-swap 4096M 5360M
mkpart primary ext2 5360M - 0M
name 1 root
name 2 swap
name 3 boot
set 1 boot on

Проверяем что получилось, введя команду
print.
Выходим, введя команду
quit

Результаты разметки диска программой parted - создано 3 раздела: root, swap и boot
Результаты разметки диска программой parted - создано 3 раздела: root, swap и boot

Программа подсказывает что надо сделать дальше: "You may need to update /etc/fstab". Но мы пойдём другим путём.

Сначала выполним форматирование корневого и загрузочного разделов:
mkfs -t ext4 /dev/vda1
mkfs -t ext2 /dev/vda3
Инициализируем и включаем файл подкачки:
mkswap /dev/vda2
swapon /dev/vda2

Теперь смонтируем корневой раздел /dev/vda1 в каталог /mnt:
mount /dev/vda1 /mnt

Во время установки из интернета загружаются пакеты, для ускорения загрузки которых рекомендуется выбрать географически ближайший сервер-зеркало, чтобы загрузка происходила быстрее. Его можно указать в файле /etc/pacman.d/mirrorlist. Чем выше в списке расположен сервер, тем выше его приоритет, поэтому свою запись нужно разместить в первой строке.

Добавление зеркала Яндкса с помощью команды nano /etc/pacman.d/mirrorlist
Добавление зеркала Яндкса с помощью команды nano /etc/pacman.d/mirrorlist

Добавим первой строкой зеркало Yandex:
Server =
https://mirror.yandex.ru/archlinux/$repo/os/$arch

Перед непосредственно установкой, во избежание ошибок нужно обновить состояние gpg-ключей:
killall gpg-agent
mkdir -p ~/.gnupg/private-keys-v1.d
chmod 700 ~/.gnupg/private-keys-v1.d
gpg --refresh-keys
pacman-key --init && pacman-key --populate
pacman-key --refresh-keys
Если всё прошло без ошибок, то подготовительная часть окончена.

Теперь можно выполнить установку основных пакетов base, для этого выполните команду:
pacstrap /mnt base linux linux-firmware

Процесс установки системы
Процесс установки системы

Теперь дошла очередь и до файла fstab:
genfstab -L /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab

Содержимое файла fstab
Содержимое файла fstab

Система установлена и для её дальнейшей настройки нужно войти в неё, но без перезагрузки, потому что загрузчик и сеть в ней ещё не готовы.Для этого можно воспользоваться скриптом arch-chroot, чтобы сменить корневой каталог. Мы переключимся на каталог /mnt, в который у нас примонтирован корневой раздел диска.
Вводим команду:
arch-chroot /mnt

По умолчанию в системе отсутствует такая полезная программа как mc.
Для её установки необходимо выполнить команду:
pacman -S mc

Также будет не лишним сразу установить клиентскую программу dhcpcd для автоматического подключения к сети:
pacman -S dhcpcd

Настроим часовой пояс:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Далее необходимо настроить способ синхронизации системного времени между перезагрузками. Есть два способа UTC и localtime. В данном случае можно брать utc:
hwclock --systohc --utc

Язык, который использует система, определяется локалью. Помимо языка интерфейса локаль определяет и форматы чисел, времени, даты и некоторые другие региональные особенности. Для поддержки русского и/или других языков необходимо раскомментировать соответствующие строки (локали) в файле /etc/locale.gen.

Добавление поддержки русского языка
Добавление поддержки русского языка

Открываем файл для редактирования:
mcedit /etc/locale.gen
Я раскомментировал строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

Теперь генерируем локали. Для этого выполняем команду:
locale-gen

Включаем русский язык:
echo "LANG=ru_RU.UTF-8" > /etc/locale.conf

Также добавим русскую раскладку клавиатуры для консоли и шрифт с поддержкой кириллицы:
mcedit /etc/vconsole.conf
KEYMAP=ru
FONT=UniCyr_8x16
Все доступные шрифты можно найти в папке:
/usr/share/kbd/consolefonts/

Зададим имя компьютера:
echo "Inventive-ink-service" > /etc/hostname

Теперь добавим имя нашего компьютера в файл /etc/hosts:
mcedit /etc/hosts
127.0.0.1 localhost
::1 localhost
193.233.18.65 Inventive-ink-service.localdamin Inventive

В некоторых случаях ядру необходима начальная файловая система initcpio. Arch Linux не настроен, чтобы работать без этого образа, поэтому его нужно создать:
mkinitcpio -plinux

Чтобы войти в систему, также нужен как минимум задать пароль суперпользователя. Для этого выполним команду:
passwd
Вводим пароль и подтверждение пароля.

Также не лишним будет добавить обычного пользователя для работы в системе. Добавим его:
useradd -m -g users -G wheel -s /bin/bash user1

Здесь -g указывает основную группу, -G - дополнительные, группа wheel даёт возможность использовать команду sudo, больше пока не нужно. Параметр -s задаёт командную оболочку, а последний параметр - имя пользователя.

Теперь необходимо создать пароль для этого пользователя:
passwd user1

Заключительные штрихи - устанавливаем загрузчик:
pacman -S grub
grub-install /dev/vda

Процесс установки загрузчика grub
Процесс установки загрузчика grub

Создаём конфигурационный файл загрузчика:
grub-mkconfig -o /boot/grub/grub.cfg

Выходим из окружения chroot, выполнив команду:
exit

Перезагружаем компьютер, выполнив:
reboot

Теперь возвращаемся на странуцу VManager и выбираем пункт меню "Stop". Размонтируем ISO-образ, не забыв снять галочку с пункта, указывающего на то, что система вернётся в изначальное состояние.

После этого заново запускаем сервер. Покдючаемся к нему по VNC и проверяем работоспособность.

Для начала что там с сетью:
ip a

Проверка настроек сети
Проверка настроек сети

Видим, что сеть не настроена. Поэтому открываем файл dhcpcd.conf и вносим в него необходимые правки:
mcedit /etc/dhcpcd.conf
И дописываем в конец этого файла строчки:
noipv6rs
noipv6
static ip_address=193.233.18.65/24
static_routers=193.233.18.1

Запускаем серврвис dhcpcd:
systemctl start dhcpcd.service
Включаем его в автозагрузку:
systemctl enable dhcpcd.service
Проверяем статус:
systenctl status dhcpd.service

Статус сервиса dhcpcd
Статус сервиса dhcpcd

Смотрим как происходит разрешение имён хостов:
mcedit /etc/nsswitch.conf

Содержимое файла nsswitch.conf
Содержимое файла nsswitch.conf

Строчка hosts: files resolve dns означает, что сначала для разрешения имён будет использован файл /etc/hosts, а затем, если это не даст результатов, будет задействована служба systemd-resolved, и, наконец, если это тоже не даст результатов, будут использованы DNS-серверы, указанные в /etc/resolv.conf

Редактируем соотетствующие файлы.
mcedit /etc/systemd/resolved.conf
Добавляем строчку:
DNS= 8.8.8.8 8.8.4.4

Конфигурационный файл resolved.conf
Конфигурационный файл resolved.conf

mcedit /etc/resolv.conf
Добавляем строчку: nameserver=127.0.0.53

Содержимое файла resolv.conf
Содержимое файла resolv.conf

Запускаем службу разрешения имён systemd-resolved:
systemctl start systemd-resolved.service
Добавляем в автозапуск:
systemctl enable systemd-resolved.service
Проверяем статус:
systemctl status systemd-resolved.service

Статус службы systemd-resolved
Статус службы systemd-resolved

Проверяем что получилось:
ping -c 5 ya.ru

Система уже работает. Осталось устранить мелкие недочёты, о которых информирует VManager: "Problem with Guest Agent". Для этого нужно открыть данную ссылку и будет предложена автоматическая установка. Однако что-то пошло не так, поскольку выдаётся ошибка: Error #3012 "Internal-Auth JSON must have integer 'owner_id' field in it" .

Установка QEMU Guest Agent в автоматическом режиме
Установка QEMU Guest Agent в автоматическом режиме

Поэтому возвращаемся VNC режим и вводим команду:
pacman -S qemu-guest-agent

Процесс ручной установки QEMU Guest Agent
Процесс ручной установки QEMU Guest Agent

Находим соответствующий сервис:
ls /usr/lib/systemd/system/ | grep qemu
Презапускаем сервис:
systemctl restart qemu-guest-agent.service
Проверяем его статус:
systemctl status qemu-guest-agent.service

Статус QEMU Guest Agent
Статус QEMU Guest Agent

На этом всё, теперь виртуальный сервер готов к работе.

В подготовке материала помимо меня и Балабобы Яндекса были использованы:
1. Дэвид Клинтон "Linux в действии".
2. Установка ArhLinux
https://pingvinus.ru/note/archlinux-install
3. Ресурсы losst.pro, zalinux.ru, docs.ispsystem.com, timeweb.cloud/tutorials

Все картинки, загруженные из Интернета, принадлежат их авторам.