контейнеры LXC

Виртуальные машины и среды исполнения

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

контейнеры LXC

Непрочитанное сообщение Olej » 21 мар 2015, 20:50

LXC: Kонтейнерные утилиты Linux.
Контейнеры эффективно разделяют ресурсы, управляемые единственной операционной системой, на изолированные группы, для достижения лучшего баланса между конфликтующими запросами на использование ресурсов. В отличие от виртуализации, здесь не требуется ни эмуляция на командном уровне, ни компиляция "на лету" (just-in-time compilation). Контейнеры могут исполнять прямые процессорные команды, не прибегая к механизмам интерпретации. Также отпадают сложности паравиртуализации и преобразования системных вызовов.
...
Контейнерные технологии существуют уже довольно продолжительное время. В качестве примеров контейнеров из других Unix-систем следует назвать Solaris Zones и BSD jails. У контейнерных технологий в Linux также давние традиции: Linux-Vserver, OpenVZ и FreeVPS. Хотя каждая из этих технологий является вполне зрелой, решительных шагов по интеграции поддержки их контейнерных возможностей в основную ветвь ядра Linux не предпринималось.
...
Проект Linux Resource Containers ..., напротив, направлен на реализацию контейнеров в сотрудничестве с разработчиками основной ветви ядра Linux.
Только, в отличие от этих вводных публикаций, на сегодня это всё включено в основную ветвь ядра, ничего патчить и устанавливать из исходников не нужно, всё уже включено в состав дистрибутивов:

Код: Выделить всё

[Olej@modules ~]$ sudo yum install lxc*
...
=============================================================================================================
 Package                         Архитектура             Версия                        Репозиторий              Размер
=============================================================================================================
Установка:
 lxc                             x86_64                  1.0.7-1.fc20                  updates            134 k
 lxc-devel                       x86_64                  1.0.7-1.fc20                  updates             16 k
 lxc-doc                         noarch                  1.0.7-1.fc20                  updates            145 k
 lxc-extra                       x86_64                  1.0.7-1.fc20                  updates             23 k
 lxc-libs                        x86_64                  1.0.7-1.fc20                  updates            263 k
 lxc-templates                   x86_64                  1.0.7-1.fc20                  updates             79 k
Установка зависимостей:
 lua-alt-getopt                  noarch                  0.7.0-6.fc20                  fedora             7.7 k
 lua-filesystem                  x86_64                  1.6.2-4.fc20                  fedora              28 k
 lua-lxc                         x86_64                  1.0.7-1.fc20                  updates             16 k
 python3-lxc                     x86_64                  1.0.7-1.fc20                  updates             24 k

Итого за операцию
=============================================================================================================
Установить  6 пакетов (+4 зависимых)

Объем загрузки: 736 k
Объем изменений: 2.2 M
...
Выполнено!
New leaves:
  lxc.x86_64
  lxc-devel.x86_64
  lxc-doc.noarch
  lxc-extra.x86_64
  lxc-templates.x86_64

Код: Выделить всё

[Olej@modules ~]$ ls /bin/lxc* -w90
/bin/lxc-attach       /bin/lxc-console  /bin/lxc-info             /bin/lxc-stop
/bin/lxc-autostart    /bin/lxc-create   /bin/lxc-ls               /bin/lxc-top
/bin/lxc-cgroup       /bin/lxc-destroy  /bin/lxc-monitor          /bin/lxc-unfreeze
/bin/lxc-checkconfig  /bin/lxc-device   /bin/lxc-snapshot         /bin/lxc-unshare
/bin/lxc-clone        /bin/lxc-execute  /bin/lxc-start            /bin/lxc-usernsexec
/bin/lxc-config       /bin/lxc-freeze   /bin/lxc-start-ephemeral  /bin/lxc-wait

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 22 мар 2015, 15:23

Перевод целой серии статей непосредственно от автора LXC LXC 1.0.:
Суб, 25/01/2014 - 15:45 — vasilisc

LXC (англ. Linux Containers) — система виртуализации на уровне операционной системы для запуска нескольких изолированных экземпляров ОС Linux на одном компьютере. LXC не использует виртуальные машины, а создает виртуальное окружение с собственным пространством процессов и сетевым стеком. Все экземпляры LXC используют один экземпляр ядра ОС. Данная система похожа на системы OpenVZ и Linux-VServer для ОС Linux, и на FreeBSD jail и Solaris Containers. LXC основана на технологии ядра Linux под названием cgroups (добавлено в версии ядра 2.6.29). Также используется функциональность изоляции namespaces.

Виртуализация на уровне операционной системы — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя, вместо одного. Эти экземпляры (часто называемые контейнерами или зонами) с точки зрения пользователя полностью идентичны реальному серверу. Для систем на базе UNIX, эта технология может рассматриваться как улучшенная реализация механизма chroot. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга.

Стефан Грабер (Stéphane Graber) работает в Canonical в Ubuntu Foundations Team. В основном он занимается сетевыми проектами в Ubuntu - IPv6, DNS, LTSP. Стефан с Сержем (Serge Hallyn) являются главными мантейнерами LXC, который зарелизится в версии LXC 1.0 в феврале 2014 года.

Для популяризации LXC Стефан решил опубликовать ряд статей:

LXC 1.0: Первый Ubuntu контейнер.
LXC 1.0: Второй контейнер.
LXC 1.0: Продвинутое использование контейнера.
LXC 1.0: Более углублённое использование контейнера.
LXC 1.0: Хранилище контейнеров.
LXC 1.0: Безопасность.
LXC 1.0: Непривилегированные контейнеры.
LXC 1.0: Скрипты и API.
LXC 1.0: GUI в контейнере.
LXC 1.0: Решение проблем и отладка.
VPN в контейнере.


Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 06 дек 2015, 22:51

Код: Выделить всё

olej@nvidia ~ $ uname -a
Linux nvidia 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linux

Код: Выделить всё

olej@nvidia ~ $ apt search lxc
p   libclxclient-dev                - Development file for libclxclient
p   libclxclient3                   - X Window System C++ access library
v   liblxc0                         -
p   liblxc1                         - Linux Containers userspace tools (library)
p   lxc                             - Linux Containers userspace tools
p   lxc-android-config              - configuration to fire up an ubuntu-touch a
p   lxc-dbg                         - Linux Containers userspace tools (debug)
p   lxc-dev                         - Linux Containers userspace tools (developm
p   lxc-templates                   - Linux Containers userspace tools (template
p   lxc-tests                       - Linux Containers userspace tools (test bin
p   lxctl                           - Utility to manage LXC
p   nova-compute-lxc                - OpenStack Compute - compute node (LXC)
p   python3-lxc                     - Linux Containers userspace tools (Python 3

Код: Выделить всё

olej@nvidia ~ $ apt show lxc
Пакет: lxc
Новый: да
Состояние: не установлен
Версия: 1.0.8-0ubuntu0.3
Приоритет: необязательный
Раздел: admin
Сопровождающий: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Архитектура: i386
Размер в распакованном виде: 721 k
Зависимости: adduser, bridge-utils, dnsmasq-base, iptables, liblxc1 (=
                        1.0.8-0ubuntu0.3), python3, python3-lxc, apparmor (>=
                        2.8.95~2430-0ubuntu4), sysv-rc (>= 2.88dsf-24) | file-rc
                        (>= 0.8.16), libc6 (>= 2.14)
Рекомендует: lxc-templates (>= 0.8.0~rc1-4ubuntu43)
Предлагает: btrfs-tools, lvm2, lxctl
Описание: Linux Containers userspace tools
 Containers are insulated areas inside a system, which have their own namespace
 for filesystem, network, PID, IPC, CPU and memory allocation and which can be
 created using the Control Group and Namespace features included in the Linux
 kernel.

 This package provides the lxc-* tools, which can be used to start a single
 daemon in a container, or to boot an entire "containerized" system, and to
 manage and debug your containers.
Сайт: http://linuxcontainers.org

Код: Выделить всё

olej@nvidia ~ $ apt install lxc
Чтение списков пакетов… Готово
Построение дерева зависимостей
...
обновлено 0, установлено 6 новых пакетов, для удаления отмечено 0 пакетов, и 60 пакетов не обновлено.
Необходимо скачать 784 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 3 095 kB.
...

Код: Выделить всё

olej@nvidia ~ $ ls /usr/bin/lxc*
/usr/bin/lxc-attach       /usr/bin/lxc-clone    /usr/bin/lxc-destroy  /usr/bin/lxc-info      /usr/bin/lxc-start            /usr/bin/lxc-unfreeze
/usr/bin/lxc-autostart    /usr/bin/lxc-config   /usr/bin/lxc-device   /usr/bin/lxc-ls        /usr/bin/lxc-start-ephemeral  /usr/bin/lxc-unshare
/usr/bin/lxc-cgroup       /usr/bin/lxc-console  /usr/bin/lxc-execute  /usr/bin/lxc-monitor   /usr/bin/lxc-stop             /usr/bin/lxc-usernsexec
/usr/bin/lxc-checkconfig  /usr/bin/lxc-create   /usr/bin/lxc-freeze   /usr/bin/lxc-snapshot  /usr/bin/lxctl                /usr/bin/lxc-wait

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 06 дек 2015, 22:55

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ lxc-create --version
1.0.8
Но этого окажется мало!

Код: Выделить всё

olej@nvidia /usr/share/lxc/config $ lxc-create -t ubuntu -n u1
lxc_container: utils.c: get_template_path: 1128 No such file or directory - bad template: ubuntu
lxc_container: lxccontainer.c: lxcapi_create: 1223 bad template: ubuntu
lxc_container: lxc_create.c: main: 274 Error creating container u1
Потому что сами шаблоны, необходимые для создания контейнеров/зон с пакетом LXC не устанавливаются!
(я на это дело часа 2 убил :-( ... как-то нигде не встречал)

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ apt show lxc-templates
Пакет: lxc-templates
Новый: да
Состояние: не установлен
Версия: 1.0.8-0ubuntu0.3
Приоритет: необязательный
Раздел: admin
Сопровождающий: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Архитектура: i386
Размер в распакованном виде: 391 k
Зависимости: lxc (>= 0.8.0~rc1-4ubuntu43)
Рекомендует: busybox-static, cloud-image-utils | cloud-utils, debootstrap |
                        cdebootstrap, openssl, rsync, uuid-runtime, xz-utils
Предлагает: qemu-user-static
Повреждает: lxc (< 0.8.0~rc1-4ubuntu43)
Заменяет: lxc (< 0.8.0~rc1-4ubuntu43)
Описание: Linux Containers userspace tools (templates)
 Containers are insulated areas inside a system, which have their own namespace
 for filesystem, network, PID, IPC, CPU and memory allocation and which can be
 created using the Control Group and Namespace features included in the Linux
 kernel.

 This package contains the templates.
Сайт: http://linuxcontainers.org

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ apt install lxc-templates
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
  qemu-user-static
Рекомендуемые пакеты:
  cloud-image-utils cloud-utils debootstrap cdebootstrap
НОВЫЕ пакеты, которые будут установлены:
  lxc-templates
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 61 пакетов не обновлено.
Необходимо скачать 63,0 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 391 kB.
Получено:1 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty-updates/main lxc-templates i386 1.0.8-0ubuntu0.3 [63,0 kB]
Получено 63,0 kБ за 0с (185 kБ/c)
Выбор ранее не выбранного пакета lxc-templates.
(Чтение базы данных … на данный момент установлено 239837 файлов и каталогов.)
Preparing to unpack …/lxc-templates_1.0.8-0ubuntu0.3_i386.deb ...
Unpacking lxc-templates (1.0.8-0ubuntu0.3) ...
Настраивается пакет lxc-templates (1.0.8-0ubuntu0.3) …

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ ls /usr/share/lxc/templates
lxc-alpine    lxc-archlinux  lxc-centos  lxc-debian    lxc-fedora  lxc-openmandriva  lxc-oracle  lxc-sshd    lxc-ubuntu-cloud
lxc-altlinux  lxc-busybox    lxc-cirros  lxc-download  lxc-gentoo  lxc-opensuse      lxc-plamo   lxc-ubuntu

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 06 дек 2015, 23:13

Olej писал(а): Но этого окажется мало!
И этого ещё ему недостаточно:

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-create -t ubuntu -n C1
'debootstrap' command is missing
lxc_container: lxccontainer.c: create_run_template: 1084 container creation template for C1 failed
lxc_container: lxc_create.c: main: 274 Error creating container C1

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ apt install debootstrap
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
НОВЫЕ пакеты, которые будут установлены:
  debootstrap
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 61 пакетов не обновлено.
Необходимо скачать 29,8 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 233 kB.
Получено:1 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty-updates/main debootstrap all 1.0.59ubuntu0.4 [29,8 kB]
Получено 29,8 kБ за 0с (56,2 kБ/c)
Выбор ранее не выбранного пакета debootstrap.
(Чтение базы данных … на данный момент установлено 239859 файлов и каталогов.)
Preparing to unpack …/debootstrap_1.0.59ubuntu0.4_all.deb ...
Unpacking debootstrap (1.0.59ubuntu0.4) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Настраивается пакет debootstrap (1.0.59ubuntu0.4) …

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-create -t ubuntu -n C1
Checking cache download in /var/cache/lxc/precise/rootfs-i386 ...
Installing packages in template: ssh,vim,language-pack-en,language-pack-ru
Downloading ubuntu precise minimal ...
I: Retrieving Release
I: Retrieving Release.gpg
I: Checking Release signature
I: Valid Release signature (key id 630239CC130E1A7FD81A27B140976EAF437D05B5)
...
I: Configuring ubuntu-minimal...
I: Configuring libc-bin...
I: Configuring resolvconf...
I: Configuring initramfs-tools...
I: Base system installed successfully.
Installing updates
...
обновлено 97, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 45,3 MБ архивов.
После данной операции, объём занятого дискового пространства уменьшится на 513 kB.
...
##
# The default user is 'ubuntu' with password 'ubuntu'!
# Use the 'sudo' command to run tasks as root in the container.
##
Как легко понять, вот это последнее дело - обстоятельное ;-) , занимает некоторое время, а лог происходящего занимает 5-6 (?) страниц.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 07 дек 2015, 03:08

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-info  -n C1
Name:           C1
State:          STOPPED
  
olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-start -n C1 -d
  
olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-info  -n C1
Name:           C1
State:          RUNNING
PID:            30425
CPU use:        0.26 seconds
BlkIO use:      9.61 MiB
Memory use:     12.36 MiB
KMem use:       0 bytes
Link:           vethHDUWAD
 TX bytes:      1018 bytes
 RX bytes:      2.90 KiB
 Total bytes:   3.89 KiB
Подключение:

Код: Выделить всё

olej@nvidia ~/2014_WORK/НАРОД/Anton/2013 $ sudo lxc-console -n C1
Ubuntu 12.04.5 LTS C1 tty1

C1 login: ubuntu
Password:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-37-generic i686)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

...
Или:

Код: Выделить всё

olej@nvidia ~ $ sudo lxc-attach -n C1

root@C1:/# who
ubuntu   lxc/tty1     2015-12-02 00:00

root@C1:/# uname -a
Linux C1 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i386 GNU/Linux

root@C1:/# whoami
root

root@C1:/# lsb_release -ircd
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:        12.04
Codename:       precise

root@C1:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3e:0f:49:3b  
          inet addr:10.0.3.176  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe0f:493b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8228 (8.2 KB)  TX bytes:3044 (3.0 KB)

lo        Link encap:Локальная петля (Loopback)  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 07 дек 2015, 03:13

Код: Выделить всё

olej@nvidia /media/olej $ sudo lxc-ls --fancy
NAME  STATE    IPV4  IPV6  AUTOSTART
------------------------------------
C1    STOPPED  -     -     NO

olej@nvidia /media/olej $ sudo lxc-start -n C1 -d

olej@nvidia /media/olej $ sudo lxc-ls --fancy
NAME  STATE    IPV4        IPV6  AUTOSTART
------------------------------------------
C1    RUNNING  10.0.3.176  -     NO

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: контейнеры LXC

Непрочитанное сообщение Olej » 09 дек 2015, 03:44

Клонируем контейнеры сколько угодно раз ;-) :
olej@nvidia /var/lib $ sudo lxc-clone -o C1 -n C2
lxc_container: lxccontainer.c: lxcapi_clone: 2635 error: Original container (C1) is running
clone failed
Только остановленный контейнер!

Код: Выделить всё

olej@nvidia /var/lib $ sudo lxc-stop -n C1

olej@nvidia /var/lib $ sudo lxc-clone -o C1 -n C2
Created container C2 as copy of C1

Код: Выделить всё

nvidia lxc # ls -l /var/lib/lxc
итого 8
drwxrwx--- 3 root root 4096 Дек  1 23:44 C1
drwxrwx--- 3 root root 4096 Дек  9 02:39 C2

nvidia lxc # du -hs C1/rootfs/
764M    C1/rootfs/

nvidia lxc # du -hs C2/rootfs/
764M    C2/rootfs/

Код: Выделить всё

nvidia lxc # ls -l C2/rootfs/
итого 76
drwxr-xr-x  2 root root 4096 Дек  1 23:42 bin
drwxr-xr-x  2 root root 4096 Апр 19  2012 boot
drwxr-xr-x  4 root root 4096 Дек  9 02:39 dev
drwxr-xr-x 69 root root 4096 Дек  9 02:39 etc
drwxr-xr-x  3 root root 4096 Дек  1 23:44 home
drwxr-xr-x 12 root root 4096 Дек  2 01:47 lib
drwxr-xr-x  2 root root 4096 Дек  1 23:31 media
drwxr-xr-x  2 root root 4096 Апр 19  2012 mnt
drwxr-xr-x  2 root root 4096 Дек  1 23:31 opt
drwxr-xr-x  2 root root 4096 Апр 19  2012 proc
drwx------  6 root root 4096 Дек  2 02:21 root
drwxr-xr-x  6 root root 4096 Дек  1 23:42 run
drwxr-xr-x  2 root root 4096 Дек  1 23:43 sbin
drwxr-xr-x  2 root root 4096 Мар  5  2012 selinux
drwxr-xr-x  2 root root 4096 Дек  1 23:31 srv
drwxr-xr-x  2 root root 4096 Апр 14  2012 sys
drwxrwxrwt  3 root root 4096 Дек  9 02:17 tmp
drwxr-xr-x 10 root root 4096 Дек  1 23:31 usr
drwxr-xr-x 11 root root 4096 Дек  9 02:39 var

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

контейнеры LXC

Непрочитанное сообщение Olej » 09 дек 2015, 21:32

Интересное, как мне кажется, применение LXC контейнеров показано в теме TOR сеть, где:
- в каждом LXC запущен свой комплект tor SOCKS 5 proxy и polopo HTTP proxy ...
- когда можно создать и запустить несколько (по числу LXC контейнеров) профилей FireFox ...
- когда каждый профиль FF будет использовать свою цепочку TOR.

Ответить

Вернуться в «Виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей