Страницы

Показаны сообщения с ярлыком виртуализация. Показать все сообщения
Показаны сообщения с ярлыком виртуализация. Показать все сообщения

четверг, 29 октября 2015 г.

Быстрая установка Docker в Ubuntu server 15.10

После установки Ubuntu Server 15.10 в один из разделов на микросервере, пришло время установить контейнерную виртуализацию, в рамках идеи переноса сервисных служб в контейнеры, на новой основе - Docker.

Инструкция по установке в Ubuntu есть на сайте docker - http://docs.docker.com/installation/ubuntulinux/ .

Здесь только команды, для быстрого запуска, под пользователем root:
Смена комплектного репозитория ubuntu на новейший репозиторий от Docker. Команды все в одной строке.

root@microserver# apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

root@microserver# touch /etc/apt/sources.list.d/docker.list

root@microserver# nano /etc/apt/sources.list.d/docker.list

root@microserver# cat /etc/apt/sources.list.d/docker.list

# Docker.IO - пакеты контейнерной виртуализации
# сервер: microserver
# 29.10.2015
deb https://apt.dockerproject.org/repo ubuntu-wily main


root@microserver# apt-get update

root@microserver# apt-cache policy docker-engine

Установка Docker и проверка работоспособности:

root@microserver# apt-get install docker-engine

root@microserver# docker run hello-world

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

root@microserver# usermod -aG docker iam


Настройку сети, для контейнеров - это специфическая задача, в зависимости от сетевого окружения.



воскресенье, 25 марта 2012 г.

LXC на Ubuntu server 12.04. Особенности

Особенности настройки контейнеров LXC на Ubuntu 12.04 server

Итак, при загрузке микросервера операционной системой Ubuntu 12.04,  создается интерфейс lxcbr0. Как ясно из названия - это мост. Остается выяснить откуда он управляется.
Первые раскопки показали.

Конфигурация LXC в системе сервера

Имеются следующие места, относящиеся к конфигурации LXC на сервере.
/etc/lxc
/etc/lxc/auto

Беглый анализ работ Upstart показал, что в /etc/lxc/auto могут располагаться конфигурации контейнеров и они будут запускаться при старте системы. Т.е. автозапуск LXC при старте.


Конфигурационный файл: /etc/default/lxc
Этот файл может существовать, тогда он влияет, а может и не существовать, тогда берутся настройки по-умолчанию, прописанные в работах lxc, lxc-net.
В этом файле есть две управляющие опции:
USE_LXC_BRIDGE="true"  - для поднятия сетевой инфраструктуры для контейнеров
LXC_AUTO="true" - для автозапуска контейнеров при старте системы
Этот файл влияет на работу lxc. Т.е. его опции принимаются во внимание при работе lxc, lxc-net.
Также в нем присутствуют настройки сети для контейнеров.
Сеть для всех контейнеров обслуживается dhcp-сервером dnsmasq, что позволяет использовать в контейнерах динамические ip-адреса.


Конфигурационный файл: /etc/lxc/lxc.conf
Это настройки шаблона контейнеров. При создании нового контейнера они учитываются. Его можно настроить под свою систему.


Обнаружены "работы" Upstart
/etc/init/lxc.conf
/etc/init/lxc-net.conf

Работа lxc выполняет автозапуск контейнеров при старте системы, указанных в /etc/lxc/auto

Работа lxc-net выполняет настройку бриджа для контейнеров, файрвола, NAT, dnsmasq. Т.е. сетевую инфраструктуру для контейнеров.


Список контейнеров в системе

Список контейнеров запущенных и остановленных в системе, просмотреть можно по команде:
$ lxc-list





Ресурсы
- Настройка lxc на домашнем компьютере. http://gimmor.blogspot.com/2012/03/lxc.html
- .
- .

воскресенье, 11 марта 2012 г.

Настройка LXC окружения на домашнем компьютере


Настройка LXC окружения на домашнем компьютере с ОС Ubuntu 11.10
Статья тестовая, незавершенная, исключительно для сохранения опыта.

LXC - LinuX Containers. Контейнеры Linux - технология виртуализации программного обеспечения на уровне операционной системы. Контейнеры Linux поддерживаются на уровне ядра.

Преимущества контейнерной технологии lxc для меня лично.
1. Не требуется поддержка виртуализации vt-x процессором. Intel Celeron 420 ее не поддерживает.
2. Легко устанавливается из репозиториев ubuntu.
3. Легко формируется минимальный сервер ubuntu в контейнере.
4. Работает
5. В силу особенностей технологии, унифицирует программное окружение контейнеров и хост-системы. Условно говоря - "везде ubuntu".
6. Присутствуют решаемые трудности.

Что получиться в результате настройки
1. Будет установлена на хост-системе (домашнем компьютере) инфраструктура lxc
2. Будет создан контейнер с минимальной версией ubuntu 11.10.
3. Проведена локализация и первоначальная настройка контейнера.
4. Управление контейнером будет осуществляться стандартными средствами lxc и ОС.

Установка поддержки инфраструктуры LXC в хост-системе Ubuntu 11.10
$ sudo apt-get update
$ sudo apt-get install lxc

Установка сопутствующих пакетов в хост-системе
Комплект утилит для управления мостовыми(bridge) соединениями. Дело в том, что сетевое подключение контейнера к локальной сети и интернет, выполняется через сетевой мост.
$ sudo apt-get install bridge-utils


Операции с контейнерами выполняются в пользовательском окружении root хост-системы.
Перейти в пользовательское окружении суперпользователя root
$ sudo -s


Создание контейнера, команда lxc-create

Создание контейнера с выбранным именем syncserver, на основе встроенного шаблона ubuntu 11.10
$ sudo lxc-create -n syncserver -t ubuntu
Более правильно, вначале создать файл конфигурации, а потом на его основе создать контейнер. Это часто используется для копирования настроек сети в конфигурационный файл контейнера.
Конфигурационный файл config, относящийся к создаваемому контейнеру, создается в папке /var/lib/lxc/syncserver/
Корневая файловая система контейнера создается в папке /var/lib/lxc/syncserver/rootfs


Производится загрузка пакетов минимальной версии Ubuntu 11.10 (или текущей версии) и сохранение ее в кэше, дополнительно в хост-систему установился пакет lxcguest. Были какие-то трудности с локализацией.
Возможно мелкая трудность, решится, с помощью генерации "C" локали.
В некоторых системах, исправляется следующим образом:
$ sudo locale-gen ru_RU.UTF-8
$ sudo dpkg-reconfigure locales
и еще
$ export LC_ALL=ru_RU.UTF-8
Также можно отредактировать /etc/default/locale и внести строку вида LC_ALL=ru_RU.UTF-8
это можно сделать перед генерацией сервера.

Настройка сети контейнера

Прописать в файл конфигурации контейнера следующее, для статического ipv4-адреса:

# Настройка сети
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.100.2/24 192.168.100.255



Опционально. Удаление контейнера, команда lxc-destroy
Если какие-то настройки неудачны, то можно удалить созданный контейнер
$ lxc-destroy -n syncserver





Первая правка конфигурации контейнера для подключение к локальной сети
Выбор способа сетевого подключения.  Настройка локальной сети контейнеров, самая сложная часть в данном изложении.
Мостовое подключение, при наличии собственной внутренней домашней локальной сети за роутером, позволяет обращаться к контейнеру как обычному компьютеру, с любых домашних компьютеров. Этот вариант нам подходит, т.к. позволит обеспечить синхронизацию контактов между всеми домашними компьютерами и телефонами, подключенными к домашней сети, без выхода в интернет. Роутер раздает IP-адреса из диапазона "серых" адресов и обеспечивает выход в Интернет посредством трансляции адресов на роутере (NAT gateway).
Вариант с трансляцией ip-адресов (NAT) непосредственно на хост-системе (домашнем компьютере) дает иные возможности, но ограничивает доступ к контейнеру из локальной сети, позволяя обращаться к нему только с хост-системы.
Вариант, когда нет домашней локальной сети, а компьютер напрямую подключен к локальной сети провайдера и к сети Интернет через VPN - мой временный вариант.

Итак, настройка вариантов.

Вариант - через мост. Настройка мостового соединения
Сборка моста - создание интерфейса моста br0 (иное название допустимо)
$ sudo brctl addbr br0
....


Вариант - через NAT на хост-системе. Ручная настройка в режиме пошагового тестирования и проверки
Определим что контейнере будут располагаться в отдельном сегменте, 192.168.100.xxx:
На хост-системе выполняем:
Сборка моста - создание интерфейса моста br0 (иное название допустимо)
$ sudo brctl addbr br0

Присвоение "серого" статического IPv4 адреса, мосту, он будет как-бы шлюзом, для наших контейнеров:
$ sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0 promisc up

Включение NAT
Выполнить sudo -s , затем echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
$iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

В контейнере выполняем:
$ sudo ifconfig eth0 192.168.100.2 netmask 255.255.255.0 up
если статический адрес не был присвоен ранее, в конфигурационном файле контейнера.
смотрим
$ sudo ifconfig
Выясним доступен ли бридж
$ ping 192.168.100.1
Бридж должен быть доступен.

На хосте выполняем:
$ ping 192.168.100.2
Контейнер должен быть доступен.


Добавление в контейнере маршрута по умолчанию
$ route add default gw 192.168.100.1



После этого, при наличии сети Интернет на хост-системе, он будет доступен и в контейнере. Т.е. NAT включен, но до момента выключения контейнера. Чтобы настройки сети сохранились надо сделать следующее.
Указать сетевые настройки в конфигурационном файле контейнера.
Отредактировать файл /etc/network/interfaces в корневой файловой системе контейнера, можно изнутри контейнера

$ sudo nano /etc/network/interfaces
auto eth0
iface eth0 inet static
   address 192.168.100.2
   netmask 255.255.255.0
   gateway 192.168.100.1


Чтобы шлюз по-умолчанию добавлялся автоматически, надо что-то сделать. Какой-то баг.

может добавить в interfaces #   post-up route add default gw 192.168.100.1
у меня не сработало



Локализация (поддержка русского языка) в консоли контейнера
После появления интернета в контейнере, выполнить обновление репозиториев ubuntu и доустановить локализацию сервера.

$ sudo apt-get update
$ sudo apt-get install language-pack-ru-base
$sudo nano /etc/default/locale
Добавляем строку, если нет: LANG=ru_RU.UTF-8
$ sudo dpkg-reconfigure locales

Выходим и входим заново в контейнере. По идее, перезагружаться не надо.
Команда покажет текущие настройки локали:
$ locale

Справочно. Перезагрузка lxc-контейнера изнутри
$ sudo shutdown -r now


Мой вариант. В моем случае осложняется еще и тем, что интернет передается через VPN, интерфейс ppp0.
В общем случае, существует трудности совместимости менеджера сети среды Gnome (Network Manager) и мостовых утилит (bridge-utils)
Частое решение - отключение менеджера сети и управление сетевыми подключениями производить вручную через командную строку.
Еще одно решение - добавить дополнительную сетевую карту. Это позволит "Менеджеру сети " управлять одной картой, а вторая карта - будет в мосту, для контейнеров. Что обеспечит сервис пользователю.
Можно автоматизировать отключение менеджера сети, поднятие моста и запуск сервера и остановку сервера, разборка моста, отключение моста, включение менеджера сети.


Первый запуск, команда запуска контейнера lxc-start
$ sudo lxc-start -n syncserver


Первоначальная настройка изнутри контейнера

имя пользователя и пароль по умолчанию, при первом входе в консоль контейнера - root/root.
Далее создаем главного пользователя с именем на выбор, - "admin" и добавляем его в группы sudousers.
$ adduser admin
аккуратно заполняем поля.
$ adduser admin sudo
добавляем в группу sudo users.

Изменяем пароль пользователя root, т.к. мы зашли под ним.
$ passwd


Проверка сетевого подключения изнутри контейнера
$ ping www.google.com


Выход пользователя из контейнера
$ exit
Выключение контейнера изнутри
$ sudo shutdown -h now

Безопасное выключение контейнера снаружи, из хост-системы
Вход в консоль управления контейнером
$ sudo lxc-console -n syncserver
Команда выключения
#syncserver> init 0

Грубое выключение контейнера
$ sudo lxc-stop -n syncserver


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

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



Резервное копирование контейнера
Сразу после установки и настройки, рекомендуется создать резервную копию с помощью tar
Пример файла backup.sh:
#!/bin/bash
NAME=syncserver
SRC_DIR=/var/lib/lxc/$NAME
DEST_DIR=/media/vm/backups/$NAME
cd $SRC_DIR
mkdir -p $DEST_DIR
tar --one-file-system -cf $DEST_DIR/$NAME-`date +%F`.tar .
#tar --one-file-system -czf $DEST_DIR/$NAME-`date +%F`.tar.gz .

В несжатом состоянии структура создаётся очень быстро.

Перенос контейнера в другое сетевое окружение (другая конфигурация сети)
Например, перенос контейнера в сеть с роутером и динамическим присвоением "серого" IP-адреса. Операционная система хост-системы должна совпадать с исходной.
Фактически, все определяется файлом конфигурации контейнера.

Ресурсы
1. Обстоятельная статья про виртуальные мосты в Linux http://xgu.ru/wiki/Linux_Bridge
2. Тестовый SyncML сервер см. http://gimmor.blogspot.com/2012/03/syncml.html
3. LXC виртуализация, http://koder-ua.blogspot.com/
4. Пояснение о виртуальных сетях lxc, в картинках на англ. языке  http://planet.gentoo.org/archives/2010/2010-09-06.html