MyTetra Share
Делитесь знаниями!
Запускаем виртуализацию LXC на Ubuntu
Время создания: 08.01.2021 22:56
Автор: alensav
Текстовые метки: Запускаем виртуализацию LXC на Ubuntu
Раздел: !!LXD
Запись: alensav/MyTetra2/main/base/1610135767ax2pz2ao17/text.html на raw.githubusercontent.com

Запускаем виртуализацию LXC на Ubuntu

Авг 19, 2016anton Новости

LXC (англ. Linux Containers) — система виртуализации на уровне операционной системы, которая позволяет запустить множество изолированных пользовательских окружений в рамках одного гипервизора. Мы ранее писали о разнице в технологиях виртуализации в заметке Чем отличаются хостинг, VPS, VDS и выделенный сервер? . LXC является сравнительно молодым представителем систем «частичной» виртуализации, позволяя запускать на одном выделенном сервере или даже SSD VDS несколько гостевых контейнеров. Так как речь идет о частичной виртуализации, в качестве гостевых систем можно использовать только различные дистрибутивы Linux — как и в популярном продукте OpenVZ.

Для чего можно использовать LXC? По сравнению с доживающим свой век «традиционным» OpenVZ , решение LXC считается более простым — работает «из коробки» и не требует установки специального ядра, управляется очень просто. При этом возможности ограничения ресурсов у LXC несколько меньше, поэтому в первую очередь эту технологию стоит рассматривать не как продукт для предоставления услуг VPS, а как внутреннее решение для изоляции различных служб и легкого дальнейшего масштабирования. Конечно, немаловажным является возможность использовать в рамках одного сервера несколько диалектов Linux — наверняка многие системные администраторы сталкивались с разными продуктами, ориентированными под конкретные дистрибутивы, что усложняло инсталляцию в рамках другой версии операционной системы.

Давайте попробуем основные возможности LXC — скажем, на сервере под управлением Ubuntu 16. Вначале — переключим работу физического интерфейса в режим «моста» (bridge) — это самый простой вариант обеспечить доступ гостевым системам к сети.

В /etc/network/interfaces создаем интерфейс br0, переносим в его свойства настройки IP-адреса и подключаем этот интерфейс к сетевому адаптеру (enp2s0):

source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback ##Bridge Name ### auto br0 ### Bridge Information iface br0 inet static address www.yyy.xxx.zzz netmask www.yyy.xxx.zzz network www.yyy.xxx.0 broadcast www.yyy.xxx.255 gateway www.yyy.xxx.1 dns-nameservers 8.8.8.8 bridge_ports enp2s0 bridge_stp off bridge_fd 9 iface enp2s0 inet manual


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

##Bridge  Name ###

auto br0

### Bridge Information

iface br0 inet static

  address www.yyy.xxx.zzz

  netmask www.yyy.xxx.zzz

  network www.yyy.xxx.0

  broadcast www.yyy.xxx.255

  gateway www.yyy.xxx.1

  dns-nameservers 8.8.8.8

  bridge_ports enp2s0

  bridge_stp off

  bridge_fd 9

 

iface enp2s0 inet manual

После изменений — перезагрузимся или переконфигурируем сеть с помощью /etc/init.d/networking restart

Инсталлируем подсистему LXC и необходимые утилиты:

apt-get install lxc lxc-templates wget bridge-utils cgroup-lite


1

apt-get install lxc lxc-templates wget bridge-utils cgroup-lite

Запустим lxc-checkconfig чтобы проверить, успешно ли установлена поддержка LXC:

Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-4.4.0-34-generic --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled CONFIG_NF_NAT_IPV4: enabled CONFIG_NF_NAT_IPV6: enabled CONFIG_IP_NF_TARGET_MASQUERADE: enabled CONFIG_IP6_NF_TARGET_MASQUERADE: enabled CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled FUSE (for use with lxcfs): enabled --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

Kernel configuration not found at /proc/config.gz; searching...

Kernel configuration found at /boot/config-4.4.0-34-generic

--- Namespaces ---

Namespaces: enabled

Utsname namespace: enabled

Ipc namespace: enabled

Pid namespace: enabled

User namespace: enabled

Network namespace: enabled

Multiple /dev/pts instances: enabled

 

--- Control groups ---

Cgroup: enabled

Cgroup clone_children flag: enabled

Cgroup device: enabled

Cgroup sched: enabled

Cgroup cpu account: enabled

Cgroup memory controller: enabled

Cgroup cpuset: enabled

 

--- Misc ---

Veth pair device: enabled

Macvlan: enabled

Vlan: enabled

Bridges: enabled

Advanced netfilter: enabled

CONFIG_NF_NAT_IPV4: enabled

CONFIG_NF_NAT_IPV6: enabled

CONFIG_IP_NF_TARGET_MASQUERADE: enabled

CONFIG_IP6_NF_TARGET_MASQUERADE: enabled

CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled

FUSE (for use with lxcfs): enabled

 

--- Checkpoint/Restore ---

checkpoint restore: enabled

CONFIG_FHANDLE: enabled

CONFIG_EVENTFD: enabled

CONFIG_EPOLL: enabled

CONFIG_UNIX_DIAG: enabled

CONFIG_INET_DIAG: enabled

CONFIG_PACKET_DIAG: enabled

CONFIG_NETLINK_DIAG: enabled

File capabilities: enabled

 

Note : Before booting a new kernel, you can check its configuration

usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Теперь настроим сеть для контейнеров LXC — отключим интерфейс bridge по умолчанию lxcbr0, который был создан во время установки LXC. Для этого в файле /etc/default/lxc-net установим значение “false” в переменной USE_LXC_BRIDGE.

Когда USE_LXC_BRIDGE установлена в true, мост с именем lxcbr0 создается в процессе запуска и может быть использован для создания приватной сети, однако мы в данном примере будем использовать стандартный мост — это позволит использовать контейнеры более универсально.

Далее в файле /etc/lxc/default.conf укажем использовать созданный ранее интерфейс br0:

lxc.network.type = veth lxc.network.link = br0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx


1

2

3

4

lxc.network.type = veth

lxc.network.link = br0

lxc.network.flags = up

lxc.network.hwaddr = 00:16:3e:xx:xx:xx

На этом базовая настройка завершена и можно создавать контейнеры LXC. По-умолчанию инсталлируются наиболее популярные шаблоны, список которых можно получить с помощью команды ls /usr/share/lxc/templates/:

lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva lxc-oracle lxc-slackware lxc-sshd lxc-ubuntu-cloud lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-gentoo lxc-opensuse lxc-plamo lxc-sparclinux lxc-ubuntu


1

2

lxc-alpine    lxc-archlinux  lxc-centos  lxc-debian    lxc-fedora  lxc-openmandriva  lxc-oracle  lxc-slackware   lxc-sshd    lxc-ubuntu-cloud

lxc-altlinux  lxc-busybox    lxc-cirros  lxc-download  lxc-gentoo  lxc-opensuse      lxc-plamo   lxc-sparclinux  lxc-ubuntu

Начнем с самого простого — с виртуальной машины под управлением Ubuntu. Выполним команду lxc-create -n ubuntu_lxc -t ubuntu:

root@lxc:~# lxc-create -n ubuntu_lxc -t ubuntu Checking cache download in /var/cache/lxc/xenial/rootfs-amd64 ... Copy /var/cache/lxc/xenial/rootfs-amd64 to /var/lib/lxc/ubuntu_lxc/rootfs ... Copying rootfs to /var/lib/lxc/ubuntu_lxc/rootfs ... Generating locales (this might take a while)... en_US.ISO-8859-1... done Generation complete. Creating SSH2 RSA key; this may take some time ... 2048 SHA256:I6kcUu1e8gm4LFyitJ1b/vrxF1tF1izhNLNWUpIZ7yQ root@lxc (RSA) Creating SSH2 DSA key; this may take some time ... 1024 SHA256:v85zUbwYi1zB6/Sn6RHAXvFOlra9o9v09L+2bpB6L1o root@lxc (DSA) Creating SSH2 ECDSA key; this may take some time ... 256 SHA256:ozhZhiRfRludJo1pLAvea1FzocBX5s2ObpO/8cuI1AY root@lxc (ECDSA) Creating SSH2 ED25519 key; this may take some time ... 256 SHA256:qeIRecmihv18OaC4iwsje/b90EXf9S9z4cedqtpSDmE root@lxc (ED25519) invoke-rc.d: could not determine current runlevel invoke-rc.d: policy-rc.d denied execution of start. Current default time zone: 'Etc/UTC' Local time is now: Tue Aug 16 15:40:57 UTC 2016. Universal Time is now: Tue Aug 16 15:40:57 UTC 2016. ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ##


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

root@lxc:~# lxc-create -n ubuntu_lxc -t ubuntu

Checking cache download in /var/cache/lxc/xenial/rootfs-amd64 ...

Copy /var/cache/lxc/xenial/rootfs-amd64 to /var/lib/lxc/ubuntu_lxc/rootfs ...

Copying rootfs to /var/lib/lxc/ubuntu_lxc/rootfs ...

Generating locales (this might take a while)...

  en_US.ISO-8859-1... done

Generation complete.

Creating SSH2 RSA key; this may take some time ...

2048 SHA256:I6kcUu1e8gm4LFyitJ1b/vrxF1tF1izhNLNWUpIZ7yQ root@lxc (RSA)

Creating SSH2 DSA key; this may take some time ...

1024 SHA256:v85zUbwYi1zB6/Sn6RHAXvFOlra9o9v09L+2bpB6L1o root@lxc (DSA)

Creating SSH2 ECDSA key; this may take some time ...

256 SHA256:ozhZhiRfRludJo1pLAvea1FzocBX5s2ObpO/8cuI1AY root@lxc (ECDSA)

Creating SSH2 ED25519 key; this may take some time ...

256 SHA256:qeIRecmihv18OaC4iwsje/b90EXf9S9z4cedqtpSDmE root@lxc (ED25519)

invoke-rc.d: could not determine current runlevel

invoke-rc.d: policy-rc.d denied execution of start.

 

Current default time zone: 'Etc/UTC'

Local time is now:      Tue Aug 16 15:40:57 UTC 2016.

Universal Time is now:  Tue Aug 16 15:40:57 UTC 2016.

 

 

##

# The default user is 'ubuntu' with password 'ubuntu'!

# Use the 'sudo' command to run tasks as root in the container.

##

С помощью дополнительных параметров можно выбрать другой релиз Ubuntu или, допустим, другую архитектуру. Например, команда lxc-create -t ubuntu -n lxc_trusty — -r trusty -a amd64 может быть использована для подготовки контейнера Ubuntu 14 (Trusty) архитектуры amd64.

Итак, наша виртуальная машина создана. Теперь запустим ее с помощью lxc-start -n ubuntu_lxc -d, а затем подключимся к созданному контейнеру:

root@lxc:~# lxc-console -n ubuntu_lxc Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Ubuntu 16.04.1 LTS ubuntu_lxc pts/0 ubuntu1_lxc login: ubuntu Password: Last login: Tue Aug 16 15:57:15 UTC 2016 on pts/0 Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-34-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ubuntu_lxc:~$ uname -a Linux ubuntu_lxc 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux ubuntu@ubuntu_lxc:~$


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

root@lxc:~# lxc-console -n ubuntu_lxc

 

Connected to tty 1

Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

 

Ubuntu 16.04.1 LTS ubuntu_lxc pts/0

 

ubuntu1_lxc login: ubuntu

Password:

Last login: Tue Aug 16 15:57:15 UTC 2016 on pts/0

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-34-generic x86_64)

 

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

* Management:     https://landscape.canonical.com

* Support:        https://ubuntu.com/advantage

To run a command as administrator (user "root"), use "sudo <command>".

See "man sudo_root" for details.

 

ubuntu@ubuntu_lxc:~$ uname -a

Linux ubuntu_lxc 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

ubuntu@ubuntu_lxc:~$

При необходимости, в настройках сети операционной системы можно указать сетевые настройки, активировать необходимые сервисы, установить требующиеся пакеты.

Если требуется создать виртуальную машину с Centos7, вначале необходимо инсталлировать традиционный для систем RedHat менеджер пакетов, это легко сделать всего одной командой apt-get install yum. После этого запускаем lxc-create:

root@lxc:~# lxc-create -n centos7_lxc -t centos -- -R 7 -a x86_64 Host CPE ID from /etc/os-release: Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ... Cache found. Updating... Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): base/7/x86_64/group_gz | 155 kB 00:00:00 (2/4): extras/7/x86_64/primary_db | 160 kB 00:00:00 (3/4): base/7/x86_64/primary_db | 5.3 MB 00:00:01 (4/4): updates/7/x86_64/primary_db | 6.5 MB 00:00:06 ... Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/centos7_lxc/rootfs ... Copying rootfs to /var/lib/lxc/centos7_lxc/rootfs ... Storing root password in '/var/lib/lxc/centos7_lxc/tmp_root_pass' Expiring password for user root. passwd: Success Container rootfs and config have been created. Edit the config file to check/enable networking setup. The temporary root password is stored in: '/var/lib/lxc/centos7_lxc/tmp_root_pass' The root password is set up as expired and will require it to be changed at first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag): chroot /var/lib/lxc/centos7_lxc/rootfs passwd


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

root@lxc:~# lxc-create -n centos7_lxc -t centos -- -R 7 -a x86_64

Host CPE ID from /etc/os-release:

Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ...

Cache found. Updating...

Loaded plugins: fastestmirror

base                                                                        | 3.6 kB  00:00:00

extras                                                                      | 3.4 kB  00:00:00

updates                                                                     | 3.4 kB  00:00:00

(1/4): base/7/x86_64/group_gz                                               | 155 kB  00:00:00

(2/4): extras/7/x86_64/primary_db                                           | 160 kB  00:00:00

(3/4): base/7/x86_64/primary_db                                             | 5.3 MB  00:00:01

(4/4): updates/7/x86_64/primary_db                                          | 6.5 MB  00:00:06

 

...

 

Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/centos7_lxc/rootfs ...

Copying rootfs to /var/lib/lxc/centos7_lxc/rootfs ...

Storing root password in '/var/lib/lxc/centos7_lxc/tmp_root_pass'

Expiring password for user root.

passwd: Success

 

 

Container rootfs and config have been created.

Edit the config file to check/enable networking setup.

 

The temporary root password is stored in:

 

        '/var/lib/lxc/centos7_lxc/tmp_root_pass'

 

 

The root password is set up as expired and will require it to be changed

at first login, which you should do as soon as possible.  If you lose the

root password or wish to change it without starting the container, you

can change it from the host by running the following command (which will

also reset the expired flag):

 

        chroot /var/lib/lxc/centos7_lxc/rootfs passwd

Временный пароль расположен в файле /var/lib/lxc/centos7_lxc/tmp_root_pass, скопируем его в буфер обмена, затем запустим контейнер и подключимся к нему. Обратите внимание — сразу же потребуется указать новый пароль root:

root@lxc:~# lxc-start -n centos7_lxc -d root@lxc:~# lxc-console -n centos7_lxc Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself CentOS Linux 7 (Core) Kernel 4.4.0-34-generic on an x86_64 centos7_lxc login: root Password: You are required to change your password immediately (root enforced) Changing password for root. (current) UNIX password: New password: Retype new password: [root@centos7_lxc ~]# uname -a Linux centos7_lxc.layer6.net 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [root@centos7_lxc ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

root@lxc:~# lxc-start -n centos7_lxc -d

root@lxc:~# lxc-console -n centos7_lxc

Connected to tty 1

Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

 

CentOS Linux 7 (Core)

Kernel 4.4.0-34-generic on an x86_64

 

centos7_lxc login: root

Password:

You are required to change your password immediately (root enforced)

Changing password for root.

(current) UNIX password:

New password:

Retype new password:

[root@centos7_lxc ~]# uname -a

Linux centos7_lxc.layer6.net 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@centos7_lxc ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

Контейнеры LXC — отличное простое решение для создания собственных приватных виртуальных Linux-машин, не требующее каких-либо специальных условий для работы. Конечно, в случае с LXC нет такой гибкости и возможностей, которые дают технологии KVM/QEMU — однако для многих задач использование LXC оправдано.

Хотите начать использовать LXC прямо сейчас?

Закажите любой виртуальный сервер на SSD-дисках , введите купон ITLDCLXC и постоянная скидка 10% у вас в кармане! Если будет необходимо, наша служба технической поддержки поможет выбрать подходящую локацию и тариф. Присоединяйтесь!

Подробнее о LXC, утилитах и рекомендациях:

  • Linuxcontainers.org
  • Руководство Ubuntu — Виртуализация — LXC
  • Official Debian Wiki — LXC
  • XGU.ru Wiki — LXC
  • LXC Web Panel — панель управления контейнерами LXC
  • Proxmox VE Wiki — Linux Container
  • Linux Containers with LXC: some best practices

Tags: lxc ubuntu

Related Posts

  • KeyHelp — бесплатная панель управления сервером
  • Ubuntu 16.04 LTS Xenial Xerus уже доступен на наших SSD VDS
  • Какую операционную систему выбрать? Версия 2.0
  • ZPanel — бесплатная панель для хостинга сайтов
Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования