Statistics
| Branch: | Tag: | Revision:

root / doc / design-2.1.rst @ 76bb661b

History | View | Annotate | Download (9.8 kB)

1
=================
2
Ganeti 2.1 design
3
=================
4

    
5
This document describes the major changes in Ganeti 2.1 compared to
6
the 2.0 version.
7

    
8
The 2.1 version will be a relatively small release. Its main aim is to avoid
9
changing too much of the core code, while addressing issues and adding new
10
features and improvements over 2.0, in a timely fashion.
11

    
12
.. contents:: :depth: 3
13

    
14
Objective
15
=========
16

    
17
Ganeti 2.1 will add features to help further automatization of cluster
18
operations, further improbe scalability to even bigger clusters, and make it
19
easier to debug the Ganeti core.
20

    
21
Background
22
==========
23

    
24
Overview
25
========
26

    
27
Detailed design
28
===============
29

    
30
As for 2.0 we divide the 2.1 design into three areas:
31

    
32
- core changes, which affect the master daemon/job queue/locking or all/most
33
  logical units
34
- logical unit/feature changes
35
- external interface changes (eg. command line, os api, hooks, ...)
36

    
37
Core changes
38
------------
39

    
40
Feature changes
41
---------------
42

    
43
Redistribute Config
44
~~~~~~~~~~~~~~~~~~~
45

    
46
Current State and shortcomings
47
++++++++++++++++++++++++++++++
48
Currently LURedistributeConfig triggers a copy of the updated configuration
49
file to all master candidates and of the ssconf files to all nodes. There are
50
other files which are maintained manually but which are important to keep in
51
sync. These are:
52

    
53
- rapi SSL key certificate file (rapi.pem) (on master candidates)
54
- rapi user/password file rapi_users (on master candidates)
55

    
56
Furthermore there are some files which are hypervisor specific but we may want
57
to keep in sync:
58

    
59
- the xen-hvm hypervisor uses one shared file for all vnc passwords, and copies
60
  the file once, during node add. This design is subject to revision to be able
61
  to have different passwords for different groups of instances via the use of
62
  hypervisor parameters, and to allow xen-hvm and kvm to use an equal system to
63
  provide password-protected vnc sessions. In general, though, it would be
64
  useful if the vnc password files were copied as well, to avoid unwanted vnc
65
  password changes on instance failover/migrate.
66

    
67
Optionally the admin may want to also ship files such as the global xend.conf
68
file, and the network scripts to all nodes.
69

    
70
Proposed changes
71
++++++++++++++++
72

    
73
RedistributeConfig will be changed to copy also the rapi files, and to call
74
every enabled hypervisor asking for a list of additional files to copy. We also
75
may want to add a global list of files on the cluster object, which will be
76
propagated as well, or a hook to calculate them. If we implement this feature
77
there should be a way to specify whether a file must be shipped to all nodes or
78
just master candidates.
79

    
80
This code will be also shared (via tasklets or by other means, if tasklets are
81
not ready for 2.1) with the AddNode and SetNodeParams LUs (so that the relevant
82
files will be automatically shipped to new master candidates as they are set).
83

    
84
VNC Console Password
85
~~~~~~~~~~~~~~~~~~~~
86

    
87
Current State and shortcomings
88
++++++++++++++++++++++++++++++
89

    
90
Currently just the xen-hvm hypervisor supports setting a password to connect
91
the the instances' VNC console, and has one common password stored in a file.
92

    
93
This doesn't allow different passwords for different instances/groups of
94
instances, and makes it necessary to remember to copy the file around the
95
cluster when the password changes.
96

    
97
Proposed changes
98
++++++++++++++++
99

    
100
We'll change the VNC password file to a vnc_password_file hypervisor parameter.
101
This way it can have a cluster default, but also a different value for each
102
instance. The VNC enabled hypervisors (xen and kvm) will publish all the
103
password files in use through the cluster so that a redistribute-config will
104
ship them to all nodes (see the Redistribute Config proposed changes above).
105

    
106
The current VNC_PASSWORD_FILE constant will be removed, but its value will be
107
used as the default HV_VNC_PASSWORD_FILE value, thus retaining backwards
108
compatibility with 2.0.
109

    
110
The code to export the list of VNC password files from the hypervisors to
111
RedistributeConfig will be shared between the KVM and xen-hvm hypervisors.
112

    
113
Disk/Net parameters
114
~~~~~~~~~~~~~~~~~~~
115

    
116
Current State and shortcomings
117
++++++++++++++++++++++++++++++
118

    
119
Currently disks and network interfaces have a few tweakable options and all the
120
rest is left to a default we chose. We're finding that we need more and more to
121
tweak some of these parameters, for example to disable barriers for DRBD
122
devices, or allow striping for the LVM volumes.
123

    
124
Moreover for many of these parameters it will be nice to have cluster-wide
125
defaults, and then be able to change them per disk/interface.
126

    
127
Proposed changes
128
++++++++++++++++
129

    
130
We will add new cluster level diskparams and netparams, which will contain all
131
the tweakable parameters. All values which have a sensible cluster-wide default
132
will go into this new structure while parameters which have unique values will not.
133

    
134
Example of network parameters:
135
  - mode: bridge/route
136
  - link: for mode "bridge" the bridge to connect to, for mode route it can
137
    contain the routing table, or the destination interface
138

    
139
Example of disk parameters:
140
  - stripe: lvm stripes
141
  - stripe_size: lvm stripe size
142
  - meta_flushes: drbd, enable/disable metadata "barriers"
143
  - data_flushes: drbd, enable/disable data "barriers"
144

    
145
Some parameters are bound to be disk-type specific (drbd, vs lvm, vs files) or
146
hypervisor specific (nic models for example), but for now they will all live in
147
the same structure. Each component is supposed to validate only the parameters
148
it knows about, and ganeti itself will make sure that no "globally unknown"
149
parameters are added, and that no parameters have overridden meanings for
150
different components.
151

    
152
The parameters will be kept, as for the BEPARAMS into a "default" category,
153
which will allow us to expand on by creating instance "classes" in the future.
154
Instance classes is not a feature we plan implementing in 2.1, though.
155

    
156

    
157
External interface changes
158
--------------------------
159

    
160
OS API
161
~~~~~~
162

    
163
The OS API of Ganeti 2.0 has been built with extensibility in mind. Since we
164
pass everything as environment variables it's a lot easier to send new
165
information to the OSes without breaking retrocompatibility. This section of
166
the design outlines the proposed extensions to the API and their
167
implementation.
168

    
169
API Version Compatibility Handling
170
++++++++++++++++++++++++++++++++++
171

    
172
In 2.1 there will be a new OS API version (eg. 15), which should be mostly
173
compatible with api 10, except for some new added variables. Since it's easy
174
not to pass some variables we'll be able to handle Ganeti 2.0 OSes by just
175
filtering out the newly added piece of information. We will still encourage
176
OSes to declare support for the new API after checking that the new variables
177
don't provide any conflict for them, and we will drop api 10 support after
178
ganeti 2.1 has released.
179

    
180
New Environment variables
181
+++++++++++++++++++++++++
182

    
183
Some variables have never been added to the OS api but would definitely be
184
useful for the OSes. We plan to add an INSTANCE_HYPERVISOR variable to allow
185
the OS to make changes relevant to the virtualization the instance is going to
186
use. Since this field is immutable for each instance, the os can tight the
187
install without caring of making sure the instance can run under any
188
virtualization technology.
189

    
190
We also want the OS to know the particular hypervisor parameters, to be able to
191
customize the install even more.  Since the parameters can change, though, we
192
will pass them only as an "FYI": if an OS ties some instance functionality to
193
the value of a particular hypervisor parameter manual changes or a reinstall
194
may be needed to adapt the instance to the new environment. This is not a
195
regression as of today, because even if the OSes are left blind about this
196
information, sometimes they still need to make compromises and cannot satisfy
197
all possible parameter values.
198

    
199
OS Parameters
200
+++++++++++++
201

    
202
Currently we are assisting to some degree of "os proliferation" just to change
203
a simple installation behavior. This means that the same OS gets installed on
204
the cluster multiple times, with different names, to customize just one
205
installation behavior. Usually such OSes try to share as much as possible
206
through symlinks, but this still causes complications on the user side,
207
especially when multiple parameters must be cross-matched.
208

    
209
For example today if you want to install debian etch, lenny or squeeze you
210
probably need to install the debootstrap OS multiple times, changing its
211
configuration file, and calling it debootstrap-etch, debootstrap-lenny or
212
debootstrap-squeeze. Furthermore if you have for example a "server" and a
213
"development" environment which installs different packages/configuration files
214
and must be available for all installs you'll probably end  up with
215
deboostrap-etch-server, debootstrap-etch-dev, debootrap-lenny-server,
216
debootstrap-lenny-dev, etc. Crossing more than two parameters quickly becomes
217
not manageable.
218

    
219
In order to avoid this we plan to make OSes more customizable, by allowing
220
arbitrary flags to be passed to them. These will be special "OS parameters"
221
which will be handled by Ganeti mostly as hypervisor or be parameters. This
222
slightly complicates the interface, but allows one OS (for example
223
"debootstrap" to be customizable and not require copies to perform different
224
cations).
225

    
226
Each OS will be able to declare which parameters it supports by listing them
227
one per line in a special "parameters" file in the OS dir. The parameters can
228
have a per-os cluster default, or be specified at instance creation time.  They
229
will then be passed to the OS scripts as: INSTANCE_OS_PARAMETER_<NAME> with
230
their specified value. The only value checking that will be performed is that
231
the os parameter value is a string, with only "normal" characters in it.
232

    
233
It will be impossible to change parameters for an instance, except at reinstall
234
time. Upon reinstall with a different OS the parameters will be by default
235
discarded and reset to the default (or passed) values, unless a special
236
--keep-known-os-parameters flag is passed.
237