root / docs / cyclades.rst @ 2e1e6844
History | View | Annotate | Download (5.8 kB)
1 | b1996c81 | Kostas Papadimitriou | .. _cyclades: |
---|---|---|---|
2 | e609b1ba | Vangelis Koukis | |
3 | bc055d09 | Constantinos Venetsanopoulos | Compute and Network Service (cyclades) |
4 | bc055d09 | Constantinos Venetsanopoulos | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
5 | e609b1ba | Vangelis Koukis | |
6 | bc055d09 | Constantinos Venetsanopoulos | Cyclades is the the synnefo Compute and Network Service. |
7 | 313c0442 | Constantinos Venetsanopoulos | |
8 | bc055d09 | Constantinos Venetsanopoulos | It implements OpenStack Compute API v1.1 + synnefo extensions. |
9 | 313c0442 | Constantinos Venetsanopoulos | |
10 | 313c0442 | Constantinos Venetsanopoulos | .. todo:: list synnefo components needed by cyclades |
11 | 313c0442 | Constantinos Venetsanopoulos | |
12 | aa62d2f7 | Kostas Papadimitriou | .. _cyclades-introduction: |
13 | aa62d2f7 | Kostas Papadimitriou | |
14 | aa62d2f7 | Kostas Papadimitriou | Cyclades Introduction |
15 | aa62d2f7 | Kostas Papadimitriou | ===================== |
16 | aa62d2f7 | Kostas Papadimitriou | |
17 | aa62d2f7 | Kostas Papadimitriou | Cyclades is the Compute/Network software component of *synnefo*. Its design combines a Google |
18 | aa62d2f7 | Kostas Papadimitriou | Ganeti backend for VM cluster management, with a Python/Django implementation of |
19 | aa62d2f7 | Kostas Papadimitriou | the user-visible API at the frontend. We opted to reuse Ganeti as a VM |
20 | aa62d2f7 | Kostas Papadimitriou | management solution in an effort not to re-invent the wheel; Ganeti is scalable |
21 | aa62d2f7 | Kostas Papadimitriou | and proven software infrastructure for managing VMs in production environments, |
22 | aa62d2f7 | Kostas Papadimitriou | and GRNET already had long experience with it, using it to provide VMs to |
23 | aa62d2f7 | Kostas Papadimitriou | Network Operation Centers. The synnefo team is involved in Ganeti development, |
24 | aa62d2f7 | Kostas Papadimitriou | contributing patches upstream. |
25 | aa62d2f7 | Kostas Papadimitriou | |
26 | aa62d2f7 | Kostas Papadimitriou | Basing our work on Ganeti, we build on a solid, mature core which undertakes |
27 | aa62d2f7 | Kostas Papadimitriou | most of the low-level VM management operations, e.g., handling of VM creations, |
28 | aa62d2f7 | Kostas Papadimitriou | migrations among physical nodes, and handling of node downtimes; the design and |
29 | aa62d2f7 | Kostas Papadimitriou | implementation of the end-user API is orthogonal to VM handling at the backend. |
30 | aa62d2f7 | Kostas Papadimitriou | Building on Ganeti gave us a head start, allowing us to focus on creating a |
31 | aa62d2f7 | Kostas Papadimitriou | custom cloud management layer, accesible over a consistent, clean end-user API |
32 | aa62d2f7 | Kostas Papadimitriou | implementation, and an intuitive Web-based UI. Overall, the software stack is |
33 | aa62d2f7 | Kostas Papadimitriou | as follows: |
34 | aa62d2f7 | Kostas Papadimitriou | |
35 | aa62d2f7 | Kostas Papadimitriou | .. image:: images/synnefo-software-stack.png |
36 | aa62d2f7 | Kostas Papadimitriou | |
37 | aa62d2f7 | Kostas Papadimitriou | With *Cyclades*, users have access to VMs powered by KVM, running Linux and |
38 | aa62d2f7 | Kostas Papadimitriou | Windows guests on Debian hosts and using Google Ganeti for VM cluster |
39 | aa62d2f7 | Kostas Papadimitriou | management. The VMs are accessible by the end-user over the Web or |
40 | aa62d2f7 | Kostas Papadimitriou | programmatically (OpenStack Compute API v1.1). Users have full control over |
41 | aa62d2f7 | Kostas Papadimitriou | their VMs: they can create new ones, start them, shutdown, reboot, and destroy |
42 | aa62d2f7 | Kostas Papadimitriou | them. For the configuration of their VMs they can select number of CPUs, size of |
43 | aa62d2f7 | Kostas Papadimitriou | RAM and system disk, and operating system from pre-defined Images including |
44 | aa62d2f7 | Kostas Papadimitriou | popular Linux distros (Fedora, Debian, Ubuntu) and MS-Windows Server 2008 R2. |
45 | aa62d2f7 | Kostas Papadimitriou | There is an Out-of-Band console over VNC for troubleshooting. |
46 | aa62d2f7 | Kostas Papadimitriou | |
47 | aa62d2f7 | Kostas Papadimitriou | The REST API for VM management, being OpenStack Compute v. 1.1 compatible, can |
48 | aa62d2f7 | Kostas Papadimitriou | interoperate with 3rd party tools and client libraries. GRNET has added custom |
49 | aa62d2f7 | Kostas Papadimitriou | extensions for yet-unsupported functionality. It has been implemented in Python, |
50 | aa62d2f7 | Kostas Papadimitriou | using the Django framework, from scratch. |
51 | aa62d2f7 | Kostas Papadimitriou | |
52 | aa62d2f7 | Kostas Papadimitriou | The *Cyclades* UI is written in Javascript/jQuery and runs entirely on the client |
53 | aa62d2f7 | Kostas Papadimitriou | side for maximum reponsiveness. It is just another API client; all UI operations |
54 | aa62d2f7 | Kostas Papadimitriou | happen with asynchronous calls over the API. |
55 | aa62d2f7 | Kostas Papadimitriou | |
56 | aa62d2f7 | Kostas Papadimitriou | The networking functionality includes dual IPv4/IPv6 connectivity for each VM, |
57 | aa62d2f7 | Kostas Papadimitriou | easy, platform-provided firewalling either through an array of pre-configured |
58 | aa62d2f7 | Kostas Papadimitriou | firewall profiles, or through a roll-your-own firewall inside the VM. Users may |
59 | aa62d2f7 | Kostas Papadimitriou | create multiple private, virtual L2 networks, so that they construct arbitrary |
60 | aa62d2f7 | Kostas Papadimitriou | network topologie, e.g., to deploy VMs in multi-tier configurations. The |
61 | aa62d2f7 | Kostas Papadimitriou | networking functionality is exported all the way from the backend to the API and |
62 | aa62d2f7 | Kostas Papadimitriou | the UI. |
63 | aa62d2f7 | Kostas Papadimitriou | |
64 | aa62d2f7 | Kostas Papadimitriou | |
65 | bc055d09 | Constantinos Venetsanopoulos | .. _cyclades-architecture: |
66 | 313c0442 | Constantinos Venetsanopoulos | |
67 | 313c0442 | Constantinos Venetsanopoulos | Cyclades Architecture |
68 | 313c0442 | Constantinos Venetsanopoulos | ===================== |
69 | 313c0442 | Constantinos Venetsanopoulos | |
70 | bc055d09 | Constantinos Venetsanopoulos | Nodes in an cyclades deployment belong in one of the following types. |
71 | bc055d09 | Constantinos Venetsanopoulos | For every type, we list the services that execute on corresponding nodes. |
72 | bc055d09 | Constantinos Venetsanopoulos | Throughout this guide, `node` refers to a physical machine in the deployment. |
73 | 313c0442 | Constantinos Venetsanopoulos | |
74 | bc055d09 | Constantinos Venetsanopoulos | .. _DB_NODE: |
75 | 313c0442 | Constantinos Venetsanopoulos | |
76 | bc055d09 | Constantinos Venetsanopoulos | DB |
77 | bc055d09 | Constantinos Venetsanopoulos | -- |
78 | 313c0442 | Constantinos Venetsanopoulos | |
79 | bc055d09 | Constantinos Venetsanopoulos | A node [or more than one nodes, if using an HA configuration], running a DB |
80 | bc055d09 | Constantinos Venetsanopoulos | engine supported by the Django ORM layer. The DB is the single source of |
81 | bc055d09 | Constantinos Venetsanopoulos | truth for the servicing of API requests by cyclades. |
82 | 313c0442 | Constantinos Venetsanopoulos | |
83 | bc055d09 | Constantinos Venetsanopoulos | *Services:* PostgreSQL / MySQL |
84 | 313c0442 | Constantinos Venetsanopoulos | |
85 | bc055d09 | Constantinos Venetsanopoulos | .. _APISERVER_NODE: |
86 | 313c0442 | Constantinos Venetsanopoulos | |
87 | bc055d09 | Constantinos Venetsanopoulos | APISERVER |
88 | bc055d09 | Constantinos Venetsanopoulos | --------- |
89 | 313c0442 | Constantinos Venetsanopoulos | |
90 | bc055d09 | Constantinos Venetsanopoulos | A node running the ``api`` application contained in |
91 | bc055d09 | Constantinos Venetsanopoulos | :ref:`snf-cyclades-app <snf-cyclades-app>`. Any number of |
92 | bc055d09 | Constantinos Venetsanopoulos | :ref:`APISERVER <APISERVER_NODE>` nodes |
93 | bc055d09 | Constantinos Venetsanopoulos | can be used, in a load-balancing configuration, without any |
94 | bc055d09 | Constantinos Venetsanopoulos | special consideration. Access to a common DB ensures consistency. |
95 | e609b1ba | Vangelis Koukis | |
96 | bc055d09 | Constantinos Venetsanopoulos | *Services:* Web server, vncauthproxy |
97 | bc055d09 | Constantinos Venetsanopoulos | |
98 | bc055d09 | Constantinos Venetsanopoulos | |
99 | bc055d09 | Constantinos Venetsanopoulos | .. _QUEUE_NODE: |
100 | bc055d09 | Constantinos Venetsanopoulos | |
101 | bc055d09 | Constantinos Venetsanopoulos | QUEUE |
102 | bc055d09 | Constantinos Venetsanopoulos | ----- |
103 | bc055d09 | Constantinos Venetsanopoulos | |
104 | bc055d09 | Constantinos Venetsanopoulos | A node running the RabbitMQ software, which provides AMQP functionality. More |
105 | bc055d09 | Constantinos Venetsanopoulos | than one :ref:`QUEUE <QUEUE_NODE>` nodes may be deployed, in an HA |
106 | bc055d09 | Constantinos Venetsanopoulos | configuration. Such deployments require shared storage, provided e.g., by DRBD. |
107 | bc055d09 | Constantinos Venetsanopoulos | |
108 | bc055d09 | Constantinos Venetsanopoulos | *Services:* RabbitMQ [rabbitmq-server] |
109 | bc055d09 | Constantinos Venetsanopoulos | |
110 | bc055d09 | Constantinos Venetsanopoulos | |
111 | bc055d09 | Constantinos Venetsanopoulos | .. _LOGIC_NODE: |
112 | bc055d09 | Constantinos Venetsanopoulos | |
113 | bc055d09 | Constantinos Venetsanopoulos | LOGIC |
114 | bc055d09 | Constantinos Venetsanopoulos | ----- |
115 | bc055d09 | Constantinos Venetsanopoulos | |
116 | bc055d09 | Constantinos Venetsanopoulos | A node running the business logic of synnefo, in Django. It dequeues |
117 | bc055d09 | Constantinos Venetsanopoulos | messages from QUEUE nodes, and provides the context in which business logic |
118 | bc055d09 | Constantinos Venetsanopoulos | functions run. It uses Django ORM to connect to the common DB and update the |
119 | bc055d09 | Constantinos Venetsanopoulos | state of the system, based on notifications received from the rest of the |
120 | bc055d09 | Constantinos Venetsanopoulos | infrastructure, over AMQP. |
121 | bc055d09 | Constantinos Venetsanopoulos | |
122 | bc055d09 | Constantinos Venetsanopoulos | *Services:* the synnefo logic dispatcher, ``snf-dispatcher`` |
123 | bc055d09 | Constantinos Venetsanopoulos | |
124 | bc055d09 | Constantinos Venetsanopoulos | |
125 | bc055d09 | Constantinos Venetsanopoulos | .. _GANETI_NODES: |
126 | bc055d09 | Constantinos Venetsanopoulos | .. _GANETI_MASTER: |
127 | bc055d09 | Constantinos Venetsanopoulos | .. _GANETI_NODE: |
128 | bc055d09 | Constantinos Venetsanopoulos | |
129 | bc055d09 | Constantinos Venetsanopoulos | GANETI-MASTER and GANETI-NODE |
130 | bc055d09 | Constantinos Venetsanopoulos | ----------------------------- |
131 | bc055d09 | Constantinos Venetsanopoulos | |
132 | bc055d09 | Constantinos Venetsanopoulos | A single GANETI-MASTER and a large number of GANETI-NODEs constitute the |
133 | bc055d09 | Constantinos Venetsanopoulos | Ganeti backend for synnefo, which undertakes all VM management functions. |
134 | bc055d09 | Constantinos Venetsanopoulos | Any APISERVER can issue commands to the GANETI-MASTER, over RAPI, to effect |
135 | bc055d09 | Constantinos Venetsanopoulos | changes in the state of the VMs. The GANETI-MASTER runs the Ganeti request |
136 | bc055d09 | Constantinos Venetsanopoulos | queue. |
137 | bc055d09 | Constantinos Venetsanopoulos | |
138 | bc055d09 | Constantinos Venetsanopoulos | *Services:* |
139 | bc055d09 | Constantinos Venetsanopoulos | * only on :ref:`GANETI-MASTER <GANETI_MASTER>`: |
140 | bc055d09 | Constantinos Venetsanopoulos | * the synnefo Ganeti monitoring daemon, ``snf-ganeti-eventd`` |
141 | bc055d09 | Constantinos Venetsanopoulos | * the synnefo Ganeti hook, ``ganeti/snf-ganeti-hook.py``. |
142 | bc055d09 | Constantinos Venetsanopoulos | * on every :ref:`GANETI-NODE <GANETI_NODE>`: |
143 | bc055d09 | Constantinos Venetsanopoulos | * a deployment-specific KVM ifup script |
144 | bc055d09 | Constantinos Venetsanopoulos | * properly configured :ref:`NFDHCPD <cyclades-nfdhcpd-setup>` |
145 | e609b1ba | Vangelis Koukis | |
146 | e609b1ba | Vangelis Koukis | |
147 | e609b1ba | Vangelis Koukis | .. src/design |
148 | e609b1ba | Vangelis Koukis | .. src/dev |
149 | e609b1ba | Vangelis Koukis | .. src/user |
150 | e609b1ba | Vangelis Koukis | .. src/api |
151 | e609b1ba | Vangelis Koukis | |
152 | e609b1ba | Vangelis Koukis | .. src/install |
153 | e609b1ba | Vangelis Koukis | .. src/configuration |
154 | e609b1ba | Vangelis Koukis | .. src/deployment |
155 | e609b1ba | Vangelis Koukis | .. src/admin |
156 | e609b1ba | Vangelis Koukis | .. src/admin_tools |
157 | e609b1ba | Vangelis Koukis | .. src/develop |
158 | e609b1ba | Vangelis Koukis | .. src/api |
159 | e609b1ba | Vangelis Koukis | .. src/plankton |
160 | e609b1ba | Vangelis Koukis | .. src/storage |
161 | e609b1ba | Vangelis Koukis | .. src/upgrade |
162 | e609b1ba | Vangelis Koukis | .. src/changelog |
163 | e609b1ba | Vangelis Koukis | |
164 | e609b1ba | Vangelis Koukis | Indices and tables |
165 | e609b1ba | Vangelis Koukis | ================== |
166 | e609b1ba | Vangelis Koukis | |
167 | e609b1ba | Vangelis Koukis | |
168 | e609b1ba | Vangelis Koukis | * :ref:`genindex` |
169 | e609b1ba | Vangelis Koukis | * :ref:`modindex` |
170 | e609b1ba | Vangelis Koukis | * :ref:`search` |