Установка и настройка LXC на Ubuntu14

1.Установка LXC

При установке LXC автоматически установятся необходимые пакеты, такие как

и др.

Базовая конфигурация сети, которая применяется к контейнерам при их создании находится в файле
/etc/lxc/default.conf
Например

После установки LXC на хосте автоматически поднимается интерфейс типа Bridge lxcbr0
Когда USE_LXC_BRIDGE установлена в true в файле /etc/default/lxc (как устанавливается по умолчанию), мост с именем lxcbr0 создается в процессе старта. Этот мост получает частный адрес 10.0.3.1, а контейнеры его использующие получат адреса из диапазона 10.0.3.0/24

Кроме того, добавляется правило в цепочку POSTROUTING таблицы NAT для «маcкарадинга» внутренней сети -10.0.3.0/24 – для выпуска контейнеров в Интернет

Проверка наличия смонтированного cgroup

Проверка параметров LXC-конфигурации

Просмотр шаблонов операционных систем доступных для установки

Изменим тип сети для создаваемых контейнеров с veth на empty (чтобы при создании контейнера поднимался/создавался только localhost-интерфейс)

Отключаем использование дефолтного бриджа lxcbr0

Правило iptables в цепочке POSTROUTING таблицы NAT будет удалено автоматически после отключения дефолтного бриджа и перезагрузки ноды
Перегружаем ноду

После перезагрузки проверяем,что отсутствут дефолтный бридж

 

2.Создание контейнера

Самый простой способ создать контейнер — использовать lxc-create. Этот сценарий использует специфические для дистрибутива шаблоны в

для установки дружественных контейнеру настроек chroots в

и инициализации конфигурации в

и

Шаблоны создания контейнеров также могут воспринимать аргументы. Они могут быть перечислены после сиволов —

Установка Ubuntu 14 LTS в контейнере
Команда lxc-create будет использовать шаблон ubuntu (-t ubuntu) и создаст контейнер с именем ubuntu14.kamaok.org.ua с операционной системой Ubuntu 14.04 LTS(кодовое имя trusty)
Поскольку не указан файл настроек (что можно сделать с помощью параметра ‘-f file’), будет использован файл настроек по умолчанию /usr/share/lxc/config/ubuntu.common.conf

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

После установки Ubuntu в контейнeре пользователь для подключения к контейнеру ubuntu и пароль ubuntu (пользователь состоит в группе sudo)

Файл конфигурации контейнера размещается по пути

 

Автозапуск контейнера

Первый способ
Согласно файлу /etc/default/lxc
достаточно создать символьную ссылку с конфигурационного файла контейнера в каталог /etc/lxc/auto
Если переменная LXC_AUTO установлена в true, то происходит поиск в /etc/lxc/auto контейнеров, которые должны запускаться автоматически
Т.е для автоматического запуска контейнера необходимо создать символьную ссылку,указывающую на конфигурационный файл контейнера

Второй способ – через настройку файла конфигурации контейнера

 

3.Настройка сети на ноде и в контейнере для выпуска контейнеров в Интернет

Использование сетевого стека хост-системы (type = veth)
При запуске контейнера с таким типом сети, на хост-машине создается специальный виртуальный интерфейс (в примере ниже, он называется veth-01). Этот виртуальный интерфейс фактически и использует контейнер для взаимодействия с внешней средой.
Включение маршрутизации

Если сеть котейнеров использует т.н. серую(частную) подсеть

 

NAT-режим
На ноде добавляем настройки для создания нового интерфейса

Проверка наличия нового интерфейса

Настройка iptables на ноде

Или, если внешний адрес нода получает динамически

Настройка конфигурационного файла контейнера(предварительно останавливаем контейнер)

В результате, данный контейнер должен получить при старте ip=192.168.10.10 и через шлюз 192.168.10.1, и далее через 192.168.1.84 — выход в сеть.

Запускаем контейнер и проверяем наличие запущенного контейнера и добавление его в автозагрузку

На ноде появляется интерфейс

Просмотр интерфейсов, которые используют созданный мост lxc-bridge-nat

Проверка доступности контейнера с ноды

Подключаемся к контейнеру и проверяем наличие доступа в Интернет с контейнера

Логин ubuntu и пароль ubuntu, которые были созданы при установке контейнера

 

Если сеть котейнеров использует т.н. белую(публичную) подсеть

Bridge-интерфейс

Настройка ноды

Настройка конфигурационного файла контейнера(предварительно останавливаем контейнер)

Запуск контейнера и проверка доступности его по сети

Просмотр интерфейсов, которые используют созданный мост br0

Вход по сети на контейнер и проверки наличия доступа в Интернет с контейнера

 

4.Полезные команды LXC
Подразумевается, что имя контейнера ubuntu14.kamaok.org.ua

 

Создать новый контейнер LXC

В команду lxc-create можно передать параметры, в том числе желаемую версию дистрибутива. Чтобы узнать, какие параметры принимает шаблон следует выполнить
Для установки Debian

Для установки Centos

Для установки Ubuntu

 

Запуск контейнера в фоновом режиме(без подключения к консоли)

Запуск контейнера с логированием для диагностики проблемы при запуске контейнера

 

Проверка состояния контейнеров

 

Просмотр подробной информации о контейнере

 

Вход в контейнер/подключение к консоли контейнера

 

Остановка контейнера

 

Удаление контейнера

 

Создание клона контейнера(предварительно оригинальный контейнер должен быть остановлен)

 

Заморозка/разморозка контейнера:

 

Создание снапшота(контейнер должен быть остановлен предварительно)

 

Список снапшотов

 

Восстановление из снепшота

 

Выполнить указанную команду внутри контейнера

 

Мониторинг состояния контейнеров
Отслеживает один или более контейнеров на любые изменения статусов. Она как правило получает имя контейнера с помощью опции -n, однако в этом случае имя контейнера может быть регулярным выражением posix, чтобы позволять отслеживать желаемые наборы контейнеров.
lxc-monitor продолжает выполнение пока выводит статусы контейнеров

 

Ждать определённого состояния контейнера; завершаться, когда состояние достигнуто
Например, ожидать пока контейнер ubuntu14.kamaok.org.ua не войдет в состояния STOPPED или FROZEN и затем завершится.

 

Управление cgroup-группами контейнера

 

5.Ограничение ресурсов контейнера с помощью cgroup
lxc-cgroup получает или устанавливает значения cgroup ассоциированных с именем контейнера

RAM/SWAP

Ограничения применяемые на лету сбрасываются после перезагрузки контейнера
Просмотр доступной памяти контейнеру

Ограничим размер оперативной пямяти для контейнера в размере 1024MB

Проверяем наши изменения

Для того, чтобы изменения сохранялись при перезагрузке контейнера необходимо добавить их в файл с настройками контейнера

Изменения в этом файле вступят в силу после перезагрузки контейнера

Проверка размера доступной для контейнера оперативной памяти

Либо можно воспользоваться запуском контейнера с логированием и фильтрацией лога запуска контейнера

Либо с помощью cgroup

 

Ограниечение на swap-раздел
Например, установлен лимит на использование оперативной памяти 1024MB

Для установки лимита на использование суммы оперативной памяти и swap используется параметр memory.memsw.limit_in_bytes, который ОБЯЗАТЕЛЬНО должен быть указан после параметра memory.limit_in_bytes.
Например, ограничим размер swap-раздела 1024M

CPU

— выделение конкретного ядра/ядер

— приоритет (по умолчанию равно 1024)
В конфигурационном файле контейнера (выделяем под контейнер первых два ядра процессора):
Чтобы изменения сохранились после перезагрузки

Чтобы изменения применились до перезагрузки

Проверка значений

 

Источник:
http://eax.me/lxc/
http://xgu.ru/wiki/LXC
http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/lxc
http://serverfault.com/questions/444232/limit-memory-and-cpu-with-lxc-execute/471276#471276
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/index.html

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика