root / docs / cyclades.rst @ 2e1e6844
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` |