Архив метки: Виртуализация

LXC (LXD) контейнер в Ubuntu 20.04 LTS

Но сперва поговорим что же такое LXC и в чем разница от обычных виртуальных машин (KVM) у данного способа. Виртуализация KVM позволяет загружать полные операционные системы разных виды, даже не-Linux-системы. Тем не менее, сложная установка иногда необходимо. Виртуальные машины являются ресурсоемкими, поэтому вы можете запускать только ограниченное количество из них на главной машине. LXC или Linux Containers – это легкие и портативные операционные системы на базе ОС, которые совместно используют ядро ​​базовой операционной системы, но в то же время действуют как изолированные среды с собственной файловой системой, процессами и стеком TCP/IP. Поскольку нет накладных расходов на виртуализацию, они работают намного лучше, чем виртуальные машины. Для себя же я решил использовать виртуализацию LXC, т.к. она менее ресурсопрожорливая.




Установка LXC (LXD) на Ubuntu/Debian




Войдите на сервер, используя учетную запись пользователя с доступом sudo.




В свежей Ubuntu версии, по умолчанию, уже встроен lxd. У кого не так то устанавливаем командой:




sudo apt install lxd




Затем добавьте пользователя в группу lxd, чтобы он мог выполнять задачи по управлению контейнерами:




sudo usermod --append --groups lxd smirnov




Чтобы включить поддержку ZFS в LXD, обновите индекс пакетов и установите пакет zfsutils-linux:




sudo apt-get update
sudo apt-get install zfsutils-linux




Выбор файловой системы для Storage Pool 




Во время инициализации LXD задаёт несколько вопросов, среди которых будет определение типа файловой системы для дефолтного Storage Pool. По умолчанию для него выбирается файловая система BTRFS. Поменять на другую ФС после создания будет невозможно. Для выбора ФС предлагается таблица сравнения возможностей:




FeatureDirectoryBtrfsLVMZFSCEPH
Optimized image storagenoyesyesyesyes
Optimized instance creationnoyesyesyesyes
Optimized snapshot creationnoyesyesyesyes
Optimized image transfernoyesnoyesyes
Optimized instance transfernoyesnoyesyes
Copy on writenoyesyesyesyes
Block basednonoyesnoyes
Instant cloningnoyesyesyesyes
Storage driver usable inside a containeryesyesnonono
Restore from older snapshots (not latest)yesyesyesnoyes
Storage quotasyes(*)yesyesyesno




процесс инициализации Storage Pool




После того как вы решили какое backend хранилище использовать, начинайте процесс инициализации. Делается это командой:




lxd init




Утилита будет задавать вопросы, на которые вам нужно будет ответить. Первым вопросом утилита спросит: Хотите ли вы использовать кластеризацию LXD?




Would you like to use LXD clustering? (yes/no) [default=no]:




Вы хотите настроить новый пул хранения данных?




Do you want to configure a new storage pool? (yes/no) [default=yes]:




Имя нового пула




Name of the new storage pool [default=default]: ssdpool




какой тип хранилища использовать?




Name of the storage backend to use (dir, lvm, ceph, btrfs) [default=btrfs]:




Создать новый пул BTRFS?




Create a new BTRFS pool? (yes/no) [default=yes]:




Хотите ли вы использовать существующее блочное устройство?




Would you like to use an existing block device? no




Размер в ГБ нового устройства loop




Size in GB of the new loop device (1GB minimum) [default=15GB]: 30




Вы хотите подключиться к серверу MAAS?




Would you like to connect to a MAAS server? (yes/no) [default=no]: 




Хотите ли вы создать новый мост локальной сети?




Would you like to create a new local network bridge? (yes/no) [default=yes]: no




Тут я отвечаю нет, так как у меня настроен сетевой мост и DHCP сервер. Буду использовать его. Но приведу пример по настройке моста:




# Как должен называться новый мост?
What should the new bridge be called? [default=lxdbr0]: 
# Какой IPv4-адрес следует использовать? (Обозначение подсети, CIDR, “auto " или " none”)
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none




Хотите ли вы настроить LXD для использования существующего моста или хост-интерфейса?




Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes




Имя существующего моста или интерфейса хоста:




Name of the existing bridge or host interface: br0




Хотите ли вы, чтобы LXD был доступен по сети?




Would you like LXD to be available over the network? (yes/no) [default=no]: 




Я отвечаю да, тем самым открывая доступ к контейнерам из локальной сети.




Адрес для привязки LXD к интерфейсу




Address to bind LXD to (not including port) [default=all]: 10.5.5.1




Порт для




Port to bind LXD to [default=8443]: 4444




Пароль доверия для новых клиентов:




Trust password for new clients:




Тут придумайте какой нибудь пароль




Повторите Ваш пароль




Again:




Хотите ли вы, чтобы устаревшие кэшированные изображения обновлялись автоматически?




Would you like stale cached images to be updated automatically? (yes/no) [default=yes] no




Хотите ли вы, чтобы была напечатана предварительная запись YAML “lxd init”?




Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes




config:
  core.https_address: '[::]:4444'
  core.trust_password: qwerty
networks: []
storage_pools:
- config:
    size: 30GB
  description: ""
  name: ssdpool
  driver: btrfs
profiles:
- config: {}
  description: ""
  devices:
    eth0:
      name: eth0
      nictype: bridged
      parent: br0
      type: nic
    root:
      path: /
      pool: ssdpool
      type: disk
  name: default
cluster: null




Список Storage Pool




Следующая команда выводит на экран список всех Storage Pool в LXC хранилище. Но данная команда у вас ничего не покажет, так как мы еще не настроили контейнер ( привожу просто как пример):




lxc storage list




+--------+-------------+--------+-------------------------------------------+---------+
|  NAME  | DESCRIPTION | DRIVER |                  SOURCE                   | USED BY |
+--------+-------------+--------+-------------------------------------------+---------+
| test   |             | zfs    | /var/snap/lxd/common/lxd/disks/test.img   | 3       |
+--------+-------------+--------+-------------------------------------------+---------+
| ubnsrv |             | btrfs  | /var/snap/lxd/common/lxd/disks/ubnsrv.img | 0       |
+--------+-------------+--------+-------------------------------------------+---------+




Для просмотра списка всех Storage Volume в выбранном Storage Pool служит команда lxc storage volume list:




lxc storage volume list test




+-----------+------------------------------------------------------------------+-------------+---------+
|   TYPE    |                               NAME                               | DESCRIPTION | USED BY |
+-----------+------------------------------------------------------------------+-------------+---------+
| container | webserver                                                        |             | 1       |
+-----------+------------------------------------------------------------------+-------------+---------+
| image     | 89cbdbacd37e484c16816ae1ad550930c70320ef6428df4eb723e2aae4c78b56 |             | 1       |
+-----------+------------------------------------------------------------------+-------------+---------+




Увеличение размера Storage Pool 




После создания Storage Pool, при необходимости, его можно расширить. Для Storage Pool основанном на файловой системе BTRFS выполните следующие команды:




sudo truncate -s +5G /mnt/work/lxd/btrfs.img
sudo losetup -c /dev/loop1
sudo btrfs filesystem resize max /var/lib/lxd/storage-pools/btrfs




Выбор Storage Pool при создании контейнера




lxc init name-lxc --storage=test --profile=default




Удаление Storage Pool




lxc storage delete test




Если выдает ошибку “Error: Storage pool “default” has profiles using it: default“, то делаем так:




printf 'config: {}ndevices: {}' | lxc profile edit test
lxc storage delete test




Удаление bridge LXD




После удаление Storadge Pool необходимо удалить созданный сетевой мост следующей командой:




sudo lxc network delete lxdbr0




Работа с контейнерами LXC




Список контейнеров LXC




После того как Вы прошли все стадии настройки нового пула, вам потребуется скачать сам контейнер. Для просмотра доступных контейнеров с Ubuntu необходимо набрать следующую команду:




lxc image list ubuntu:




Я для установки выбрал Ubuntu Server 20.04 LTS.




Установка контейнера LXC на хост машину




Устанавливаем наш контейнер следующей командой:




lxc launch ubuntu:f webserver




  • f– это сокращенное название контейнера (Ubuntu 20.04 focal)
  • webserver – это имя нашего контейнера.




После загрузки посмотрим список наших контейнеров установленных в системе:




lxc list




+-----------+---------+---------------+------+-----------+-----------+
|   NAME    |  STATE  |     IPV4      | IPV6 |   TYPE    | SNAPSHOTS |
+-----------+---------+---------------+------+-----------+-----------+
| webserver | RUNNING | 10.5.5.44 (eth0) |   | CONTAINER | 0         |
+-----------+---------+---------------+------+-----------+-----------+




Как видим контейнер запустился с именем webserver и IP-адресом 10.5.5.44




Так как наш контейнер lxd называется webserver, то на него необходимо установить какой либо WEB-сервер.




Установка NGINX в LXC (LXD) контейнер




Подключитесь к контейнеру webserver и настройте в нем веб-сервер.




Чтобы подключиться к контейнеру как root, используйте следующую команду:




lxc exec webserver -- /bin/bash




Чтобы подключиться к контейнеру от другого пользователя используйте вот такую команду:




lxc exec webserver -- sudo --login --user user1




Команда sudo --login --user use1 предоставляет оболочку входа для предварительно сконфигурированной учетной записи user1 внутри контейнера.




В контейнере командная строка выглядит так:




root@webserver:~$




Установите Nginx в этом контейнере. Для этого обновим индекс пакетов экземпляра Ubuntu внутри контейнера, добавим свежий репозиторий для nginx и установим сам WEB-сервер Nginx:




apt update
apt dist-upgrade -y
add-apt-repository ppa:ondrej/nginx
apt install nginx -y




Затем отредактируйте веб-страницу по умолчанию для этого сайта и добавьте текст, который поможет вам понять, что этот сайт размещен в контейнере webserver. Откройте файл index.nginx-debian.html:




nano /var/www/html/index.nginx-debian.html




Измените его следующим образом:




<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Добро пожаловать в контейнер WEBSERVER!</h1>
<p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и работает. 
Необходима дальнейшая настройка.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Спасибо Вам за использование nginx.</em></p>
</body>
</html>




Сохраните файл и выйдите из редактора. Выйдите из контейнера и вернитесь на главный сервер:




exit




С помощью curl проверьте, работает ли веб-сервер в контейнере. Вам понадобятся IP-адреса веб-контейнеров, которые были найдены ранее с помощью команды lxd list.




curl http://10.5.5.44/




Команда вернет:




<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Добро пожаловать в контейнер WEBSERVER!</h1>
<p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и работает. 
Необходима дальнейшая настройка.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Спасибо Вам за использование nginx.</em></p>
</body>
</html>




Веб-сервер работает, но получить доступ к нему можно только через внутренний IP-адрес. Для того чтобы другие пользователи могли получить доступ к web-сайту, направьте внешние запросы в этот контейнер. Как это сделать Я описывал в данной статье:




Настройка NAT и Port Forwarding




Остановка и удаление контейнера




В дальнейшем вы можете захотеть остановить контейнер и заменить его.




Чтобы остановить контейнер, используйте:




lxc stop webserver




Чтобы проверить состояние контейнера, введите:




lxc list




Удалить контейнер можно с помощью этой команды:




lxc delete webserver




Взятие файла из контейнера




Получить файл из контейнера можно командой




lxc file pull webserver/etc/hosts hosts




или прочесть в выводом на стандартный output




lxc file pull webserver/etc/hosts -




127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts




Помещение файла внутрь контейнера




lxc file push /home/user/myfiles.txt webserver/home/goust




Создание снимка контейнера




Просто создать снимок можно так:




lxc snapshot webserver
# или так
lxc snapshot webserver web-mysnap




Проверить снимок




sudo lxc info ваш_контейнер | grep -i Snapshots -A2




Восстановление из снимка




Восстановить состояние контейнера на момент снимка




lxc restore ваш_контейнер ваш_снимок




Копирование контейнеров из снимков LXC




Команда для копирования выглядит следующим образом:




lxc cp websever/web-mysnap new-web




После данного действия остается запустить новый контейнер




lxc start new-web 
sleep 5
lxc list




Используйте команду lxc help, чтобы просмотреть дополнительные параметры.




Для управления хранилищем в LXD служит команда lxc storage справку по которой можно получить указав ключ — lxc storage --help




Удалить снимок контейнера LXD




sudo lxc delete <имя контейнера/имя снимка>




Дополнительно




Про CPU




Чтобы ограничить контейнер любыми 2 процессорами:




lxc config set my-container limits.cpu 2




Данная команда сработает на лету, чтобы в этом убедится посмотрим применилось ли наше ограничение




lxc exec my-container -- cat /proc/cpuinfo | grep ^proces




processor	: 0
processor	: 1




На определенных ядрах процессора, скажем, на втором и четвертом команда примет вид:




lxc config set my-container limits.cpu 1,3




Более сложные закрепление с помощью диапазонов:




lxc config set my-container limits.cpu 0-2,6-7




Чтобы ограничить процессорное время контейнера до 10% от общего числа, набираем вот такую команду:




lxc config set my-container limits.cpu.allowance 10%




Про память




Что бы ограничить выделяемую контейнеру память, необходимо набрать следующую команду:




lxc config set my-container limits.memory 512MB




Смотрим инфо про память:




lxc exec WEB -- cat /proc/meminfo | grep ^Mem




Для отключения файла подкачки swap




lxc config set my-container limits.memory.swap false



[endtxt]




RSS




2020-05-19T07:30:03
Virtualization

Запуск игр для Wii в Ubuntu с помощью Dolphin

dolphin_01.jpg

 

В Linux нет игр. Вы могли читать об этом в интернете множество раз, особенно если вы сами являетесь пользователям Linux. К счастью, это утверждение не имеет ничего общего с реальностью. Есть много отличных игр для Linux и можно получить еще больше с помощью эмуляторов. Эмулятор с открытым исходным кодом Dolphin добавляет в Linux огромную часть экосистемы Wii, в том числе множество тайтлов от Gamecube.
Читать

VDS Аппаратная виртуализация XEN

FirstVDS объявляет о начале продаж Виртуальных Выделенных Серверов на базе виртуализации XEN.

XEN — это аппаратная виртуализация, которая имеет ряд существенных отличий от виртуализаций уровня операционной системы (FreeBSD / OpenVZ), используемых FirstVDS до сих пор. XEN использует аппаратные возможности процессора, что максимально приближает Виртуальный сервер к обычному выделенному серверу. Как следствие, ваш Виртуальный сервер будет иметь собственное ядро операционной системы, получит низкоуровневый доступ к сетевым устройствам (можно настроить vpn сервер (openvpn, mpd)) и т.д. Использование аппаратной виртуализации также позволяет устанавливать на VDS любую операционную систeму. Читать