• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Виртуализация в Linux: Понимание и примеры

m0dHEX

(L1) cache
Забанен
Регистрация
12.08.2021
Сообщения
516
Реакции
87
Пожалуйста, обратите внимание, что пользователь заблокирован
Привет всем, я начинаю цикл статей посвященных Linux и не только. Хочу сказать особое спасибо моему другу 101001100101 который заставил меня поднять мою ленивую жопу и запилить эту статью.

Виртуализация — это технология, позволяющая создавать и управлять виртуальными экземплярами операционной системы и ресурсов компьютерной системы на одном физическом хосте. В Linux виртуализация является мощным инструментом, который предоставляет возможности для эффективного разделения ресурсов, управления, отказоустойчивости и изоляции внутри компьютерной среды. В этой статье мы рассмотрим основные концепции виртуализации в Linux и предоставим примеры ее использования.

  1. Гипервизоры: Гипервизор — программное обеспечение, которое позволяет создавать и управлять виртуальными машинами. В Linux существуют два основных типа гипервизоров:
    • Тип 1 (нативный): Гипервизор устанавливается непосредственно на аппаратное обеспечение и управляет доступом ресурсов. Примером типа 1 гипервизора является Xen.
    • Тип 2 (гипервизор на основе хоста): Гипервизор устанавливается на операционную систему хоста и управляет виртуальными машинами через операционную систему хоста. Примером типа 2 гипервизора является KVM (Kernel-based Virtual Machine).
  2. Контейнеризация:Контейнеризация — это метод виртуализации, который позволяет упаковывать и запускать приложения и их зависимости в изолированных средах, называемых контейнерами. В Linux самой популярной системой контейнеризации является Docker.
    Пример использования Docker:


    Bash:
    # Установка Docker на Ubuntu
    $ sudo apt update
    $ sudo apt install docker.io
    
    # Запуск контейнера с образом Ubuntu
    $ sudo docker run -it ubuntu /bin/bash
    
    # Выполнение команд внутри контейнера
    # Например, установка пакета nginx
    $ apt update
    $ apt install nginx
    $ nginx -v
    
    # Выход из контейнера
    $ exit

  3. Виртуализация на уровне операционной системы:
    Виртуализация на уровне операционной системы (также известная как контейнерная виртуализация) позволяет создавать изолированные экземпляры операционной системы, называемые контейнерами, на основе общей ядра операционной системы хоста. Примером такой системы является LXC (Linux Containers).

    Bash:
    # Установка LXC на Ubuntu
    $ sudo apt update
    $ sudo apt install lxc
    
    # Создание контейнера
    $ sudo lxc-create -n mycontainer -t ubuntu
    
    # Запуск контейнера
    $ sudo lxc-start -n mycontainer
    
    # Вход в контейнер
    $ sudo lxc-attach -n mycontainer
    
    # Выполнение команд внутри контейнера
    # Например, установка пакета nginx
    $ apt update
    $ apt install nginx
    $ nginx -v
    
    # Выход из контейнера
    $ exit
Виртуализация в Linux предоставляет гибкость и эффективность при управлении ресурсами компьютерной системы. Гипервизоры, контейнеризация и виртуализация на уровне операционной системы — это некоторые из инструментов, которые можно использовать для создания и управления виртуальными экземплярами в Linux. Представленные примеры демонстрируют базовые шаги по установке, запуску и выполнению команд внутри виртуальных сред.

Необходимо отметить, что виртуализация является обширной и глубокой темой, и этот материал лишь касается ее основных аспектов. Однако, ознакомление с этими примерами и концепциями виртуализации в Linux поможет вам начать использовать эти мощные инструменты для управления вашей компьютерной средой.


Если хотите меня покормить 0x19557c88708cefbdb66c82ad6e3ef417d3bb4b9c
 
сложно, непонятно, и не хватает самого основного - сравнения всего этого, и описания, для чего использовать какой тип виртуализации.

вкратце: есть "железная/хардварная" виртуализация, и есть "софтовая".
1) "железная" эмулирует целый компьютер: у виртуальной машины собственный биос, PCI и USB устройства, и так далее. благодаря этому в железной виртуалке можно запускать любую операционную систему - например, на компьютере с установленным линуксом можно запустить Windows в железной виртуальной машине.
плюсы: бОльшее разграничение ресурсов, благодаря чему злонамеренному софту сложнее выбраться из виртуалки на хост. возможность запуска любой операционки и любых ядер, делай что хочешь.
минусы: бОльший расход ресурсов (нагрузка на процессор, расход оперативы). также железная требует поддержки виртуализации на уровне железа (типа Intel VT-d). некоторые гипервизоры типа QEMU или BOCHS умеют делать железные виртуалки и без поддержки процессором, но это дичайше тормозит.
примеры железной виртуализации: XEN, KVM, VMWare, Virtualbox.

2) "софтовая" не эмулирует железо и использует ресурсы основной операционной системы (в первую очередь её ядро). в софтовой виртуалке можно запустить другой дистрибутив линукса, типа на компьютере с установленным Debian можно одновременно запустить ещё и Red Hat с каким-нибудь Kali, но с помощью софтовой виртуализации нельзя запустить Windows на компьютере с Linux, а также все одновременно запущенные дистрибутивы Linux будут иметь такую же версию ядра, как и у хостовой системы.
плюсы: минимальный расход ресурсов, нагрузки на хостовую операционку почти нет.
минусы: невозможно изменять ядро внутри виртуальных машин (например, если на хосте не загружен модуль ядра "tun", то в виртуалках невозможно будет использовать OpenVPN, и внутри виртуалки даже с правами root загрузить этот модуль не удастся). также злонамеренному софту потенциально проще выбраться из виртуалки на хостовую систему.
примеры софтовой виртуализации: OpenVZ, LXC

ну и docker я бы отнёс к третьему типу - "совсем софтовая" :) тогда как "софтовую" виртуализацию используют для запуска целых дистрибутивов с полным набором разнообразного софта, контейнеры типа докера используются преимущественно для запуска определённого единственного софта - то есть для каждой отдельной программы запускается отдельный контейнер. такой подход повышает безопасность при запуске не совсем доверенного софта - например, потенциально уязвимых веб-приложений. если софт в одном контейнере докера взломают, то (с большой вероятностью) жулики не получат доступ к данным в остальных контейнерах.
тогда как при взломе софта в полноценной "железной" или "софтовой" виртуализации жулики получат полный доступ ко всем данным внутри этой виртуальной машины.
 
ну и docker я бы отнёс к третьему типу - "совсем софтовая" :) тогда как "софтовую" виртуализацию используют для запуска целых дистрибутивов с полным набором разнообразного софта, контейнеры типа докера используются преимущественно для запуска определённого единственного софта - то есть для каждой отдельной программы запускается отдельный контейнер. такой подход повышает безопасность при запуске не совсем доверенного софта - например, потенциально уязвимых веб-приложений. если софт в одном контейнере докера взломают, то (с большой вероятностью) жулики не получат доступ к данным в остальных контейнерах.
тогда как при взломе софта в полноценной "железной" или "софтовой" виртуализации жулики получат полный доступ ко всем данным внутри этой виртуальной машины.
Докер скорее не виртуализация, а контейнеризация, так-же как и LXC. И тут скорее не про доверенный или потенциально уезвимый софт, а про меньшее потребление ресурсов и про отдельную среду с требуемыми зависимостями, а не разделяемыми библиотеками. И контейнеризацию проще оркестрировать. К примеру, вот обновили вы приложение, ну или какой-то набор программ, тот-же K8s может сам вначале залить новые версии, и после этого выбить старые, всё это произойдёт бесшовно. Тоже самое с взломом и зависанием, если контейнер начинает себя аномально вести, то он просто вышибается и на его место приходит новый. И да, часть из этих фишек возможна при использовании виртульных машин.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх