1.Установка OpenVZ
Добавление репозитараия для установки OpenVZ
1 2 3 |
# cat << EOF > /etc/apt/sources.list.d/openvz-rhel6.list deb http://download.openvz.org/debian wheezy main EOF |
Скачивание и установка GPG-ключа, которым подписан репозитарий
1 |
# wget http://ftp.openvz.org/debian/archive.key |
1 |
# apt-key add archive.key |
Обновление локального кеша.
1 |
# apt-get update |
Установка необходимых пакетов
1 |
# apt-get install build-essential linux-headers-$(uname -r) |
Установка ядра с поддержкой OpenVZ
Для 64-разрядной операционной системы
1 |
# apt-get install linux-image-openvz-amd64 |
Для 32-разрядной операционной системы
1 |
# apt-get install linux-image-openvz-686 |
Настройка переменных ядра с помощью sysctl
1 |
# nano /etc/sysctl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
net.ipv4.ip_forward = 1 net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.default.proxy_arp = 0 net.ipv6.conf.default.forwarding = 1 net.ipv6.conf.all.forwarding = 1 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # We do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 |
1 |
# sysctl –p |
Установка утилит для управления OpenVZ
1 |
# apt-get install vzctl vzquota ploop vzstats |
Перезагрузка
1 |
# reboot |
При загрузке в grub выбираем строку с OpenVZ ядром
После загрузкт проверяем версию ядра
1 |
# uname -a |
1 |
Linux app02 2.6.32-openvz-042stab116.2-amd64 #1 SMP Fri Jun 24 15:35:00 MSK 2016 x86_64 GNU/Linux |
Настройка загрузчика GRUB для автоматического выбора ядра OpenVZ при загрузке
Для этого в файле /boot/grub/grub.cfg проверяем — каким по счёту в меню идёт загрузка ядра с openvz при этом беря во внимание, что нумерация начинается с нуля
После чего установку возможно двумя вариантами
А) с помощью изменения опции GRUB_DEFAULT в файле /etc/default/grub
1 |
# sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=2/' /etc/default/grub |
где 2 -номер, под которым ядро загружается в файле /boot/grub/grub.cfg
И обновить загрузчик командой
1 |
# update-grub |
Б) с помощью выполнения команды
1 |
# grub-set-default 2 |
где 2 -номер, под которым ядро загружается в файле /boot/grub/grub.cfg
2.Создание виртуальной машины OpenVZ
1 |
# cd /var/lib/vz/template/cache/ |
Скачиваем шаблон требуемой операционной системы
https://download.openvz.org/template/precreated/
https://wiki.openvz.org/Download/template/precreated
Например, Centos6
1 |
# wget https://download.openvz.org/template/precreated/centos-6-x86_64-minimal.tar.gz |
Создание контейнера
1 |
# vzctl create 101 --ostemplate centos-6-x86_64-minimal |
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 47 48 |
Creating image: /var/lib/vz/private/101.tmp/root.hdd/root.hdd size=2306867K Creating delta /var/lib/vz/private/101.tmp/root.hdd/root.hdd bs=2048 size=4614144 sectors v2 Storing /var/lib/vz/private/101.tmp/root.hdd/DiskDescriptor.xml Opening delta /var/lib/vz/private/101.tmp/root.hdd/root.hdd Adding delta dev=/dev/ploop10185 img=/var/lib/vz/private/101.tmp/root.hdd/root.hdd (rw) mke2fs 1.42.5 (29-Jul-2012) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 144288 inodes, 576256 blocks 28812 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 18 block groups 32768 blocks per group, 32768 fragments per group 8016 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done tune2fs 1.42.5 (29-Jul-2012) Setting maximal mount count to -1 Setting error behavior to 2 Setting interval between checks to 0 seconds Creating balloon file .balloon-c3a5ae3d-ce7f-43c4-a1ea-c61e2b4504e8 Mounting /dev/ploop10185p1 at /var/lib/vz/private/101.tmp/root.hdd/root.hdd.mnt fstype=ext4 data='' Unmounting device /dev/ploop10185 Opening delta /var/lib/vz/private/101.tmp/root.hdd/root.hdd Adding delta dev=/dev/ploop10185 img=/var/lib/vz/private/101.tmp/root.hdd/root.hdd (rw) Mounting /dev/ploop10185p1 at /var/lib/vz/root/101 fstype=ext4 data='balloon_ino=12,' Creating container private area (centos-6-x86_64-minimal) Unmounting file system at /var/lib/vz/root/101 Unmounting device /dev/ploop10185 Opening delta /var/lib/vz/private/101/root.hdd/root.hdd Adding delta dev=/dev/ploop10185 img=/var/lib/vz/private/101/root.hdd/root.hdd (rw) Mounting /dev/ploop10185p1 at /var/lib/vz/root/101 fstype=ext4 data='balloon_ino=12,' Performing postcreate actions Unmounting file system at /var/lib/vz/root/101 Unmounting device /dev/ploop10185 CT configuration saved to /etc/vz/conf/101.conf Container private area was created |
Настройка параметров созданного контейнера
1 |
# vzctl set 101 --hostname centos6.kamaok.org.ua --save --ipadd 192.168.10.101 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes --save |
1 |
CT configuration saved to /etc/vz/conf/101.conf |
Настройка ресурсов для созданного контейнера
1 |
# vzctl set 101 --ram 1024M --save --swap 1024M --save --diskspace 3G:5G --save |
Запуск контейнера
1 |
# vzctl start 101 |
1 2 3 4 5 6 7 8 |
Starting container... Opening delta /var/lib/vz/private/101/root.hdd/root.hdd Adding delta dev=/dev/ploop10185 img=/var/lib/vz/private/101/root.hdd/root.hdd (rw) Mounting /dev/ploop10185p1 at /var/lib/vz/root/101 fstype=ext4 data='balloon_ino=12,' Container is mounted Adding IP address(es): 192.168.10.101 Setting CPU units: 1000 Container start in progress... |
Проверка состояния всех контейнеров
1 |
# vzlist --all |
1 2 |
CTID NPROC STATUS IP_ADDR HOSTNAME 101 11 running 192.168.10.101 centos6.kamaok.org.ua |
Просмотр смонтированных контейнеров
1 |
# df -h | grep -i ploop |
1 |
/dev/ploop10185p1 4,8G 417M 4,2G 9% /var/lib/vz/root/101 |
Конфигурационный файл контейнера 101
1 |
# grep -vE '^$|^#' /etc/vz/conf/101.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PHYSPAGES="0:262144" SWAPPAGES="0:262144" DISKSPACE="3145728:5242880" DISKINODES="131072:144179" QUOTATIME="0" CPUUNITS="1000" NETFILTER="stateless" VE_ROOT="/var/lib/vz/root/$VEID" VE_PRIVATE="/var/lib/vz/private/$VEID" VE_LAYOUT="ploop" OSTEMPLATE="centos-6-x86_64-minimal" ORIGIN_SAMPLE="vswap-256m" IP_ADDRESS="192.168.10.101" HOSTNAME="centos6.kamaok.org.ua" NAMESERVER="8.8.8.8 8.8.4.4" ONBOOT="yes" |
Выполнение команды внутри контейнера находясь на хостовой ноде
(например, установка пароля для пользователя root в контейнере)
1 |
# vzctl exec 101 passwd |
Вход в контейнер
1 |
# vzctl enter 101 |
1 2 |
entered into CT 101 [root@centos6 /]# |
3.Настройка доступа в Интернет для виртуальной машины
1.Включаем SNAT/MASQUERADE на хостовой ноды для сети виртуальных машин
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 159.224.XXX.YYY |
192.168.10.0/24 – частная/внутренняя сеть для вирт.машин
eth0-внешний интерфейс,смотрящий наружу(подключен к провайдеру)
159.224.XXX.YYY – IP-адрес на внешнем интерфейсе
Если адрес на внешнем интерфейсе получается от провайдера не статический, а динамический,то используем т.н. «маскарадинг»
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE |
2.Проверяем, включена ли маршрутизация пакетов(включали ее на этапе настройки переменных ядра для OpenVZ)
1 |
# sysctl -a | grep -w net.ipv4.ip_forward |
1 |
net.ipv4.ip_forward = 1 |
шлюзом по умолчанию для вирт.машины выступает интерфейс venet0, через который она перенаправляет все пакеты, как в Интернет, так и для других вирт.машин в этой сети
Таблица маршрутизации на вирт.машины
1 |
# ip route show |
1 2 |
169.254.0.0/16 dev venet0 scope link metric 1002 default dev venet0 scope link |
Создание второго контейнера с Debian8
1 |
# cd /var/lib/vz/template/cache && wget https://download.openvz.org/template/precreated/debian-8.0-x86_64-minimal.tar.gz |
1 |
# vzctl create 102 --ostemplate debian-8.0-x86_64-minimal |
1 |
# vzctl set 102 --hostname debian8.kamaok.org.ua --save--ipadd 192.168.10.102 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes –-save |
1 |
# vzctl set 102 --ram 1024M --save --swap 1024M --save --diskspace 3G:5G --save |
1 |
# vzctl start 102 |
1 |
# vzlist -a |
1 2 3 |
CTID NPROC STATUS IP_ADDR HOSTNAME 101 11 running 192.168.10.101 centos6.kamaok.org.ua 102 11 running 192.168.10.102 debian8.kamaok.org.ua |
1 |
# df -h | grep -i ploop |
1 2 |
/dev/ploop34183p1 4,8G 459M 4,2G 10% /var/lib/vz/root/102 /dev/ploop10185p1 4,8G 417M 4,2G 9% /var/lib/vz/root/101 |
1 |
# vzctl enter 102 |
1 |
entered into CT 102 |
1 |
root@debian8:/# ip route show |
1 |
default dev venet0 scope link |
4.Мониторинг загрузки на процесор и диск от контейнеров OpenVZ
1 |
# wget --no-check-certificate https://raw.githubusercontent.com/FastVPSEestiOu/open_vestat/master/open_vestat.pl -O /usr/local/sbin/open_vestat |
1 |
# wget --no-check-certificate https://raw.githubusercontent.com/FastVPSEestiOu/open_vestat/master/open_vestat_bash_completion -O /etc/bash_completion.d/open_vestat |
1 |
# chmod +x /usr/local/sbin/open_vestat |
1 |
# ln -s /usr/local/sbin/open_vestat /usr/sbin/open_vestat |
Помощь по использованию утилиты
1 |
# open_vestat --help |
Например, просмотр top 20 контейнеров по использованию процессора
1 |
# open_vestat --sort-by cpu |
1 2 3 |
We sort data by cpu 102: disk_time: 854.0 % disk_sectors: 166.2 % cpu: 26.3 % 101: disk_time: 0.0 % disk_sectors: 0.0 % cpu: 0.0 % |
https://www.stableit.ru/2015/05/openvz.html
Источник:
https://openvz.org/Installation_on_Debian
https://openvz.org/Basic_operations_in_OpenVZ_environment