Statistics
| Branch: | Tag: | Revision:

root / doc / design-2.1.rst @ b6cc971c

History | View | Annotate | Download (6.9 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
External interface changes
85
--------------------------
86

    
87
OS API
88
~~~~~~
89

    
90
The OS API of Ganeti 2.0 has been built with extensibility in mind. Since we
91
pass everything as environment variables it's a lot easier to send new
92
information to the OSes without breaking retrocompatibility. This section of
93
the design outlines the proposed extensions to the API and their
94
implementation.
95

    
96
API Version Compatibility Handling
97
++++++++++++++++++++++++++++++++++
98

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

    
107
New Environment variables
108
+++++++++++++++++++++++++
109

    
110
Some variables have never been added to the OS api but would definitely be
111
useful for the OSes. We plan to add an INSTANCE_HYPERVISOR variable to allow
112
the OS to make changes relevant to the virtualization the instance is going to
113
use. Since this field is immutable for each instance, the os can tight the
114
install without caring of making sure the instance can run under any
115
virtualization technology.
116

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

    
126
OS Parameters
127
+++++++++++++
128

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

    
136
For example today if you want to install debian etch, lenny or squeeze you
137
probably need to install the debootstrap OS multiple times, changing its
138
configuration file, and calling it debootstrap-etch, debootstrap-lenny or
139
debootstrap-squeeze. Furthermore if you have for example a "server" and a
140
"development" environment which installs different packages/configuration files
141
and must be available for all installs you'll probably end  up with
142
deboostrap-etch-server, debootstrap-etch-dev, debootrap-lenny-server,
143
debootstrap-lenny-dev, etc. Crossing more than two parameters quickly becomes
144
not manageable.
145

    
146
In order to avoid this we plan to make OSes more customizable, by allowing
147
arbitrary flags to be passed to them. These will be special "OS parameters"
148
which will be handled by Ganeti mostly as hypervisor or be parameters. This
149
slightly complicates the interface, but allows one OS (for example
150
"debootstrap" to be customizable and not require copies to perform different
151
cations).
152

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

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