Spis treści

OpenVZ

Instalacja na centos 6.2

instalujemy „goły” system poprzez netinstall

wybieramy instalacja z podstawowym sterownikiem video
wybieramy nośnik http:
Ręcznie wypełniamy dla systemu 64bit :
http://mirror.centos.org/centos/6/os/x86_64/

Uzbrajamy się w cierpliwość, ściąganie potrafi trwać… długo.

yum install wget
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ

Upewniamy się że wyłączone są repozytoria [openvz-kernel-rhel5] enabled=0 a włączone [openvz-kernel-rhel6] enabled=1

vi openvz.repo

Przeglądamy jeszcze dostępne wersje kernela openvz

yum search vzkernel

Instalujemy jądro

yum install vzkernel

Sprawdzamy czy domyślnie uruchmianym jądrem jest openvz

vi /boot/grub/menu.lst

partycje /vz/ umieszczamy na lvm

W /etc/fstab dodajemy obsługę quoty, przykładowo:

UUID=UIII67Hkh&Yi     /vz   ext3    defaults,usrquota,grpquota              1    1

Instalujemy narzędzia openvz

yum install vzctl vzquota

Poprawiamy parametry jądra

vi /etc/sysctl.conf

Wprowadzamy następujące poprawki:

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0

# 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

Zatwierdzamy je poleceniem :

sysctl -p

Aby virtualne podsieci mogły działać w różnych podsieciach edytujemy plik:

vi /etc/vz/vz.conf

i ustawiamy w nim :

[...]
NEIGHBOUR_DEVS=all
[...]

Wyłączamy selinux

vi /etc/sysconfig/selinux
SELINUX=disabled 

Konfiguracja reguly_iptables i routingu

Wstawiamy następujace reguly (podsiec podajemy taka w ktorej pracuja nasze maszyny wirtualne.

iptables -I FORWARD 1 -s 192.168.0.0/24 -j ACCEPT
iptables -I FORWARD 2 -d 192.168.0.0/24 -j ACCEPT

Reguły zapisujemy poprzez:

service iptables save

Waże by te reguly znalazly sie przed :

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Uruchamianie maszyn wirtualnych

vzctl create 101 --ostemplate ubuntu-12.04-x86_64 --conf basic
vzctl set 101 --hostname test.example.com --save
vzctl set 101 --ipadd 192.168.0.101 --save
vzctl set 101 --numothersock 120 --save
vzctl set 101 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --nameserver 145.253.2.75 --save
vzctl set 101 --passwd
vzctl set 101 --cpulimit 50 --save
vzctl set 101 --onboot yes --save

Sieć veth i venet

Najprościej konfiguruje sie interface venet. Śieć jest całkowicie zależna od hosta a konfiguracja jest bardzo prosta. Host całkowicie kontroluje sieć CT

venet vzctl set 101 –ipadd 192.168.0.101 –save

vzctl set 101 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --nameserver 145.253.2.75 --save

aby CT mogły konfigurować sieć całkowicie niezależnie od hosta C0 należy skonfigurować interface veth ( virtualny incerface sieciowy ) z użyciem brigde ( który spełnia rolę wirtualnego switcha )

veth

yum install bridge-utils
vzctl set 110 --netif_add eth0 --save
vi /etc/sysconfig/network-scripts/ifcfg-en0

/etc/sysconfig/network-scripts/ifcfg-en0

# Broadcom Corporation NetXtreme BCM5722 Gigabit Ethernet PCI Express
DEVICE=en0
TYPE=Bridge
BOOTPROTO=static
IPADDR=10.80.130.24
NETMASK=255.255.255.0
NETWORK=10.80.130.0
GATEWAY=10.80.130.5
USERCTL=no
IPV6INIT=no
FREEDNS=no
ONBOOT=yes

Następnie konfigurujemy fizyczny interface eth0 tak by dołączył do bridge

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BRIDGE=en0
HWADDR=00:1E:C9:D7:C8:9B
ONBOOT=yes

Teraz powinniścmy dodać plki dla każdego interface CT ale jest to kłopotliwe przy wielu virtualach więc lepiej to zautomatyzować. polecenie modyfikujące plik /etc/vz/cznet.pl. Teraz na starcie będzie uruchamiana komenda dodająca interface sieciowy do bridge ( zakłada że domyslny bridge to vmbr0:

echo 'EXTERNAL_SCRIPT=”/usr/sbin/vznetaddbr”' > /etc/vz/vznet.conf

Na koniec restartujemy sieć:

/etc/init.d/network restart

Nadanie uprawnień do zmiany czasu dla CT:

vzctl set 101 --capability sys_time:on --save

Udostępnianie katalogów hosta dla CT

mount --bind /data/shared /vz/root/101/mnt/shared

Backup kontenerów vzdump

instalujemy perla:

yum install Perl 

Doinstalowujemy moduł :

rpm -ivh "http://pkgs.repoforge.org/perl-LockFile-Simple/perl-LockFile-Simple-0.207-1.el6.rf.noarch.rpm"

perl-lockfile-simple-0.207-1.el6.rf.noarch.rpm

oraz samego vzdump:

rpm -ivh "http://download.openvz.org/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm"

vzdump-1.2-4.noarch.rpm

Fixing VZDump.pm

When trying to backup a virtual machine, creation of the snapshot can fail. This is because of a bug in VZDump.pm. In CentOS (and other RHEL derivatives), this file is located in /usr/share/perl5/PVE/VZDump.pm.

On line 622, you will find the following:

if ($line =~ m|^\s*(\S+):(\S+):(\d+(\.\d+))M$|) {

Replace this with:

if ($line =~ m|^\s*(\S+):(\S+):(\d+([\.,]\d+))[mM]$|) {

Save and close the file. Snapshots will now work with vzdump

Firewal pod openvz

Aby mieć pełną funkcjonalność firewalla należy odblokować odpowiednie moduły jądra do użytku pod kontenerem ct.

vim /etc/sysconfig/iptables-config

Edytujemy poniższą linię do postaci :

IPTABLES_MODULES="ipt_MASQUERADE ipt_helper ipt_REDIRECT ipt_REJECT tun ipt_tos ipt_TOS ipt_LOG ip_conntrack ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat ip_nat_ftp"

następnie :

vim /etc/sysconfig/vz
IPTABLES="ipt_MASQUERADE ipt_helper ipt_REDIRECT ipt_REJECT tun ipt_tos ipt_TOS ipt_LOG ip_conntrack ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat ip_nat_ftp"