root / README.deploy @ 709a6319
History | View | Annotate | Download (19.2 kB)
1 | 1c382247 | Vangelis Koukis | README.deploy -- Instructions for a basic Synnefo deployment |
---|---|---|---|
2 | bbd4f788 | Georgios Gousios | |
3 | 03353341 | Vangelis Koukis | This document describes the basic steps to obtain a basic, working Synnefo |
4 | 03353341 | Vangelis Koukis | deployment. It begins by examining the different node roles, then moves to the |
5 | 03353341 | Vangelis Koukis | installation and setup of distinct software components. |
6 | c807557e | Vangelis Koukis | |
7 | 1c382247 | Vangelis Koukis | It is current as of Synnefo v0.5.2. |
8 | 03353341 | Vangelis Koukis | |
9 | 03353341 | Vangelis Koukis | |
10 | 03353341 | Vangelis Koukis | Node types |
11 | 03353341 | Vangelis Koukis | =========== |
12 | 03353341 | Vangelis Koukis | |
13 | 03353341 | Vangelis Koukis | Nodes in a Synnefo deployment belong in one of the following types: |
14 | 03353341 | Vangelis Koukis | |
15 | 03353341 | Vangelis Koukis | * DB: |
16 | 271baf11 | Nikos Skalkotos | A node [or more than one nodes, if using an HA configuration], running a DB |
17 | 271baf11 | Nikos Skalkotos | engine supported by the Django ORM layer. The DB is the single source of |
18 | 271baf11 | Nikos Skalkotos | truth for the servicing of API requests by Synnefo. |
19 | 03353341 | Vangelis Koukis | Services: PostgreSQL / MySQL |
20 | 03353341 | Vangelis Koukis | |
21 | 03353341 | Vangelis Koukis | * APISERVER: |
22 | 271baf11 | Nikos Skalkotos | A node running the implementation of the OpenStack API, in Django. Any number |
23 | 271baf11 | Nikos Skalkotos | of APISERVERs can be used, in a load-balancing configuration, without any |
24 | 271baf11 | Nikos Skalkotos | special consideration. Access to a common DB ensures consistency. |
25 | 03353341 | Vangelis Koukis | Services: Web server, vncauthproxy |
26 | 03353341 | Vangelis Koukis | |
27 | 03353341 | Vangelis Koukis | * QUEUE: |
28 | 271baf11 | Nikos Skalkotos | A node running the RabbitMQ software, which provides AMQP functionality. More |
29 | 271baf11 | Nikos Skalkotos | than one QUEUE nodes may be deployed, in an HA configuration. Such |
30 | 03353341 | Vangelis Koukis | deployments require shared storage, provided e.g., by DRBD. |
31 | 03353341 | Vangelis Koukis | Services: RabbitMQ [rabbitmq-server] |
32 | 03353341 | Vangelis Koukis | |
33 | 03353341 | Vangelis Koukis | * LOGIC: |
34 | 03353341 | Vangelis Koukis | A node running the business logic of Synnefo, in Django. It dequeues |
35 | 271baf11 | Nikos Skalkotos | messages from QUEUE nodes, and provides the context in which business logic |
36 | 271baf11 | Nikos Skalkotos | functions run. It uses Django ORM to connect to the common DB and update the |
37 | 271baf11 | Nikos Skalkotos | state of the system, based on notifications received from the rest of the |
38 | 271baf11 | Nikos Skalkotos | infrastructure, over AMQP. |
39 | 03353341 | Vangelis Koukis | Services: the Synnefo logic dispatcher [/logic/dispatcher.py] |
40 | 03353341 | Vangelis Koukis | |
41 | 03353341 | Vangelis Koukis | * GANETI-MASTER and GANETI-NODE: |
42 | 03353341 | Vangelis Koukis | A single GANETI-MASTER and a large number of GANETI-NODEs constitute the |
43 | 03353341 | Vangelis Koukis | Ganeti backend for Synnefo, which undertakes all VM management functions. |
44 | 03353341 | Vangelis Koukis | Any APISERVER can issue commands to the GANETI-MASTER, over RAPI, to effect |
45 | 03353341 | Vangelis Koukis | changes in the state of the VMs. The GANETI-MASTER runs the Ganeti request |
46 | 03353341 | Vangelis Koukis | queue. |
47 | 03353341 | Vangelis Koukis | Services: |
48 | 271baf11 | Nikos Skalkotos | only on GANETI-MASTER: |
49 | 3d9ae008 | Vangelis Koukis | the Synnefo Ganeti monitoring daemon [/ganeti/snf-ganeti-eventd] |
50 | 271baf11 | Nikos Skalkotos | the Synnefo Ganeti hook [/ganeti/snf-ganeti-hook.py]. |
51 | 271baf11 | Nikos Skalkotos | on each GANETI_NODE: |
52 | 271baf11 | Nikos Skalkotos | a deployment-specific KVM ifup script |
53 | 271baf11 | Nikos Skalkotos | properly configured NFDHCPD |
54 | 03353341 | Vangelis Koukis | |
55 | 03353341 | Vangelis Koukis | |
56 | 03353341 | Vangelis Koukis | Installation Process |
57 | 03353341 | Vangelis Koukis | ===================== |
58 | 03353341 | Vangelis Koukis | |
59 | 271baf11 | Nikos Skalkotos | This section describes the installation process of the various node roles in a |
60 | 271baf11 | Nikos Skalkotos | Synnefo deployment. |
61 | 03353341 | Vangelis Koukis | |
62 | 03353341 | Vangelis Koukis | |
63 | 03353341 | Vangelis Koukis | 0. Allocation of physical nodes: |
64 | 03353341 | Vangelis Koukis | Determine the role of every physical node in your deployment. |
65 | 03353341 | Vangelis Koukis | |
66 | 03353341 | Vangelis Koukis | |
67 | 03353341 | Vangelis Koukis | 1. Ganeti installation: |
68 | 03353341 | Vangelis Koukis | Synnefo requires a working Ganeti installation at the backend. Installation |
69 | 03353341 | Vangelis Koukis | of Ganeti is not covered by this document, please refer to |
70 | 03353341 | Vangelis Koukis | http://docs.ganeti.org/ganeti/current/html for all the gory details. A |
71 | 03353341 | Vangelis Koukis | successful Ganeti installation concludes with a working GANETI-MASTER and a |
72 | 03353341 | Vangelis Koukis | number of GANETI-NODEs. |
73 | 03353341 | Vangelis Koukis | |
74 | 03353341 | Vangelis Koukis | |
75 | 03353341 | Vangelis Koukis | 2. RabbitMQ installation: |
76 | 271baf11 | Nikos Skalkotos | RabbitMQ is used as a generic message broker for the system. It should be |
77 | 271baf11 | Nikos Skalkotos | installed on two seperate QUEUE nodes (VMs should be enough for the moment) |
78 | 271baf11 | Nikos Skalkotos | in a high availability configuration as described here: |
79 | 03353341 | Vangelis Koukis | |
80 | 03353341 | Vangelis Koukis | http://www.rabbitmq.com/pacemaker.html |
81 | 03353341 | Vangelis Koukis | |
82 | 03353341 | Vangelis Koukis | After installation, create a user and set its permissions |
83 | 03353341 | Vangelis Koukis | rabbitmqctl add_user okeanos 0k3@n0s |
84 | 03353341 | Vangelis Koukis | rabbitmqctl set_permissions -p / okeanos "^.*" ".*" ".*" |
85 | 03353341 | Vangelis Koukis | |
86 | 03353341 | Vangelis Koukis | The values set for the user and password must be mirrored in the |
87 | 03353341 | Vangelis Koukis | RABBIT_* variables in settings.py (see step 6) |
88 | 03353341 | Vangelis Koukis | |
89 | 03353341 | Vangelis Koukis | |
90 | 03353341 | Vangelis Koukis | 3. Web server installation: |
91 | 03353341 | Vangelis Koukis | A Web Server (e.g., Apache) needs to be installed on the APISERVERs, |
92 | 271baf11 | Nikos Skalkotos | and be configured to run the Synnefo Django project appropriately. Selection |
93 | 271baf11 | Nikos Skalkotos | and configuration of a Web server is outside the scope of this document. |
94 | 03353341 | Vangelis Koukis | |
95 | 03353341 | Vangelis Koukis | For testing or development purposes, Django's own development server, |
96 | 271baf11 | Nikos Skalkotos | `./manage.py runserver' can be used. |
97 | 03353341 | Vangelis Koukis | |
98 | 03353341 | Vangelis Koukis | |
99 | 03353341 | Vangelis Koukis | 4. Installation of the Synnefo Django project: |
100 | 3d9ae008 | Vangelis Koukis | As of v0.5 the Synnefo Django project needs to be installed on nodes |
101 | 02728a9a | Vangelis Koukis | of type APISERVER, and LOGIC, with a properly configured settings.py. In |
102 | 02728a9a | Vangelis Koukis | later revisions, the specific parts of the Django project which need to run |
103 | 02728a9a | Vangelis Koukis | on each node type will be identified. |
104 | 03353341 | Vangelis Koukis | |
105 | 271baf11 | Nikos Skalkotos | Synnefo is written in Python 2.6 and depends on the following Python modules: |
106 | 271baf11 | Nikos Skalkotos | [package versions confirmed to be compatible are in braces] |
107 | c807557e | Vangelis Koukis | |
108 | c807557e | Vangelis Koukis | * django 1.2 [Django==1.2.4] |
109 | c807557e | Vangelis Koukis | * simplejson [simplejson==2.1.3] |
110 | c807557e | Vangelis Koukis | * pycurl [pycurl==7.19.0] |
111 | c807557e | Vangelis Koukis | * python-dateutil [python-dateutil==1.4.1] |
112 | 36cf1973 | Vangelis Koukis | WARNING: version python-dateutil==2.0 downloaded by pip known *not* to |
113 | 36cf1973 | Vangelis Koukis | work with Python 2.6 |
114 | 92ab6b1c | Vangelis Koukis | * python-ipy [IPy==0.75] |
115 | 92ab6b1c | Vangelis Koukis | also verified to work with python-ipy 0.70-1 as shipped with Squeeze |
116 | c807557e | Vangelis Koukis | * south [south==0.7.1] |
117 | b8498a99 | Vangelis Koukis | WARNING: might not work with Debian Squeeze's default south-0.7-1 package. |
118 | c807557e | Vangelis Koukis | * amqplib [amqplib==0.6.1] |
119 | 4ed2e471 | Georgios Gousios | * lockfile [lockfile==0.8] |
120 | 4ed2e471 | Georgios Gousios | * python-daemon [python-daemon==1.5.5] |
121 | b8498a99 | Vangelis Koukis | * python-prctl [python-prctl==1.3.0] |
122 | 03353341 | Vangelis Koukis | |
123 | 03353341 | Vangelis Koukis | also, depending on the database engine of choice, on one of the following: |
124 | c807557e | Vangelis Koukis | * MySQL-python [MySQL-python==1.2.3] |
125 | c807557e | Vangelis Koukis | * psycopg2 [psycopg2==2.4] |
126 | 03353341 | Vangelis Koukis | |
127 | 271baf11 | Nikos Skalkotos | if the invitations application is deployed, the following dependencies should |
128 | 271baf11 | Nikos Skalkotos | be installed: |
129 | c807557e | Vangelis Koukis | * pycrypto==2.1.0 |
130 | 03353341 | Vangelis Koukis | |
131 | 45e3d1ac | Vangelis Koukis | To run the user interface tests, selenium must be installed |
132 | c807557e | Vangelis Koukis | * selenium [?] |
133 | c807557e | Vangelis Koukis | |
134 | 03353341 | Vangelis Koukis | The easiest method for installation of the Django project is to setup a |
135 | 03353341 | Vangelis Koukis | working environment through virtualenv. Alternatively, you can use your |
136 | 03353341 | Vangelis Koukis | system's package manager to install the dependencies (e.g. Macports has them |
137 | 03353341 | Vangelis Koukis | all). |
138 | a06deab3 | Vangelis Koukis | |
139 | 36cf1973 | Vangelis Koukis | * On Snow Leopard and linux (64-bit), you have to set the following |
140 | 36cf1973 | Vangelis Koukis | environment variable for pip to compile the dependencies correctly. |
141 | a06deab3 | Vangelis Koukis | |
142 | 03353341 | Vangelis Koukis | $ export ARCHFLAGS="-arch x86_64" |
143 | a06deab3 | Vangelis Koukis | |
144 | 03353341 | Vangelis Koukis | * On Ubuntu, a few more packages must be installed before installing the |
145 | 03353341 | Vangelis Koukis | prerequisite Python libraries |
146 | a06deab3 | Vangelis Koukis | |
147 | 03353341 | Vangelis Koukis | $ sudo aptitude install libcurl3-gnutls libcurl3-gnutls-dev uuid-dev |
148 | a06deab3 | Vangelis Koukis | |
149 | 271baf11 | Nikos Skalkotos | Checkout the code and install the Python prerequisites. This assumes that |
150 | 271baf11 | Nikos Skalkotos | python is already installed on the host. |
151 | a06deab3 | Vangelis Koukis | |
152 | 03353341 | Vangelis Koukis | $ sudo easy_install virtualenv |
153 | 03353341 | Vangelis Koukis | $ git clone https://user@code.grnet.gr/git/synnefo synnefo |
154 | 03353341 | Vangelis Koukis | $ virtualenv --python=python2.6 synnefo --no-site-packages |
155 | 03353341 | Vangelis Koukis | ... |
156 | 03353341 | Vangelis Koukis | $ cd synnefo |
157 | 03353341 | Vangelis Koukis | $ ./bin/pip install <list_of_dependencies> |
158 | fc2afa67 | Vangelis Koukis | |
159 | 33f3103d | Georgios Gousios | [WARNING]: The software must be checked out in a directory named synnefo, |
160 | 33f3103d | Georgios Gousios | otherwise python imports will not work. Therefore, do not change the |
161 | 33f3103d | Georgios Gousios | or rename the checkout path. |
162 | a06deab3 | Vangelis Koukis | |
163 | 937ac8bf | Vangelis Koukis | |
164 | 03353341 | Vangelis Koukis | 5. Database installation: |
165 | 03353341 | Vangelis Koukis | A database supported by the Django ORM layer must be installed on nodes |
166 | 03353341 | Vangelis Koukis | of type DB. The choices are: SQLIte, MySQL, PostgreSQL. |
167 | a06deab3 | Vangelis Koukis | |
168 | 03353341 | Vangelis Koukis | * SQLite: |
169 | 36cf1973 | Vangelis Koukis | The python sqlite driver is available by default with Python so no |
170 | 36cf1973 | Vangelis Koukis | additional configuration is required. Also, most self-respecting systems |
171 | 36cf1973 | Vangelis Koukis | have the sqlite library installed by default. |
172 | 03353341 | Vangelis Koukis | |
173 | 271baf11 | Nikos Skalkotos | * MySQL: |
174 | 03353341 | Vangelis Koukis | MySQL must be installed first: |
175 | 03353341 | Vangelis Koukis | |
176 | 03353341 | Vangelis Koukis | * Ubuntu - Debian |
177 | 03353341 | Vangelis Koukis | $ sudo apt-get install libmysqlclient-dev |
178 | 03353341 | Vangelis Koukis | |
179 | 03353341 | Vangelis Koukis | * MacPorts |
180 | 03353341 | Vangelis Koukis | $ sudo port install mysql5 |
181 | 03353341 | Vangelis Koukis | |
182 | 03353341 | Vangelis Koukis | Install the MySQL python library on servers running the Django project: |
183 | a06deab3 | Vangelis Koukis | |
184 | 03353341 | Vangelis Koukis | $ bin/pip install MySQL-python |
185 | a06deab3 | Vangelis Koukis | |
186 | 36cf1973 | Vangelis Koukis | Note: On MacOSX with Mysql install from MacPorts the above command will |
187 | 271baf11 | Nikos Skalkotos | fail complaining that it cannot find the mysql_config command. Do |
188 | 271baf11 | Nikos Skalkotos | the following and restart the installation |
189 | 271baf11 | Nikos Skalkotos | $ echo "mysql_config = /opt/local/bin/mysql_config5" >> \ |
190 | 271baf11 | Nikos Skalkotos | ./build/MySQL-python/site.cfg |
191 | 7e8b41e7 | Vangelis Koukis | |
192 | 03353341 | Vangelis Koukis | Configure a MySQL db/account for synnefo |
193 | 03353341 | Vangelis Koukis | $ mysql -u root -p |
194 | a06deab3 | Vangelis Koukis | |
195 | 03353341 | Vangelis Koukis | mysql> create database synnefo; |
196 | 03353341 | Vangelis Koukis | mysql> show databases; |
197 | 03353341 | Vangelis Koukis | mysql> GRANT ALL on synnefo.* TO username IDENTIFIED BY 'password'; |
198 | fc2afa67 | Vangelis Koukis | |
199 | e71be688 | Vangelis Koukis | IMPORTANT: |
200 | e71be688 | Vangelis Koukis | MySQL *must* be set in READ-COMMITED mode, e.g. by setting |
201 | e71be688 | Vangelis Koukis | |
202 | e71be688 | Vangelis Koukis | transaction-isolation = READ-COMMITTED |
203 | e71be688 | Vangelis Koukis | |
204 | 96b635d9 | Vangelis Koukis | in the [mysqld] section of /etc/mysql/my.cnf. |
205 | e71be688 | Vangelis Koukis | |
206 | 96b635d9 | Vangelis Koukis | Alternatively, make sure the following code fragment stays enabled |
207 | 96b635d9 | Vangelis Koukis | in settings.d/10-database.conf: |
208 | 96b635d9 | Vangelis Koukis | |
209 | 96b635d9 | Vangelis Koukis | if DATABASES['default']['ENGINE'].endswith('mysql'): |
210 | 96b635d9 | Vangelis Koukis | DATABASES['default']['OPTIONS'] = { |
211 | 96b635d9 | Vangelis Koukis | 'init_command': 'SET storage_engine=INNODB; ' + |
212 | 96b635d9 | Vangelis Koukis | 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', |
213 | 96b635d9 | Vangelis Koukis | } |
214 | 96b635d9 | Vangelis Koukis | |
215 | 03353341 | Vangelis Koukis | * PostgreSQL |
216 | 03353341 | Vangelis Koukis | You need to install the PostgreSQL binaries: |
217 | 03353341 | Vangelis Koukis | * Ubuntu - Debian |
218 | 03353341 | Vangelis Koukis | $ sudo apt-get install postgresql-8.4 libpq-dev |
219 | fc2afa67 | Vangelis Koukis | |
220 | 03353341 | Vangelis Koukis | * MacPorts |
221 | 03353341 | Vangelis Koukis | $ sudo port install postgresql84 |
222 | 6ec8927b | Vangelis Koukis | |
223 | 03353341 | Vangelis Koukis | Install the postgres Python library |
224 | 03353341 | Vangelis Koukis | $ bin/pip install psycopg2 |
225 | 6f339260 | Georgios Gousios | |
226 | 03353341 | Vangelis Koukis | Configure a postgres db/account for synnefo: |
227 | 6f339260 | Georgios Gousios | |
228 | 03353341 | Vangelis Koukis | Become the postgres user, connect to PostgreSQL: |
229 | 03353341 | Vangelis Koukis | $ sudo su - postgres |
230 | 03353341 | Vangelis Koukis | $ psql |
231 | 03353341 | Vangelis Koukis | |
232 | 03353341 | Vangelis Koukis | Run the following commands: |
233 | 03353341 | Vangelis Koukis | DROP DATABASE synnefo; |
234 | 03353341 | Vangelis Koukis | DROP USER username; |
235 | 03353341 | Vangelis Koukis | CREATE USER username WITH PASSWORD 'password'; |
236 | 03353341 | Vangelis Koukis | CREATE DATABASE synnefo; |
237 | 03353341 | Vangelis Koukis | GRANT ALL PRIVILEGES ON DATABASE synnefo TO username; |
238 | 03353341 | Vangelis Koukis | ALTER DATABASE synnefo OWNER TO username; |
239 | 03353341 | Vangelis Koukis | ALTER USER username CREATEDB; |
240 | 6f339260 | Georgios Gousios | |
241 | 36cf1973 | Vangelis Koukis | The last line enables the newly created user to create own databases. This |
242 | 36cf1973 | Vangelis Koukis | is needed for Django to create and drop the test_synnefo database for unit |
243 | 03353341 | Vangelis Koukis | testing. |
244 | 6f339260 | Georgios Gousios | |
245 | 6f339260 | Georgios Gousios | |
246 | 03353341 | Vangelis Koukis | 6. Setting up the Django project: |
247 | 03353341 | Vangelis Koukis | The settings.py file for Django may be derived by concatenating the |
248 | 03353341 | Vangelis Koukis | settings.py.dist file contained in the Synnefo distribution with a file |
249 | 03353341 | Vangelis Koukis | containing custom modifications, which shall override all settings deviating |
250 | 03353341 | Vangelis Koukis | from the supplied settings.py.dist. This is recommended to minimize the load |
251 | 03353341 | Vangelis Koukis | of reconstructing settings.py from scratch, since each release currently |
252 | 03353341 | Vangelis Koukis | brings heavy changes to settings.py.dist. |
253 | 7e8b41e7 | Vangelis Koukis | |
254 | 36cf1973 | Vangelis Koukis | Add the following to your custom settings.py, depending on your choice |
255 | 36cf1973 | Vangelis Koukis | of DB: |
256 | 03353341 | Vangelis Koukis | * SQLite |
257 | 7e8b41e7 | Vangelis Koukis | |
258 | 03353341 | Vangelis Koukis | PROJECT_PATH = os.path.dirname(os.path.abspath(__file__)) + '/' |
259 | 7e8b41e7 | Vangelis Koukis | |
260 | 03353341 | Vangelis Koukis | DATABASES = { |
261 | 03353341 | Vangelis Koukis | 'default': { |
262 | 03353341 | Vangelis Koukis | 'ENGINE': 'django.db.backends.sqlite3', |
263 | 36cf1973 | Vangelis Koukis | 'NAME': PROJECT_PATH + 'synnefo.db' # WARN: This must be an absolute path |
264 | 03353341 | Vangelis Koukis | } |
265 | 03353341 | Vangelis Koukis | } |
266 | 7e8b41e7 | Vangelis Koukis | |
267 | 03353341 | Vangelis Koukis | * MySQL |
268 | 7e8b41e7 | Vangelis Koukis | |
269 | 03353341 | Vangelis Koukis | DATABASES = { |
270 | 03353341 | Vangelis Koukis | 'default': { |
271 | 03353341 | Vangelis Koukis | 'ENGINE': 'django.db.backends.mysql', |
272 | 03353341 | Vangelis Koukis | 'NAME': 'synnefo', |
273 | 03353341 | Vangelis Koukis | 'USER': 'USERNAME', |
274 | 03353341 | Vangelis Koukis | 'PASSWORD': 'PASSWORD', |
275 | 03353341 | Vangelis Koukis | 'HOST': 'HOST', |
276 | 03353341 | Vangelis Koukis | 'PORT': 'PORT', |
277 | 03353341 | Vangelis Koukis | 'OPTIONS': { |
278 | 03353341 | Vangelis Koukis | 'init_command': 'SET storage_engine=INNODB', |
279 | 03353341 | Vangelis Koukis | } |
280 | 03353341 | Vangelis Koukis | } |
281 | 03353341 | Vangelis Koukis | } |
282 | 7e8b41e7 | Vangelis Koukis | |
283 | 03353341 | Vangelis Koukis | * PostgreSQL |
284 | 6f339260 | Georgios Gousios | |
285 | 03353341 | Vangelis Koukis | DATABASES = { |
286 | 03353341 | Vangelis Koukis | 'default': { |
287 | 03353341 | Vangelis Koukis | 'ENGINE': 'django.db.backends.postgresql_psycopg2', |
288 | 03353341 | Vangelis Koukis | 'NAME': 'DATABASE', |
289 | 03353341 | Vangelis Koukis | 'USER': 'USERNAME', |
290 | 03353341 | Vangelis Koukis | 'PASSWORD': 'PASSWORD', |
291 | 03353341 | Vangelis Koukis | 'HOST': 'HOST', |
292 | 03353341 | Vangelis Koukis | 'PORT': 'PORT', |
293 | 03353341 | Vangelis Koukis | } |
294 | 03353341 | Vangelis Koukis | } |
295 | 7e8b41e7 | Vangelis Koukis | |
296 | 03353341 | Vangelis Koukis | Try it out. The following command will attempt to connect to the DB and |
297 | 03353341 | Vangelis Koukis | print out DDL statements. It should not fail. |
298 | 7e8b41e7 | Vangelis Koukis | |
299 | 03353341 | Vangelis Koukis | $ ./bin/python manage.py sql db |
300 | 6ec8927b | Vangelis Koukis | |
301 | 6ec8927b | Vangelis Koukis | |
302 | 03353341 | Vangelis Koukis | 7. Initialization of Synnefo DB: |
303 | 03353341 | Vangelis Koukis | You need to initialize the Synnefo DB and load fixtures |
304 | 03353341 | Vangelis Koukis | db/fixtures/{flavors,images}.json, which make the API usable by end users by |
305 | 03353341 | Vangelis Koukis | defining a sample set of hardware configurations (flavors) and OS images. |
306 | 03353341 | Vangelis Koukis | |
307 | a6ff022a | Vangelis Koukis | IMPORTANT: Be sure to modify db/fixtures/initial_data.json and select |
308 | a6ff022a | Vangelis Koukis | a unique token for each of the initial and any other users defined in this |
309 | a6ff022a | Vangelis Koukis | file. DO NOT LEAVE THE SAMPLE AUTHENTICATION TOKENS enabled in deployed |
310 | a6ff022a | Vangelis Koukis | configurations. |
311 | a6ff022a | Vangelis Koukis | |
312 | 03353341 | Vangelis Koukis | $ ./bin/python manage.py syncdb |
313 | 03353341 | Vangelis Koukis | $ ./bin/python manage.py migrate db |
314 | 03353341 | Vangelis Koukis | $ ./bin/python manage.py loaddata db/fixtures/flavors.json |
315 | 03353341 | Vangelis Koukis | $ ./bin/python manage.py loaddata db/fixtures/images.json |
316 | 03353341 | Vangelis Koukis | |
317 | 03353341 | Vangelis Koukis | |
318 | 03353341 | Vangelis Koukis | 8. Finalization of settings.py: |
319 | 03353341 | Vangelis Koukis | Set the BACKEND_PREFIX_ID variable to some unique prefix, e.g. your commit |
320 | 03353341 | Vangelis Koukis | username in settings.py. Several functional conventions within the system |
321 | 03353341 | Vangelis Koukis | require this variable to include a dash at its end (e.g. snf-) |
322 | 03353341 | Vangelis Koukis | |
323 | 03353341 | Vangelis Koukis | |
324 | 36cf1973 | Vangelis Koukis | 9. Installation of the Ganeti monitoring daemon, /ganeti/snf-ganeti-eventd: |
325 | 36cf1973 | Vangelis Koukis | The Ganeti monitoring daemon must run on GANETI-MASTER. |
326 | 937ac8bf | Vangelis Koukis | |
327 | 02728a9a | Vangelis Koukis | The monitoring daemon is configured through /etc/synnefo/settings.conf. |
328 | 02728a9a | Vangelis Koukis | An example is provided under snf-ganeti-tools/. |
329 | 03353341 | Vangelis Koukis | |
330 | 02728a9a | Vangelis Koukis | If run from the repository directory, make sure to have snf-ganeti-tools/ |
331 | 02728a9a | Vangelis Koukis | in the PYTHONPATH. |
332 | 02728a9a | Vangelis Koukis | |
333 | 02728a9a | Vangelis Koukis | You may also build Debian packages directly from the repository: |
334 | 02728a9a | Vangelis Koukis | $ cd snf-ganeti-tools |
335 | 02728a9a | Vangelis Koukis | $ dpkg-buildpackage -b -uc -us |
336 | 02728a9a | Vangelis Koukis | # dpkg -i ../snf-ganeti-tools-*deb |
337 | 03353341 | Vangelis Koukis | |
338 | 03353341 | Vangelis Koukis | TBD: how to handle master migration. |
339 | 03353341 | Vangelis Koukis | |
340 | 6ec8927b | Vangelis Koukis | |
341 | 03353341 | Vangelis Koukis | 10. Installation of the Synnefo dispatcher, /logic/dispatcher.py: |
342 | 03353341 | Vangelis Koukis | The logic dispatcher is part of the Synnefo Django project and must run |
343 | 03353341 | Vangelis Koukis | on LOGIC nodes. |
344 | ff55193e | Vangelis Koukis | |
345 | 271baf11 | Nikos Skalkotos | The dispatcher retrieves messages from the queue and calls the appropriate |
346 | 271baf11 | Nikos Skalkotos | handler function as defined in the queue configuration in `setttings.py'. |
347 | 271baf11 | Nikos Skalkotos | The default configuration should work directly without any modifications. |
348 | 6ec8927b | Vangelis Koukis | |
349 | 03353341 | Vangelis Koukis | For the time being The dispatcher must be run by hand: |
350 | 03353341 | Vangelis Koukis | $ ./bin/python ./logic/dispatcher.py |
351 | 6ec8927b | Vangelis Koukis | |
352 | 03353341 | Vangelis Koukis | The dispatcher should run in at least 2 instances to ensure high |
353 | 03353341 | Vangelis Koukis | (actually, increased) availability. |
354 | 6ec8927b | Vangelis Koukis | |
355 | 7e8b41e7 | Vangelis Koukis | |
356 | 03353341 | Vangelis Koukis | 11. Installation of the Synnefo Ganeti hook: |
357 | 02728a9a | Vangelis Koukis | The generic Synnefo Ganeti hook wrapper resides in the snf-ganeti-tools/ |
358 | 02728a9a | Vangelis Koukis | directory of the Synnefo repository. |
359 | 7e8b41e7 | Vangelis Koukis | |
360 | 271baf11 | Nikos Skalkotos | The hook needs to be enabled for phases post-{add,modify,reboot,start,stop} |
361 | 271baf11 | Nikos Skalkotos | by *symlinking* in |
362 | 271baf11 | Nikos Skalkotos | /etc/ganeti/hooks/instance-{add,modify,reboot,start,stop}-post.d on |
363 | 271baf11 | Nikos Skalkotos | GANETI-MASTER, e.g.: |
364 | 7e8b41e7 | Vangelis Koukis | |
365 | 03353341 | Vangelis Koukis | root@ganeti-master:/etc/ganeti/hooks/instance-start-post.d# ls -l |
366 | 02728a9a | Vangelis Koukis | lrwxrwxrwx 1 root root 45 May 3 13:45 00-snf-ganeti-hook -> /home/devel/synnefo/snf-ganeti-hook/snf-ganeti-hook.py |
367 | b6382dc5 | Vangelis Koukis | |
368 | 03353341 | Vangelis Koukis | IMPORTANT: The link name may only contain "upper and lower case, digits, |
369 | 03353341 | Vangelis Koukis | underscores and hyphens. In other words, the regexp ^[a-zA-Z0-9_-]+$." |
370 | 271baf11 | Nikos Skalkotos | See: |
371 | 02728a9a | Vangelis Koukis | http://docs.ganeti.org/ganeti/master/html/hooks.html?highlight=hooks#naming |
372 | 02728a9a | Vangelis Koukis | |
373 | 02728a9a | Vangelis Koukis | If run from the repository directory, make sure to have snf-ganeti-tools/ |
374 | 02728a9a | Vangelis Koukis | in the PYTHONPATH. |
375 | 7e8b41e7 | Vangelis Koukis | |
376 | 02728a9a | Vangelis Koukis | Alternative, build Debian packages which take care of building, installing |
377 | 02728a9a | Vangelis Koukis | and activating the Ganeti hook automatically, see step. 9. |
378 | 81d1a961 | Constantinos Venetsanopoulos | |
379 | 81d1a961 | Constantinos Venetsanopoulos | |
380 | 03353341 | Vangelis Koukis | 12. Installation of the VNC authentication proxy, vncauthproxy: |
381 | 03353341 | Vangelis Koukis | To support OOB console access to the VMs over VNC, the vncauthproxy |
382 | 03353341 | Vangelis Koukis | daemon must be running on every node of type APISERVER. |
383 | 81d1a961 | Constantinos Venetsanopoulos | |
384 | 03353341 | Vangelis Koukis | Download and install vncauthproxy from its own repository, |
385 | 50a48b39 | Vangelis Koukis | at https://code.grnet.gr/git/vncauthproxy (known good commit: tag v1.0). |
386 | a06deab3 | Vangelis Koukis | |
387 | 937ac8bf | Vangelis Koukis | Download and install a specific repository commit: |
388 | 937ac8bf | Vangelis Koukis | |
389 | 937ac8bf | Vangelis Koukis | $ bin/pip install -e git+https://code.grnet.gr/git/vncauthproxy@INSERT_COMMIT_HERE#egg=vncauthproxy |
390 | 937ac8bf | Vangelis Koukis | |
391 | 03353341 | Vangelis Koukis | Create /var/log/vncauthproxy and set its permissions appropriately. |
392 | fc2afa67 | Vangelis Koukis | |
393 | 937ac8bf | Vangelis Koukis | Alternatively, you can build Debian packages. To do so, |
394 | 937ac8bf | Vangelis Koukis | checkout the "debian" branch of the vncauthproxy repository |
395 | 50a48b39 | Vangelis Koukis | (known good commit: tag debian/v1.0): |
396 | 937ac8bf | Vangelis Koukis | |
397 | 937ac8bf | Vangelis Koukis | $ git checkout debian |
398 | 937ac8bf | Vangelis Koukis | |
399 | 937ac8bf | Vangelis Koukis | Then build debian package, and install as root: |
400 | 937ac8bf | Vangelis Koukis | |
401 | 937ac8bf | Vangelis Koukis | $ dpkg-buildpackage -b -uc -us |
402 | 937ac8bf | Vangelis Koukis | # dpkg -i ../vncauthproxy_1.0-1_all.deb |
403 | 937ac8bf | Vangelis Koukis | |
404 | 141f3009 | Georgios Gousios | --Failure to build the package on the Mac. |
405 | 141f3009 | Georgios Gousios | |
406 | 141f3009 | Georgios Gousios | libevent, a requirement for gevent which in turn is a requirement for |
407 | 141f3009 | Georgios Gousios | vncauthproxy is not included in MacOSX by default and installing it with |
408 | 141f3009 | Georgios Gousios | MacPorts does not lead to a version that can be found by the gevent |
409 | 141f3009 | Georgios Gousios | build process. A quick workaround is to execute the following commands: |
410 | 141f3009 | Georgios Gousios | |
411 | 141f3009 | Georgios Gousios | cd $SYNNEFO |
412 | 141f3009 | Georgios Gousios | sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy |
413 | 141f3009 | Georgios Gousios | <the above fails> |
414 | 141f3009 | Georgios Gousios | cd build/gevent |
415 | 141f3009 | Georgios Gousios | sudo python setup.py -I/opt/local/include -L/opt/local/lib build |
416 | 141f3009 | Georgios Gousios | cd $SYNNEFO |
417 | 141f3009 | Georgios Gousios | sudo pip install -e git+https://code.grnet.gr/git/vncauthproxy@5a196d8481e171a#egg=vncauthproxy |
418 | fc2afa67 | Vangelis Koukis | |
419 | 02728a9a | Vangelis Koukis | |
420 | 03353341 | Vangelis Koukis | 13. Installation of the customized Ganeti Instance Image for image deployment: |
421 | 03353341 | Vangelis Koukis | For Synnefo to be able to launch VMs from specified Images, you need |
422 | 9403216e | Constantinos Venetsanopoulos | the gnt-instance-image OS Provider installed on *all* Ganeti nodes. |
423 | 9403216e | Constantinos Venetsanopoulos | There are 2 different ways to install gnt-instance-image on a node: |
424 | 9403216e | Constantinos Venetsanopoulos | |
425 | 9403216e | Constantinos Venetsanopoulos | 1.As a debian package (recommended) |
426 | 9403216e | Constantinos Venetsanopoulos | |
427 | 9403216e | Constantinos Venetsanopoulos | Download and install the debian package found here: |
428 | 0375f9f3 | Constantinos Venetsanopoulos | https://code.grnet.gr/attachments/download/351/ganeti-instance-image_0.5.1-1-snf1_all.deb |
429 | 9403216e | Constantinos Venetsanopoulos | You can do this by running the following: |
430 | 9403216e | Constantinos Venetsanopoulos | |
431 | 0375f9f3 | Constantinos Venetsanopoulos | $ wget https://code.grnet.gr/attachments/download/351/ganeti-instance-image_0.5.1-1-snf1_all.deb |
432 | 33bfb28b | Constantinos Venetsanopoulos | # dpkg -i ganeti-instance-image_0.5.1-1-snf1_all.deb |
433 | 9403216e | Constantinos Venetsanopoulos | |
434 | 9403216e | Constantinos Venetsanopoulos | Make any additional configuration changes in |
435 | 9403216e | Constantinos Venetsanopoulos | /etc/default/ganeti-instance-image. |
436 | 9403216e | Constantinos Venetsanopoulos | It is recommended to change the default IMAGE_DIR from |
437 | 9403216e | Constantinos Venetsanopoulos | /var/cache/ganeti-instance-image to something like /srv/example_images_repo |
438 | 9403216e | Constantinos Venetsanopoulos | |
439 | 9403216e | Constantinos Venetsanopoulos | Be sure to have all the package's needed dependencies installed |
440 | 9403216e | Constantinos Venetsanopoulos | on your system. |
441 | 9403216e | Constantinos Venetsanopoulos | |
442 | 9403216e | Constantinos Venetsanopoulos | 2.From source |
443 | 9403216e | Constantinos Venetsanopoulos | |
444 | 9403216e | Constantinos Venetsanopoulos | Download and install gnt-instance-image from its own repository, |
445 | 9403216e | Constantinos Venetsanopoulos | at https://code.grnet.gr/git/gnt-instance-image. It's |
446 | 9403216e | Constantinos Venetsanopoulos | recommended to use the win-support branch (known good commit: |
447 | 0375f9f3 | Constantinos Venetsanopoulos | a7fb0e606623e7ac10d06ac935b0afe7f03d496c). |
448 | 9403216e | Constantinos Venetsanopoulos | |
449 | 9403216e | Constantinos Venetsanopoulos | Make sure to enable progress monitoring, using the --with-progress-monitor |
450 | 9403216e | Constantinos Venetsanopoulos | argument to configure. This requires the snf-progress-monitor tool, |
451 | 9403216e | Constantinos Venetsanopoulos | provided in snf-ganeti-tools/ and also as part of the snf-ganeti-tools |
452 | 9403216e | Constantinos Venetsanopoulos | Debian package. |
453 | 9403216e | Constantinos Venetsanopoulos | |
454 | 9403216e | Constantinos Venetsanopoulos | After installing gnt-instance-image do the following: |
455 | 9403216e | Constantinos Venetsanopoulos | 1. $ cd /path-to-repo |
456 | 9403216e | Constantinos Venetsanopoulos | # cp ./defaults /etc/default/ganeti-instance-image |
457 | 9403216e | Constantinos Venetsanopoulos | 2. In /etc/ganeti/instance-image/hooks, make sure the hooks you want to |
458 | 9403216e | Constantinos Venetsanopoulos | run during the instance creation process have execute permission. |
459 | 9403216e | Constantinos Venetsanopoulos | For linux you will need at lease `grub' and `root_passwd' to make the |
460 | 9403216e | Constantinos Venetsanopoulos | instance usable: |
461 | 9403216e | Constantinos Venetsanopoulos | chmod +x /etc/ganeti/instance-image/hooks/linux/{grub,root_passwd} |
462 | 9403216e | Constantinos Venetsanopoulos | For security reasons make sure `ssh' hook is also enabled. |
463 | 9403216e | Constantinos Venetsanopoulos | For windows you will need `mbr' and `admin_passwd': |
464 | 9403216e | Constantinos Venetsanopoulos | chmod +x /etc/ganeti/instance-image/hooks/windows/{mbr,admin_passwd} |
465 | 9403216e | Constantinos Venetsanopoulos | For both architectures it is also highly recommended to enable the |
466 | 9403216e | Constantinos Venetsanopoulos | `hostname' hook too: |
467 | 9403216e | Constantinos Venetsanopoulos | chmod +x /et/ganeti/instance-image/hooks/{linux,windows}/hostname |
468 | 03353341 | Vangelis Koukis | |
469 | 02728a9a | Vangelis Koukis | Your custom Images should be stored in a dump format under |
470 | 9403216e | Constantinos Venetsanopoulos | /var/cache/ganeti-instance-image (default) or a different directory of your |
471 | 9403216e | Constantinos Venetsanopoulos | choice, accordingly set in /etc/default/ganeti-instance-image. The latter |
472 | 9403216e | Constantinos Venetsanopoulos | is recommended. Their filenames should have the following format: |
473 | 03353341 | Vangelis Koukis | {backend_id}-x86_64-root.dump |
474 | 03353341 | Vangelis Koukis | e.g., debian-6.0.1a-x86_64-root.dump (backend_id = "debian-6.0.1a") |
475 | 76a429fb | Georgios Gousios | |
476 | 02728a9a | Vangelis Koukis | |
477 | 03353341 | Vangelis Koukis | 14. Setup Synnefo-specific networking on the Ganeti backend: |
478 | 03353341 | Vangelis Koukis | This part is deployment-specific and must be customized based on the |
479 | 03353341 | Vangelis Koukis | specific needs of the system administrators. |
480 | 76a429fb | Georgios Gousios | |
481 | 03353341 | Vangelis Koukis | A reference installation will use a Synnefo-specific KVM ifup script, |
482 | 03353341 | Vangelis Koukis | NFDHCPD and pre-provisioned Linux bridges to support public and private |
483 | 03353341 | Vangelis Koukis | network functionality. For this: |
484 | 76a429fb | Georgios Gousios | |
485 | 03353341 | Vangelis Koukis | Grab NFDHCPD from its own repository (https://code.grnet.gr/git/nfdhcpd), |
486 | 03353341 | Vangelis Koukis | install it, modify /etc/nfdhcpd/nfdhcpd.conf to reflect your network |
487 | 03353341 | Vangelis Koukis | configuration. |
488 | 76a429fb | Georgios Gousios | |
489 | 03353341 | Vangelis Koukis | Install a custom KVM ifup script for use by Ganeti, as |
490 | 03353341 | Vangelis Koukis | /etc/ganeti/kvm-vif-bridge, on GANETI-NODEs. A sample implementation is |
491 | 03353341 | Vangelis Koukis | provided under /contrib/ganeti-hooks. Set NFDHCPD_STATE_DIR to point |
492 | 03353341 | Vangelis Koukis | to NFDHCPD's state directory, usually /var/lib/nfdhcpd. |
493 | 76a429fb | Georgios Gousios | |
494 | 76a429fb | Georgios Gousios | |
495 | 10b3cf02 | Vangelis Koukis | 15. See section "Logging" in README.admin, and edit logic/logging.conf |
496 | 10b3cf02 | Vangelis Koukis | according to your OS and individual deployment characteristics. |
497 | 76a429fb | Georgios Gousios | |
498 | 7e8b41e7 | Vangelis Koukis | |
499 | 8b5381f3 | Kostas Papadimitriou | 16. Optionally, read the okeanos_site/README file to setup ~okeanos introductory |
500 | 3c27c268 | Vangelis Koukis | site (intro, video/info pages). Please see okeanos_site/90-okeanos.sample |
501 | 3c27c268 | Vangelis Koukis | for a sample configuration file which overrides site-specific variables, |
502 | 3c27c268 | Vangelis Koukis | to be placed under settings.d/, after customization. |
503 | 3c27c268 | Vangelis Koukis | |
504 | 3c27c268 | Vangelis Koukis | |
505 | 8b5381f3 | Kostas Papadimitriou | 17. (Hopefully) Done |
506 | 8b5381f3 | Kostas Papadimitriou |