blob: 6240c35d5e4ab841ce6da94a675454509a1f055f [file] [log] [blame]
Welcome to Apache Tashi!
This text will show you how to get set up quickly, and then will touch
on how to configure additional functionality.
The audience for this document is someone with skills in the following areas:
* Creating disk images for mass installation
* Networking, bridging and bonding
You must be able to properly create and maintain disk images that newly
created virtual machines can boot from. This includes handling
installations of hardware drivers necessary to run in the virtualized
environment provided by Tashi.
You must be able to properly handle connections to an existing network.
If you do not operate the network the virtual machines are to be
connected to, you must make arrangements with your network
administrators for permission to connect to their network, IP address
blocks, name service, DHCP and any other services necessary. The
instructions here reflect an environment commonly available within a
home network, i.e. a home router providing access to name service, NAT
to access the internet and a DHCP service that will hand out private
addresses without the need for prior reservations.
The hardware demands for an installation of Tashi are extremely modest,
but a Tashi cluster can grow to a large size. This installation document
will first demonstrate a Tashi setup in a virtual machine on a 2007 era
Macbook Pro.
If you already have an existing set of physical machines, you can choose
one now to host the cluster manager and the scheduler. You can follow
the instructions on how to install Tashi on a single machine, then
continue on with suggestions on how to deploy additional nodes.
---+ Installation on a single host
An installation on a single host will run the cluster manager, the
primitive scheduler agent and a node manager. Install Linux on this
machine, add the KVM virtualization packages and prepare the networking
on the host to connect virtual machines.
---++ Sample fulfillment of prerequisites
For example, once you have logged into the machine as root, do the
following to create the bridge your newly created virtual machines will
connect to. You should be connected via console because you may lose
your network connection if you aren't very careful here. Refer to your
distribution's instructions on how to make this configuration permanent.
# BEGIN SAMPLE PREPARATION
# create a network bridge for the default network
brctl addbr br0
# set the bridge's hello and forward delay to 1 second
brctl setfd br0 1
brctl sethello br0 1
# disconnect eth0 from the network, attach it to the bridge and
# obtain an address for the bridge
ifdown eth0;ifconfig eth0 0.0.0.0;brctl addif br0 eth0;dhclient br0
# create a script /etc/qemu-ifup.0 which will allow virtual machines
# to be attached to the default network (0).
cat /etc/qemu-ifup.0
#!/bin/sh
/sbin/ifconfig $1 0.0.0.0 up
/sbin/brctl addif br0 $1
exit 0
# Ensure the script has execute permissions
chmod 700 /etc/qemu-ifup.0
# END SAMPLE PREPARATION
If you don't have RPyC version 3.1 installed, download a copy from
http://sourceforge.net/projects/rpyc/files/main/ and install it.
Prepare a virtual machine image in qcow2 format for Tashi to deploy. You
can create this with practically any consumer or professional
virtualization system, by converting the resulting disk image via
qemu-img. Note that operating systems from Redmond only tend to install
a minimal amount of hardware drivers, and deployment could fail because
the necessary drivers aren't on the disk image. Search online for a
virtual driver diskette providing virtio drivers for qemu, or other
drivers for the virtualization layer you select. Linux and BSD VMs
should be fine. For this installation, the default Tashi configuration
will look for images in /tmp/images
---++ Installation of Tashi code
If you are reading this, you will already have obtained a distribution
of the code. Go to the top level directory of Tashi and create a
destination directory for the code base:
ls
DISCLAIMER doc/ etc/ LICENSE Makefile NOTICE README src/
mkdir /usr/local/tashi
Move the Tashi code to the directory you created
mv * /usr/local/tashi
Create Tashi executables in /usr/local/tashi/bin
cd /usr/local/tashi
root@grml:/usr/local/tashi# make
Symlinking in clustermanager...
Symlinking in nodemanager...
Symlinking in tashi-client...
Symlinking in primitive...
Symlinking in zoni-cli...
Symlinking in Accounting server...
Done
If /usr/local/tashi/src is not included in the system's default path for
searching for python modules, ensure the environment variable PYTHONPATH
is set before using any Tashi executables.
export PYTHONPATH=/usr/local/tashi/src
Start the cluster manager and populate the hosts and networks databases.
When defining the host, you must provide the name the host has been
given by the hostname command. If you plan on eventually having several
hosts and networks, feel free to add them now.
root@grml:/usr/local/tashi/bin# DEBUG=1 ./clustermanager
2012-01-26 23:12:33,972 [./clustermanager:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg']
2012-01-26 23:12:33,972 [./clustermanager:INFO] Starting cluster manager
**********************************************************************
Welcome to IPython. I will try to create a personal configuration directory
where you can customize many aspects of IPython's functionality in:
/root/.ipython
Initializing from configuration: /usr/lib/python2.6/dist-packages/IPython/UserConfig
Successful installation!
Please read the sections 'Initial Configuration' and 'Quick Tips' in the
IPython manual (there are both HTML and PDF versions supplied with the
distribution) to make sure that your system environment is properly configured
to take advantage of IPython's features.
Important note: the configuration system has changed! The old system is
still in place, but its setting may be partly overridden by the settings in
"~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
if some of the new settings bother you.
Please press <RETURN> to start IPython.
**********************************************************************
In [1]: from tashi.rpycservices.rpyctypes import Host, HostState, Network
In [2]: data.baseDataObject.hosts[1] = Host(d={'id':1,'name':'grml','state': HostState.Normal,'up':False})
In [3]: data.baseDataObject.networks[1]=Network(d={'id':0,'name':'default'})
In [4]: data.baseDataObject.save()
In [5]: import os
In [6]: os.kill(os.getpid(), 9)
Run the cluster manager in the background:
root@grml:/usr/local/tashi/bin# ./clustermanager &
[1] 4289
root@grml:/usr/local/tashi/bin# 2012-01-25 07:53:43,177 [./clustermanager:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg']
2012-01-25 07:53:43,177 [./clustermanager:INFO] Starting cluster manager
Run the node manager in the background. Note that the hostname must be
registered with the cluster manager, as shown above.
root@grml:/usr/local/tashi/bin# ./nodemanager &
[2] 4293
root@grml:/usr/local/tashi/bin# 2012-01-25 07:53:59,348 [__main__:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg', '/usr/local/tashi/etc/NodeManager.cfg']
2012-01-25 07:53:59,392 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.py:INFO] No VM information found in /var/tmp/VmControlQemu/
2012-01-25 07:53:59,404 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.py:INFO] Waiting for NM initialization
Verify that the node is shown as being "Up".
root@grml:/usr/local/tashi/bin# ./tashi-client gethosts
id reserved name decayed up state version memory cores notes
----------------------------------------------------------------
1 [] grml True True Normal HEAD 233 1 None
Start the primitive scheduling agent:
root@grml:/usr/local/tashi/bin# ./primitive &
[3] 4312
Verify that the cluster manager has full communication with the host.
When this has happened, decayed is False.
root@grml:/usr/local/tashi/bin# tashi-client gethosts
id reserved name decayed up state version memory cores notes
----------------------------------------------------------------
1 [] grml False True Normal HEAD 233 1 None
Check the presence of a disk image:
root@grml:/usr/local/tashi/bin# ls /tmp/images/
debian-wheezy-amd64.qcow2
root@grml:/usr/local/tashi/bin# ./tashi-client getimages
id imageName imageSize
---------------------------------------
0 debian-wheezy-amd64.qcow2 1.74G
Create a VM with 1 core and 128 MB of memory using our disk image in
non-persistent mode:
root@grml:/usr/local/tashi/bin# ./tashi-client createVm --cores 1
--memory 128 --name wheezy --disks debian-wheezy-amd64.qcow2
id hostId name user state disk memory cores
---------------------------------------------------------------------
1 None wheezy root Pending debian-wheezy-amd64.qcow2 128 1
2012-02-02 22:09:58,392 [./primitive:INFO] Scheduling instance wheezy (128 mem, 1 cores, 0 uid) on host grml
2012-02-02 22:09:58,398 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Executing command: /usr/bin/kvm -clock dynticks -drive file=/tmp/images/debian-wheezy-amd64.qcow2,if=ide,index=0,cache=off,snapshot=on -net nic,macaddr=52:54:00:90:2a:9d,model=virtio,vlan=0 -net tap,ifname=tashi1.0,vlan=0,script=/etc/qemu-ifup.0 -m 128 -smp 1 -serial null -vnc none -monitor pty
2012-02-02 22:09:58,412 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Adding vmId 5472
Verify the machine is running:
root@grml:/usr/local/tashi/bin# ./tashi-client getinstances
id hostId name user state disk memory cores
---------------------------------------------------------------------
1 1 wheezy root Running debian-wheezy-amd64.qcow2 128 1
After the machine had a chance to boot, find out what address it got. If
you have a DHCP server on your network, search the pool of addresses:
root@grml:/usr/local/tashi/bin# ifconfig br0
br0 Link encap:Ethernet HWaddr 00:0c:29:62:b3:76
inet addr:192.168.244.131 Bcast:192.168.244.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe62:b376/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2622 errors:0 dropped:0 overruns:0 frame:0
TX packets:1598 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:730925 (713.7 KiB) TX bytes:226530 (221.2 KiB)
Find the MAC address given to the VM
root@grml:/usr/local/tashi/bin# ./tashi-client getmyinstances
--show-nics --hide-disk
id hostId name user state memory cores nics
----------------------------------------------------------------------------------------------------
1 1 wheezy root Running 128 1 [{'ip': None, 'mac': '52:54:00:90:2a:9d', 'network': 0}]
Look for that MAC address on the local network
root@grml:/usr/local/tashi/bin# arp-scan -I br0 192.168.244.0/24|grep 90:2a:9d
Interface: br0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.244.136 52:54:00:90:2a:9d QEMU
Log into the VM:
root@grml:/usr/local/tashi/bin# ssh root@192.168.244.136
The authenticity of host '192.168.244.136 (192.168.244.136)' can't be established.
RSA key fingerprint is af:f2:1a:3a:2b:7c:c3:3b:6a:04:4f:37:bb:75:16:58.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.244.136' (RSA) to the list of known hosts.
root@192.168.244.136's password:
Linux debian 3.1.0-1-amd64 #1 SMP Tue Jan 10 05:01:58 UTC 2012 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jan 19 15:06:22 2012 from login.cirrus.pdl.cmu.local
debian:~#
debian:~# uname -a
Linux debian 3.1.0-1-amd64 #1 SMP Tue Jan 10 05:01:58 UTC 2012 x86_64 GNU/Linux
debian:~# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 2
model name : QEMU Virtual CPU version 0.14.0
stepping : 3
cpu MHz : 2193.593
cache size : 512 KB
fpu : yes
fpu_exception : yes
cpuid level : 4
wp : yes
flags : fpu pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up nopl pni cx16 popcnt hypervisor lahf_lm svm abm sse4a
bogomips : 4387.18
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
debian:~# perl -e 'print "My new VM!\n";'
My new VM!
debian:~# halt
Broadcast message from root@debian (pts/0) (Wed Jan 25 02:01:43 2012):
The system is going down for system halt NOW!
debian:~# Connection to 192.168.244.136 closed by remote host.
Connection to 192.168.244.136 closed.
2012-02-02 22:18:35,662 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Removing vmId 5472 because it is no longer running
2012-02-02 22:18:35,662 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Removing any scratch for wheezy
2012-02-02 22:18:36,461 [./primitive:INFO] VM exited: wheezy
Verify the VM is no longer running:
root@grml:/usr/local/tashi/bin# ./tashi-client getinstances
id hostId name user state disk memory cores
--------------------------------------------
You have now completed the simplest form of a Tashi install: a single
machine providing hosting, scheduling and management services. For
additional information on what you can do, please view the documentation
in the doc/ directory.