Ben de bilgisayarımda yapacağım testler için KVM ile oluşturduğum sanal sunucuları kullanıyordum, ancak:
- bir kaç sanal cunusu çalıştırmam gerekince toplamda sahip olduğum 1GB ram'in hatırı sayılır kısmını sanal sunuculara ayırıyordum
- sunucular'a kaynaklar istesemde istemesem de atanmış oluyordu,
- toplam 10GB kadar olan boş alanıma çok sunucu kuramıyordum, her sunucu için ne kadar diske ihtiyacım olacağını da bilemiyordum, sonradan diski büyütebilsem de bu çok kolay değildi
- çekirdeğim değiştiği için nvidia ve madwifi gibi sürücular için tekrar modül derlemem gerekti, hoş hani zaten bunu modüle-assistant benim adıma yapıyor ama gene de rahatsız edici bir durum
- gittiğim her yerde ağ yapılandırmam değişiyordu ve linux-vserver sunucularına dinamik ip vermek çok kolay olmuyordu
- Bir adet KVM kurup içerisine linux-vserver çekirdeği kurdum
- KVM'in ağ yapılandırmasını ayarlayarak KVM ve içerisindeki sanal sunucuları ayrı bir ağa koydum, böylece sabit ip verebildim ve nat ile nete çıkardım: http://www.linuxquestions.org/questions/linux-networking-3/kvm-qemu-and-nat-on-the-host-machine-mini-tutorial-697980/
- Tüm sanal sunucuların içinde bulunduğu disk alanına toplamda 10GB ayırdım, tümü bunu paylaşıyorlar, her yeni sunucunun disk maliyeti yalnızca 200MB ölüyor (benim imajımın sıfır boyutu bu kadar)
- Tüm sanal sunuculara ayrı ayrı ram ayırmaktansa toplamda 300MB ram ayırdım ve tümü bunu paylaşıyorlar, 10 kadar sanal cunucu ile daha pek yavaşlama olmadı.
KVM'in ağ yapılandırmasını düzenleyelim:bekir@laptop:~$ sudo aptitude install kvm
KVM içerisine kurulum için debian kurulum CD'sini indirelim:bekir@laptop:~$ for i in /etc/kvm/*; do echo ===== $i =====; cat $i; done
===== /etc/kvm/kvm-if.conf =====
#see /home/bekir/bin/testing
BRIDGE=kvmnat
NETWORK=192.168.172.0
HOST=192.168.172.1
MASK=255.255.255.0
===== /etc/kvm/kvm-ifdown =====
#!/bin/sh
#see /home/bekir/bin/testing
. /etc/kvm/kvm-if.conf
echo "$0:"
echo "Tearing down network bridge for $1"
ip link set $1 down
brctl delif "$BRIDGE" $1
ifconfig kvmnat 0.0.0.0
ip link set "$BRIDGE" down
brctl delbr "$BRIDGE"
exit 0
===== /etc/kvm/kvm-ifup =====
#!/bin/sh
#see /home/bekir/bin/testing
. /etc/kvm/kvm-if.conf
echo "$0:"
echo "Setting up the network bridge for $1"
brctl addbr "$BRIDGE"
brctl addif "$BRIDGE" "$1"
ifconfig "$BRIDGE" "$HOST" netmask "$MASK"
ip link set "$1" up
ip link set "$BRIDGE" up
if iptables -t nat -L POSTROUTING -n | grep ^MASQUERADE | awk '{print $4}' | cut -d/ -f1 | grep "$NETWORK" >/dev/null
then
echo "IP masquerading already set up"
else
echo "Setting up IP masquerading"
iptables -t nat -A POSTROUTING -s "$NETWORK"/"$MASK" -d ! "$NETWORK"/"$MASK" -j MASQUERADE
fi
echo "Setting up IP forwarding"
sysctl net.ipv4.ip_forward=1
exit 0
===== /etc/kvm/kvm-ifup-bak =====
#! /bin/sh
# Script to bring a network (tap) device for qemu-kvm up
# The idea is to add the tap device to the same bridge
# as we have default routing to.
switch=$(ip route ls | \
awk '/^default / {
for( i = 0; i < NF ; i++ ) { if ($i == "dev") { print $(i+1); exit; } }
}'
)
/sbin/ifconfig $1 0.0.0.0 up
# only add the interface to default-route bridge if we
# have such interface (with default route) and if that
# interface is actually a bridge.
if [ -n "$switch" -a -d /sys/class/net/$switch/bridge/. ]; then
/usr/sbin/brctl addif $switch $1 || :
fi
bekir@laptop:~$
Ben debian'ın sitesinden indirdim, şuradan bulabilirsiniz: http://www.debian.org/CD/
bekir@laptop:/media/free$ wget http://cdimage.debian.org/debian-cd/5.0.4/i386/iso-cd/debian-504-i386-CD-1.iso
Sanal sunucuları koyacağımız disk alanını ayıralım (ben 10GB ayırdım)
KVM icerisine ilk kurulumu yapalim linux-vserver cekirdegi koyalim:bekir@laptop:~/media/free$ dd if=/dev/zero of=kvm_vserver_kernel bs=100M count=100
Sistem CD'den açılıyor ve şu ayarları yapıyorum:bekir@laptop:~/media/free$ sudo kvm -hda kvm_vserver_kernel -cdrom debian-504-i386-CD-1.iso -m 300 -net nic,vlan=0 -net tap,vlan=0
- Tüm diski kendisi bölümlendirsin (tek parça)
- Ağ ayarları için elle yapılandırma seçip şunları kullandım:
- * address 192.168.172.2/255.255.255.0
- * gateway 192.168.172.1
- * dns-nameservers 192.168.172.1
- Sisteme neler kurayım diye sorduğunda hiç bir şey seçmedim
Ben bu komutu her seferinde hatırlamak zorunda kalmamak için su betiği yazdım:bekir@laptop:~$ sudo kvm -hda /media/free/kvm_vserver_kernel -m 300 -net nic,vlan=0 -net tap,vlan=0
Şimdi makinanın arayüzüne bağlanmak için sunu kullanabilirsiniz (Eğer bir şeyler doğru gitmezse açılan kvm'in ekranını buradan görebilirsiniz)bekir@laptop:~$ cat bin/start-kvm-host
#!/bin/bash
# /etc/kvm/ altındaki dosyaları elledim: http://www.linuxquestions.org/questions/linux-networking-3/kvm-qemu-and-nat-on-the-host-machine-mini-tutorial-697980/
#IP address: 192.168.172.12
#Netmask: 255.255.255.0
#Gateway: 192.168.172.1
#DNS: 192.168.0.1
# -cdrom /media/free/debian-504-i386-CD-1.iso
exec sudo kvm -vnc :0 -hda /media/free/kvm_vserver_kernel -m 300 -net nic,vlan=0 -net tap,vlan=0
bekir@laptop:~$
Şimdi KVM içerisine kurduğumuz debian'a yerleşmeye başlayabiliriz:bekir@laptop:~$ sudo aptitude install vncviewer
bekir@laptop:~$ vncviewer localhost
Hemen yeni makinamiza ssh ile girmeyi deneyelim:bekir@kvm:~$ sudo aptitude install linux-image-vserver-686 util-vserver ssh
bekir@kvm:~$ sudo reboot
bekir@kvm:~$ sudo vserver vserver_template build -m debootstrap --hostname vserver_template.laptop.bdgn.net --interface eth0:192.168.172.3/24 -- -d lenny -m http://ftp.de.debian.org/debian # biraz uzun sürüyor
bekir@kvm:~$ sudo vserver vserver_template start
Starting enhanced syslogd: rsyslogd.
Starting OpenBSD Secure Shell server: sshd.
bekir@kvm:~$ sudo vserver vserver_template enter
root@vserver_template:~# # artık yeni sunucu içindesinizistediğiniz paketeri kurun ve template'de olması gerektiğini düşündüğünüz yapılandırmaları yapın
root@vserver_template:~# aptitude install ssh
root@vserver_template:~# adduser bekir
root@vserver_template:~# visudo # bekir ALL=(ALL) ALL
root@vserver_template:~# # key'lerinizi koyabilir ve daha istediğiniz değişiklikleri de burada yapabilirsiniz
root@vserver_template:~# logout
bekir@kvm:~$
Artık template'imiz hazır, template makinamızı açık tutmayalım:bekir@kvm:~$ ssh 192.168.172.3
The authenticity of host '192.168.172.3 (192.168.172.3)' can't be established.
RSA key fingerprint is 3c:fd:16:d0:04:43:39:32:c5:14:5b:49:7a:cd:f9:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.172.3' (RSA) to the list of known hosts.
Last login: Wed May 19 03:51:19 2010 from 192.168.172.3
bekir@vserver_template:~# sudo aptitude install vim emacs bash-completion
bekir@vserver_template:~# sudo aptitude install locales
bekir@vserver_template:~$ sudo dpkg-reconfigure locales
bekir@vserver_template:~# # ev dizinime gereken dosyalari tasidim ve ssh key'imi de koydum
bekir@vserver_template:~# sudo update-alternatives --config editor # vim.basic
bekir@vserver_template:~$ sudo apt-get clean # çok büyük boyutlu olabilir, her makina için kopyalanacağından temizlemekte fayda var
bekir@vserver_template:~$ logout
bekir@kvm:~$
Yeni makinalar yaratmak için de alttaki gibi bir betik yazdım. Bu betik şu işleri de yapıyor:bekir@kvm:~$ sudo vserver vserver_template stop
- sıradan bir ip bulup makineye veriyor, ismiyle ulaşabilmemiz için /etc/hosts'a makina adını ekliyor
- bütün sanal makinalarının /home ve /var/cache/apt/archives dizinleri kvm makinasındaki ile ortak oluyor.
- sanal makinaların kvm makinası açılışında kendiliğinden başlamalarını sağlıyor.
Artık sanal makina yaratmak ve silmek su kadar basit:bekir@kvm:~$ cat /usr/local/bin/create_vserver
#!/bin/bash
V_NAME=$1
[ "$USER" == "root" ] || { echo "You must bee root"; exit 1; }
[ -z "$V_NAME" ] && { echo "Give a vserver name"; exit 1; }
MAX_IP=$(cat /etc/vservers/*/interfaces/0/ip | cut -d. -f4 | sort -n | tail -1 )
V_IP=192.168.172.$[MAX_IP + 1]
echo "Creating new vserver $V_NAME with ip $V_IP ..."
vserver $V_NAME build -m clone --hostname $V_NAME.laptop.bdgn.net --interface eth0:$V_IP/24 -- --source /var/lib/vservers/debian
echo -e '/home\t/home\tbind\tbind\t0\t0' >> /etc/vservers/$V_NAME/fstab
echo -e '/var/cache/apt/archives/\t/var/cache/apt/archives/\tbind\tbind\t0\t0' >> /etc/vservers/$V_NAME/fstab
echo "default" > /etc/vservers/$V_NAME/apps/init/mark
vserver $V_NAME start
vserver $V_NAME exec bash -c 'rm /etc/ssh/ssh_host_*'
vserver $V_NAME exec bash -c 'dpkg-reconfigure openssh-server'
echo $V_IP $V_NAME >> /etc/hosts
echo "Created new vserver $V_NAME with ip $V_IP"
exit 0
bekir@kvm:~$
Şimdi kendi makinamizdan sanal sunuculara da ip adresleri ile erişebiliriz:bekir@kvm:~$ sudo create_vserver test_makinasi
Creating new vserver test_makinasi with ip 192.168.172.4 ...
Starting enhanced syslogd: rsyslogd.
Starting OpenBSD Secure Shell server: sshd.
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
Created new vserver test_makinasi with ip 192.168.172.4
bekir@kvm:~$ ssh test_makinasi
The authenticity of host 'test_makinasi (192.168.172.4)' can't be established.
RSA key fingerprint is 1a:50:a9:51:8e:5b:c3:a9:96:d6:85:51:8c:00:ea:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test_makinasi,192.168.172.4' (RSA) to the list of known hosts.
Last login: Tue May 18 01:05:32 2010 from 192.168.172.1
bekir@test_makinasi:~$ logout
bekir@kvm:~$ sudo vserver-stat
CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME
40006 21 214.3M 93.9M 3m32s63 2m22s18 17h40m26 veli
40008 6 43.5M 8M 0m02s10 0m00s64 17h40m26 pyldap
40009 3 23.5M 2.2M 0m02s52 0m01s25 28m22s75 test_makinasi
bekir@kvm:~$ sudo vserver test_makinasi delete
Are you sure you want to delete the vserver test_makinasi (y/N) y
Stopping enhanced syslogd: rsyslogd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
bekir@kvm:~$
SSH ile sanal sunuculara laptoptan erişebilmek için de laptop'umda şu ayarı yaptım:bekir@laptop:~$ ssh 192.168.172.4
The authenticity of host '192.168.172.4 (192.168.172.4)' can't be established.
RSA key fingerprint is 1a:50:a9:51:8e:5b:c3:a9:96:d6:85:51:8c:00:ea:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.172.4' (RSA) to the list of known hosts.
Last login: Wed May 19 21:23:00 2010 from 192.168.172.4
bekir@test_makinasi:~$
bekir@hede:~$ sudo sh -c 'echo 192.168.172.2 kvm >> /etc/hosts'
bekir@hede:~$ cat >>~/.ssh/config
> Host t-*
> ProxyCommand ssh $DEBUG -t kvm nc -w 1 -q 1 $(echo %h|sed 's/^t-//') %p
bekir@hede:~$ ssh kvm
bekir@kvm:~$ logout
bekir@hede:~$ ssh t-test_makinasi
The authenticity of host 't-test_makinasi ( < no hostip for proxy command>)' can't be established.
RSA key fingerprint is 86:a2:55:22:20:5c:57:43:e2:b5:dc:9a:2c:0d:87:90.
Are you sure you wat to continue connecting (yes/no)? yes
Warning: Permanently added 't-test_makinasi' (RSA) to the list of known hosts.
Last login: Wed May 19 21:36:21 2010 from 192.168.172.4
bekir@test_makinasi:~$ logout
bekir@hede:~$
Kernel derlemeye gerek yoktu. 2.6.29'dan itibaren lxc (linux containers) geliyor kernel'da. Sanırım vserver deprecated oldu. Ayrıca lxc çok daha üstün özellikler de sunuyor: http://sozluk.sourtimes.org/show.asp?t=linux+containers ayrıca: http://www.ibm.com/developerworks/linux/library/l-lxc-containers/
ReplyDelete