Statistics
| Branch: | Tag: | Revision:

root / docs / cyclades.rst @ 7a8df455

History | View | Annotate | Download (5.8 kB)

1
.. _cyclades:
2

    
3
Compute and Network Service (cyclades)
4
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5

    
6
Cyclades is the the synnefo Compute and Network Service.
7

    
8
It implements OpenStack Compute API v1.1 + synnefo extensions.
9

    
10
.. todo:: list synnefo components needed by cyclades
11

    
12
.. _cyclades-introduction:
13

    
14
Cyclades Introduction
15
=====================
16

    
17
Cyclades is the Compute/Network software component of *synnefo*. Its design combines a Google
18
Ganeti backend for VM cluster management, with a Python/Django implementation of
19
the user-visible API at the frontend. We opted to reuse Ganeti as a VM
20
management solution in an effort not to re-invent the wheel; Ganeti is scalable
21
and proven software infrastructure for managing VMs in production environments,
22
and GRNET already had long experience with it, using it to provide VMs to
23
Network Operation Centers. The synnefo team is involved in Ganeti development,
24
contributing patches upstream.
25

    
26
Basing our work on Ganeti, we build on a solid, mature core which undertakes
27
most of the low-level VM management operations, e.g., handling of VM creations,
28
migrations among physical nodes, and handling of node downtimes; the design and
29
implementation of the end-user API is orthogonal to VM handling at the backend.
30
Building on Ganeti gave us a head start, allowing us to focus on creating a
31
custom cloud management layer, accesible over a consistent, clean end-user API
32
implementation, and an intuitive Web-based UI.  Overall, the software stack is
33
as follows:
34

    
35
.. image:: images/synnefo-software-stack.png
36

    
37
With *Cyclades*, users have access to VMs powered by KVM, running Linux and
38
Windows guests on Debian hosts and using Google Ganeti for VM cluster
39
management. The VMs are accessible by the end-user over the Web or
40
programmatically (OpenStack Compute API v1.1). Users have full control over
41
their VMs: they can create new ones, start them, shutdown, reboot, and destroy
42
them. For the configuration of their VMs they can select number of CPUs, size of
43
RAM and system disk, and operating system from pre-defined Images including
44
popular Linux distros (Fedora, Debian, Ubuntu) and MS-Windows Server 2008 R2.
45
There is an Out-of-Band console over VNC for troubleshooting.  
46

    
47
The REST API for VM management, being OpenStack Compute v. 1.1 compatible, can
48
interoperate with 3rd party tools and client libraries. GRNET has added custom
49
extensions for yet-unsupported functionality. It has been implemented in Python,
50
using the Django framework, from scratch.  
51

    
52
The *Cyclades* UI is written in Javascript/jQuery and runs entirely on the client
53
side for maximum reponsiveness. It is just another API client; all UI operations
54
happen with asynchronous calls over the API.
55

    
56
The networking functionality includes dual IPv4/IPv6 connectivity for each VM,
57
easy, platform-provided firewalling either through an array of pre-configured
58
firewall profiles, or through a roll-your-own firewall inside the VM. Users may
59
create multiple private, virtual L2 networks, so that they construct arbitrary
60
network topologie, e.g., to deploy VMs in multi-tier configurations. The
61
networking functionality is exported all the way from the backend to the API and
62
the UI.
63

    
64

    
65
.. _cyclades-architecture:
66

    
67
Cyclades Architecture
68
=====================
69

    
70
Nodes in an cyclades deployment belong in one of the following types.
71
For every type, we list the services that execute on corresponding nodes.
72
Throughout this guide, `node` refers to a physical machine in the deployment.
73

    
74
.. _DB_NODE:
75

    
76
DB
77
--
78

    
79
A node [or more than one nodes, if using an HA configuration], running a DB
80
engine supported by the Django ORM layer. The DB is the single source of
81
truth for the servicing of API requests by cyclades.
82

    
83
*Services:* PostgreSQL / MySQL
84

    
85
.. _APISERVER_NODE:
86

    
87
APISERVER
88
---------
89

    
90
A node running the ``api`` application contained in
91
:ref:`snf-cyclades-app <snf-cyclades-app>`. Any number of
92
:ref:`APISERVER <APISERVER_NODE>` nodes
93
can be used, in a load-balancing configuration, without any
94
special consideration. Access to a common DB ensures consistency.
95

    
96
*Services:* Web server, vncauthproxy
97

    
98

    
99
.. _QUEUE_NODE:
100

    
101
QUEUE
102
-----
103

    
104
A node running the RabbitMQ software, which provides AMQP functionality. More
105
than one :ref:`QUEUE <QUEUE_NODE>` nodes may be deployed, in an HA
106
configuration. Such deployments require shared storage, provided e.g., by DRBD.
107

    
108
*Services:* RabbitMQ [rabbitmq-server]
109

    
110

    
111
.. _LOGIC_NODE:
112

    
113
LOGIC
114
-----
115

    
116
A node running the business logic of synnefo, in Django. It dequeues
117
messages from QUEUE nodes, and provides the context in which business logic
118
functions run. It uses Django ORM to connect to the common DB and update the
119
state of the system, based on notifications received from the rest of the
120
infrastructure, over AMQP.
121

    
122
*Services:* the synnefo logic dispatcher, ``snf-dispatcher``
123

    
124

    
125
.. _GANETI_NODES:
126
.. _GANETI_MASTER:
127
.. _GANETI_NODE:
128

    
129
GANETI-MASTER and GANETI-NODE
130
-----------------------------
131

    
132
A single GANETI-MASTER and a large number of GANETI-NODEs constitute the
133
Ganeti backend for synnefo, which undertakes all VM management functions.
134
Any APISERVER can issue commands to the GANETI-MASTER, over RAPI, to effect
135
changes in the state of the VMs. The GANETI-MASTER runs the Ganeti request
136
queue.
137

    
138
*Services:*
139
    * only on :ref:`GANETI-MASTER <GANETI_MASTER>`:
140
        * the synnefo Ganeti monitoring daemon, ``snf-ganeti-eventd``
141
        * the synnefo Ganeti hook, ``ganeti/snf-ganeti-hook.py``.
142
    * on every :ref:`GANETI-NODE <GANETI_NODE>`:
143
        * a deployment-specific KVM ifup script
144
        * properly configured :ref:`NFDHCPD <cyclades-nfdhcpd-setup>`
145

    
146

    
147
..   src/design
148
..   src/dev
149
..   src/user
150
..   src/api
151

    
152
..   src/install
153
..   src/configuration
154
..   src/deployment
155
..   src/admin
156
..   src/admin_tools
157
..   src/develop
158
..   src/api
159
..   src/plankton
160
..   src/storage
161
..   src/upgrade
162
..   src/changelog
163

    
164
Indices and tables
165
==================
166

    
167

    
168
* :ref:`genindex`
169
* :ref:`modindex`
170
* :ref:`search`