Настройка контейнеров на linux

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

— Почему мы решили перейти на LXC контейнеры?
— Как создать контейнер и запустить на нем хост на базе Битрикс?

Для кого это будет полезно:

Для всех, кто хочет попробовать новое решение, при этом используя меньше ресурсов.

Преимущества LXC перед виртуальными машинами

Мы перешли на контейнеры, когда столкнулись с нехваткой ресурсов серверов, сложностью разграничения прав доступа для разных проектов и конфликтами программного обеспечения в одной виртуальной машине. Вот несколько ключевых преимуществ LXC перед виртуальными машинами:

  1. Меньше потерь производительности CPU, дисковых операций и оперативной памяти. Почти всё, что доступно в контейнере, работает со скоростью сервера.
  2. Не нужно выделять оперативную память под ядро ОС, видеопамять, дисковые буферы и т.д.
  3. Быстрый запуск. Фактически запускаются только те приложения, которые необходимы для работы контейнера.
  4. Поддерживается запуск в контейнере отдельных приложений, а не полной системы. Удобно, что доступы можно выдавать простым добавлением пользователя, (а не chroot), так как у нас только один проект в контейнере (на виртуалках было несколько).
  5. Возможность управлять ресурсами каждого контейнера.
  6. Быстро и легко перемещать контейнеры между серверами.
rsync -alvz старыйСервер:/var/lib/lxd/container/test/ /var/lib/lxd/container/test/

Нужно подробнее остановиться на пятом пункте и рассказать про управление ресурсами. Мы должны предоставить контейнеру достаточное количество ресурсов для работы, и в то же время быть уверенными в том, что контейнер не будет потреблять лишних ресурсов, мешая тем самым работе остальной системы.

Читайте также:  Linux выполнить несколько команд последовательно

Посмотреть статистику потребления ресурсов можно командой: lxc info test

Remote: unix:// Архитектура: x86_64 Создано: 2018/12/04 14:27 UTC Status: Running Type: persistent Профили: default Pid: 28317 IPs: eth0: inet 172.27.2.204 vethF91F2U Resources: Процессы: 56 CPU usage: Использование ЦП (в секундах): 20583 Memory usage: Memory (current): 1.03GB Memory (peak): 3.11GB Network usage: eth0: Получено байтов: 17.45GB Отправлено байтов: 9.93GB 

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

  • lxc config set test limits.memory 2048M # устанавливаем лимит памяти.
  • lxc config set test limits.cpu 1,2,3,8 # привязываем контейнер к ядрам CPU.
  • lxc config set test cpu.allowance 10% # ограничиваем потребление ресурсов CPU.
  • lxc config set test root size 50GB # ограничиваем объём используемого контейнером дискового пространства(работает только с ZFS или btrfs).
  • lxc config get test limits.memory – просматриваем установленное значение лимита

Настраиваем сервер и переносим стандартный хост с Bitrix из виртуалки на контейнер

1.1 Устанавливаем на сервер последнюю версию Ubuntu 18.04 server. В ней уже есть LXD. LXD это надстройка над LXC, гипервизор, который упрощает взаимодействие с системой контейнеризации.
1.2 apt install bridge-utils # установим bridge-utils
1.3 lxd init # инициализируем lxd
1.4 lxc profile edit default # редактируем файл профиля:

devices: eth0: name: eth0 nictype: bridged parent: br0 type: nic root: path: / pool: default type: disk name: default 

1. 5 lxc launch ubuntu:18.04 test # создаем контейнер с названием test. Он сам скачает образ, создаст и запустит его. На этом настройка и создание контейнера закончены, дальше переходим к настройке контейнера и переносу хоста на него.

2. Настройка контейнера для хоста и перенос сайта

Читайте также:  Linux redirect all outputs

2.1 lxc exec test /bin/bash # Заходим в созданный контейнер.
2.2 add-apt-repository ppa:ondrej/php # Добавляем репозиторий.
2.3 apt update # Обновляем репозиторий.
2.4 apt install
php7.1 ldap,mbstring,mcrypt,mysql,odbc,opcache,phpdbg,pspell,readline,recode,soap,
tidy,xml,xmlrpc,xsl,zip> #
Устанавливаем php и все нужные модули для битрикса.
2.5 apt install nginx # Устанавливаем nginx.
2.6 vim /etc/netplan/50-cloud-init.yaml # Делаем ip статичным:

network: version: 2 ethernets: eth0: addresses: [172.27.2.108/16] gateway4: 172.27.0.1 nameservers: addresses: [172.27.1.1] dhcp4: false

2.7 Копируем конфиги php и nginx с нашей виртуалки, проверяем, что все запускается и работает.
2.8 Переносим весь сайт с нашей виртуалки. Например:

rsync -alvz стараяВиртуалка:/var/www/ /var/www/

3. Создание отдельного контейнера для базы данных

3.1 Повторим шаги 1.5, 2.1 и 2.6, назвав контейнер к примеру test-db.
3.2 apt install mysql-server # установим БД
3.3 apt install pv # Установим PV, чтобы видеть прогресс, когда будем заливать БД.

4. Настройка нового сервера БД

Для начала соберем информацию со старого сервера:

4.1 Нам понадобится user и pass от нужной базы.
4.2 mysql -u test -p’test’ -e «show create database testDB;» # Узнаем как создана БД (то, что нам понадобится выделено):

mysql: [Warning] Using a password on the command line interface can be insecure. +----------+--------------------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------------------+ | demoshop | CREATE DATABASE `demoshop` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | +----------+--------------------------------------------------------------------------+

4.3 mysqldump -ER —single-transaction —quick testDB | gzip > testDB.sql.gz # Выполним эту команду на сервере, где лежит наша БД. Она сделает дамп и сожмет его в архив.

Зайдем в нашу новую базу и выполним следующие действия:

4.4 rsync -alvz стараяБД:/root/ testDB.sql.gz /root/ # перенесем архив с дампом на наш контейнер.
4.5 mysql # Зайдем в нашу базу
4.5.1 CREATE USER ‘user’@’%’ IDENTIFIED BY ‘pass’; # создадим такого же пользователя и пароль.
4.5.2 Из пункта 4.2 введем команду: CREATE DATABASE `имяБД` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
4.5.3 GRANT ALL PRIVILEGES ON имяБД .* TO ‘user’@’%’ IDENTIFIED by ‘pass’; # Дадим права нашей базе.
4.6 Выйдем из базы и из консоли контейнера выполним: pv testDB.sql.gz |zcat | mysql testDB # Заливаем дамп в нашу базу

Читайте также:  Good web browser linux

5.1 Меняем параметры подключения к БД, указываем новый IP нашей базы.
5.2 После этого сайт должен открываться по IP или DNS, это зависит от вашей конфигурации.

Заключение

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

Источник

Оцените статью
Adblock
detector