LXC и другие огороды
Проигрыватель виртуалок в качестве инструмента запуска заранее подготовленного чего угодно, конечно, хорош, но обладает несколькими недостатками
- Невозможность по-полной использовать аппаратуру (например, 3D-видео)
- Прожорливость по ресурсам
- Понижение производительности
- Медленная работа виртуализованного железа
??? Что-то ещё?
Тут на поверхность выплывают системы частичной виртуализации и изоляции
- Unix-way: chroot
- (antic) VServer
- Xen
- Virtuozzo/OpenVZ
- LXC (о нём здесь)
LXC
Вопросы
- Что это?
- Какими механизмами (ядра?) и как пользуется?
- Какие фичи предоставляет админу/пользователю?
- Где и для чего используется?
- Типичная практика эксплуатации
- Безопасность?
- Можно ли давать root, если да, то на каких условиях?
- Можно ли и как честно поделить память/CPU между VE?
- Зачем оно нам в плеере?
- Можно ли VE запускать «из образа» (1-5 файлов), или нужно целое дерево в ФС?
- Можно ли иметь доступ к видео/другому HW и чем это грозит плееру?
- В каком виде?
- Почему бы не сделать просто другой плеер, и не морочиться с LXC?
Ответы (будет дополнено после unиховки)
- Q: Что это?
- A: Механизм виртуализации Linux-userland или конкретного приложения на одном ядре (призванный заменить OpenVZ, но на ванильном ядре).
- Q: Какими механизмами (ядра?) и как пользуется?
- Представляет собой обёртку над Linux cgroups/namespaces
- cgroups занимаются контролем ресурсов
- namespaces обеспечивают изоляцию.
Из man namespaces(7):
Linux provides the following namespaces: Namespace Constant Isolates Cgroup CLONE_NEWCGROUP Cgroup root directory IPC CLONE_NEWIPC System V IPC, POSIX message queues Network CLONE_NEWNET Network devices, stacks, ports, etc. Mount CLONE_NEWNS Mount points PID CLONE_NEWPID Process IDs User CLONE_NEWUSER User and group IDs UTS CLONE_NEWUTS Hostname and NIS domain name
- На самом деле контейнеры, эквивалентные LXC, можно делать и без userspace-утилит LXC, просто прося ядро выделить cgroup и обособить некоторые (или все) пространства имён для init-процесса контейнера.
- Представляет собой обёртку над Linux cgroups/namespaces
- Q: Какие фичи предоставляет админу/пользователю?
- TODO
- Q: Где и для чего используется?
Здесь надо приводить примеры успешного внедрения ("а вот у них работает!")? -- ArsenyMaslennikov 2017-01-05 12:44:24
- A: Для чего:
- Изоляция целых юзерспейсов друг от друга с общим ядром
- Запуск приложения с изолированным окружением (namespaces)
- Q: Типичная практика эксплуатации
- TODO
- Безопасность?
- Q: Можно ли давать root, если да, то на каких условиях?
A: Не вижу пока проблем, копаю в эту сторону, но фантазией в этой области не обладаю. Сюда бы какого-нибудь энтузиаста типа Августа. - -- ArsenyMaslennikov 2017-01-05 12:44:24
- Q: Можно ли давать root, если да, то на каких условиях?
- Q: Можно ли и как честно поделить память/CPU между VE?
- A: Ответ вида "на, отвяжись": цыгруппами!
- TODO: привести пример, как.
- A: Ответ вида "на, отвяжись": цыгруппами!
- Зачем оно нам в плеере?
- Q: Можно ли VE запускать «из образа» (1-5 файлов), или нужно целое дерево в ФС?
- А шо плохого в дереве, если правильно его rsync-ать?
Можно в конфиге контейнера (или опцией -B тип) указать, где rootfs. Из man lxc-create:
-B, --bdev backingstore 'backingstore' is one of 'dir', 'lvm', 'loop', 'btrfs', 'zfs', 'rbd', or 'best'. The default is 'dir', meaning that the container root filesystem will be a directory under /var/lib/lxc/container/rootfs. This backing store type allows the optional --dir ROOTFS to be specified, meaning that the container rootfs should be placed under the specified path, rather than the default. (The 'none' backingstore type is an alias for 'dir'.) If 'btrfs' is specified, then the target filesystem must be btrfs, and the container rootfs will be created as a new subvolume. This allows snapshotted clones to be created, but also causes rsync --one-filesystem to treat it as a separate filesystem. If backingstore is 'lvm', then an lvm block device will be used and the following further options are available: --lvname lvname1 will create an LV named lvname1 rather than the default, which is the container name. --vgname vgname1 will create the LV in volume group vgname1 rather than the default, lxc. --thinpool thinpool1 will create the LV as a thin-provisioned volume in the pool named thinpool1 rather than the default, lxc. --fstype FSTYPE will create an FSTYPE filesystem on the LV, rather than the default, which is ext4. --fssize SIZE will create a LV (and filesystem) of size SIZE rather than the default, which is 1G. If backingstore is 'loop', you can use --fstype FSTYPE and --fssize SIZE as 'lvm'. The default values for these options are the same as 'lvm'. If backingstore is 'rbd', then you will need to have a valid configuration in ceph.conf and a ceph.client.admin.keyring defined. You can specify the following options : --rbdname RBDNAME will create a blockdevice named RBDNAME rather than the default, which is the container name. --rbdpool POOL will create the blockdevice in the pool named POOL, rather than the default, which is 'lxc'. If backingstore is 'best', then lxc will try, in order, btrfs, zfs, lvm, and finally a directory backing store.
- Заранее мы все знаем, что Рома предпочтёт zfs (ради этого он и пропагандирует, что пора уходить с OpenVZ).
- Если мыслить о практикуме и образах ОС-контейнеров, то либо лупдевайс (меееедленно), либо tar/cpio/squashfs и распаковка/монтирование, либо ZFS на хостах;
- Здесь возникает шаловливая мысль о Linux-прошивке и LXC-контейнерах-гостях, но нуждается в проработке (у нас уже есть легаси, и оно почти работает).
- В случае контейнера для приложения (голый браузер, например)... да с точки зрения bdev то же самое.
- Q: Можно ли иметь доступ к видео/другому HW и чем это грозит плееру?
- А мы на Ы14 X запустили? Можно попробовать запустить и в контейнере.
- Такие вещи, возможно, лучше гонять на домашних машинах, а потом портировать на Ы14.
- А мы на Ы14 X запустили? Можно попробовать запустить и в контейнере.
- В каком виде?
- Q: Почему бы не сделать просто другой плеер, и не морочиться с LXC?
- A: Скорость запуска. Надо осознать, каково дефолтное состояние машины, когда в класс приходит препод: скорее всего, она включена и загружен наш плеер. В предложенном варианте, чтобы загрузить другой для задачи "броузер+мудль", например, преподу придётся ребутать весь класс.
- A: перегрузка функциональности груб-прошивки. Хороший вопрос: где мороки больше?
- Q: Можно ли VE запускать «из образа» (1-5 файлов), или нужно целое дерево в ФС?
Category762