summaryrefslogtreecommitdiff
path: root/src/talks/product-management.hbs
diff options
context:
space:
mode:
Diffstat (limited to 'src/talks/product-management.hbs')
-rw-r--r--src/talks/product-management.hbs384
1 files changed, 384 insertions, 0 deletions
diff --git a/src/talks/product-management.hbs b/src/talks/product-management.hbs
new file mode 100644
index 0000000..3d20eed
--- /dev/null
+++ b/src/talks/product-management.hbs
@@ -0,0 +1,384 @@
1<!doctype html>
2<html lang="en">
3
4 <head>
5 <meta charset="utf-8">
6
7 <title>Liberty, Product Management and OpenStack Technology</title>
8
9 </head>
10 <body>
11
12 <section class="slide level2">
13 <img src="/images/openstack-cloud-software-vertical-large.png"
14 alt="OpenStack" />
15 </section>
16
17 <section class="slide level2">
18 <h1>Mission</h1>
19 <p>
20 to produce the ubiquitous Open Source Cloud Computing platform that will meet the needs of public and private clouds regardless of size, by being simple to implement and massively scalable.
21 </p>
22 </section>
23
24 <section class="slide level2">
25 <h1>Borrowed from Ubuntu</h1>
26 <p>Time Based Releases</p>
27 <p>Design summits each cycle</p>
28 <p>Release codenames in alphabetical order</p>
29 </section>
30
31 <section class="slide level2">
32 <h1>Different from Ubuntu</h1>
33 <p>No BDFL</p>
34 <p>All decisions are democratic</p>
35 </section>
36
37 <section class="slide level2">
38 <img src="/images/openstack-size.jpg" />
39 </section>
40
41 <section class="slide level2">
42 <h1>"OpenStack needs product management"</h1>
43 </section>
44
45 <section class="slide level2">
46 <p>Developers work on whatever they feel like, so there is no cohesion</p>
47 <p class='fragment'><small>not quite</small></p>
48 </section>
49
50 <section class="slide level2">
51 <img src="/images/openstack-size.jpg" />
52 </section>
53
54 <section class="slide level2">
55 <h1>OpenStack needs product management <em>coordination</em></h1>
56 </section>
57
58 <section class="slide level2">
59 <h1> Product Management Working Group </h1>
60 <p>Today 2:00pm - 3:30pm Room 212</p>
61 </section>
62
63 <section class="slide level2">
64 <h1>What can the working group do?</h1>
65 <ul>
66 <li class='fragment'>
67 Define problems
68 </li>
69 <li class='fragment'>
70 Coordinate prorities
71 </li>
72 <li class='fragment'>
73 Communicate problems clearly to tech community
74 </li>
75 </section>
76
77 <section class="slide level2">
78 <h1>I've got 99 Problems ...</h1>
79 <img src="/images/worstcat-lettuce.jpg" />
80 </section>
81
82 <section class="slide level2">
83 <p>As an application developer,<br />
84 I want to deploy and run an application on the internet<br />
85 so that my customers all over the world can consume it.</p>
86 </section>
87
88 <section class="slide level2">
89 <p>As an application developer,<br />
90 I want to deploy the application across multiple clouds<br />
91 so that my service survives issues in any one of them.</p>
92 </section>
93
94 <section class="slide level2">
95 <h1>THIS WORKS</h1>
96 <h3>I'm doing it myself as we speak</h3>
97 <img style="float:right; margin-right:24pt" src="/images/graphite.openstack.org.png"/>
98
99
100 <p class='fragment'>10-20k VMs per-day</p>
101 <p class='fragment'>3 (soon to be 6) clouds</p>
102 <p class='fragment'>Only using OpenStack APIs</p>
103
104 </section>
105
106 <section class="slide level2">
107 <h1>To do this, there are some basic steps</h1>
108
109 <p class='fragment'>Get (make/fetch/find) a base image</p>
110 <p class='fragment'>Upload it to each cloud</p>
111 <p class='fragment'>Boot a VM on one or more of the clouds</p>
112 <p class='fragment'>Ensure it's on the Internet</p>
113
114 </section>
115
116 <section class="slide level2">
117 <h1>Get a base image</h1>
118 <p class='fragment'>OpenStack diskimage-builder</p>
119 <p class='fragment'>packer</p>
120 <p class='fragment'>Download pre-built image from Ubuntu/Fedora</p>
121 </section>
122
123 <section class="slide level2">
124 <h1>NO</h1>
125 <img src="/images/worstcat-lettuce.jpg" />
126 </section>
127
128 <section class="slide level2">
129 <h1>Problem: hypervisor image file format</h1>
130 <ul>
131 <li class='fragment'>
132 Rackspace uses VHD
133 </li>
134 <li class='fragment'>
135 HP uses qcow2
136 </li>
137 <li class='fragment'>
138 DreamHost uses RAW
139 </li>
140 </ul>
141 </section>
142
143 <section class="slide level2">
144 <h1>Upload it to each cloud</h1>
145 <pre>glance image-create</pre>
146 </section>
147
148 <section class="slide level2">
149 <h1>NO</h1>
150 <img src="/images/worstcat-lettuce.jpg" />
151 </section>
152
153 <section class="slide level2">
154 <h1>Problem: image API version</h1>
155 <ul>
156 <li class='fragment'>
157 HP uses v1
158 </li>
159 <li class='fragment'>
160 vexxhost uses v2
161 </li>
162 </ul>
163 </section>
164
165 <section class="slide level2">
166 <h1>Problem: List API versions</h1>
167 <p>Root of the Image API lists versions</p>
168 <p>keystone catalog only lists a versioned endpoint</p>
169 </section>
170
171 <section class="slide level2">
172 <h1>Problem: API version discovery</h1>
173 <p>Try one - if it doesn't work, try the other</p>
174 <p><em>maybe</em> look at the end of the API endpoint for v1 or v2</p>
175 </section>
176
177 <section class="slide level2">
178 <h1>Upload it to each cloud</h1>
179 <pre>glance image-create filename</pre>
180 </section>
181
182 <section class="slide level2">
183 <h1>NO</h1>
184 <img src="/images/worstcat-lettuce.jpg" />
185 </section>
186
187 <section class="slide level2">
188 <h1>Problem: image task vs. PUT</h1>
189 <pre>
190swift upload --object-name local-image-filename images image-name
191glance task-create
192 --type=import
193 --input='{"import_from": "images/image-name",
194 "image_properties" : {"name": "My Image Name"}}'
195 </pre>
196 <pre>
197glance image-create --name=image-name --file=local-image-filename
198 </pre>
199 </section>
200
201 <section class="slide level2">
202 <h1>Boot a VM on one or more of the clouds</h1>
203 <pre>nova boot --image=image-name --flavor=something
204 </pre>
205 </section>
206
207 <section class="slide level2">
208 <h1>NO</h1>
209 <img src="/images/worstcat-lettuce.jpg" />
210 </section>
211
212 <section class="slide level2">
213 <h1>Problem: the image needs to get on the network</h1>
214 <ul>
215 <li class='fragment'>DHCP</li>
216 <li class='fragment'>Static Network Config in Config Drive</li>
217 <li class='fragment'>Vendor-specific agent doing file injection</li>
218 </ul>
219 </section>
220
221 <section class="slide level2">
222 <h1>
223 <pre>nova boot --image=image-name --flavor=something
224 </pre>
225 </section>
226
227 <section class="slide level2">
228 <h1>NO</h1>
229 <img src="/images/worstcat-lettuce.jpg" />
230 </section>
231
232 <section class="slide level2">
233 <h1>Problem: Ensure it's on the Internet</h1>
234 <ul>
235 <li class='fragment'>My VM may have a public IP</li>
236 <li class='fragment'>My VM may need a floating IP from nova</li>
237 <li class='fragment'>My VM may need a floating IP from neutron</li>
238 </ul>
239 </section>
240
241 <section class="slide level2">
242 <h1>VM Network with nova-network</h1>
243 <pre>
244 addresses:
245 private:
246 - addr: 10.181.5.77
247 version: 4
248 public:
249 - addr: 2001:4800:7810:512:be76:4eff:fe05:8325
250 version: 6
251 - addr: 98.129.169.30
252 version: 4
253 </pre>
254 </section>
255
256 <section class="slide level2">
257 <h1>VM Network with nova-network</h1>
258 <pre>
259 addresses:
260 mordred@inaugust.com-network:
261 - OS-EXT-IPS-MAC:mac_addr: fa:16:3e:a6:de:26
262 OS-EXT-IPS:type: fixed
263 addr: 10.0.0.6
264 version: 4
265 - OS-EXT-IPS-MAC:mac_addr: fa:16:3e:a6:de:26
266 OS-EXT-IPS:type: floating
267 addr: 15.126.239.219
268 version: 4
269 </pre>
270 </section>
271
272 <section class="slide level2">
273 <h1>Boot a VM on one or more of the clouds</h1>
274 <pre>
275nova boot --image=image-name --flavor=something --name=my-server
276nova floating-ip-create
277nova floating-ip-associate my-server {{ value_from_create }}
278 </pre>
279 </section>
280
281 <section class="slide level2">
282 <h1>NO</h1>
283 <img src="/images/worstcat-lettuce.jpg" />
284 </section>
285
286 <section class="slide level2">
287 <h1>Problem: My Internet server is behind a NAT</h1>
288 </section>
289
290 <section class="slide level2">
291 <h1>Problem: Security Groups<h1>
292 <p>I was trying to spin up a web server, but all my ports were blocked</p>
293 <p><small>I'll be using ansible and puppet on this machine, I can configure iptables thanks</small></p>
294 </section>
295
296 <section class="slide level2">
297 <h1>Boot a VM on one or more of the clouds</h1>
298 <pre>
299nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
300nova boot --image=image-name --flavor=something --name=my-server
301nova floating-ip-create
302nova floating-ip-associate my-server {{ value_from_create }}
303 </pre>
304 </section>
305
306 <section class="slide level2">
307 <h1>Wow. So that's</h1>
308 <ul>
309 <li>
310 Image Format
311 </li><li>
312 Image API version
313 </li><li>
314 Image upload mechanism
315 </li><li>
316 Networking config / public private
317 </li><li>
318 Networking config nova/neutron
319 </li><li>
320 Floating IP?
321 </li><li>
322 Floating IP nova/neutron
323 </li><li>
324 DHCP or Static networking config
325 </li><li>
326 Security Group config
327 </li>
328 </ul>
329 </section>
330
331 <section class="slide level2">
332 <h1>I think we can do better than that</h1>
333 </section>
334
335 <section class="slide level2">
336 <h1>What am I doing about it?</h1>
337 </section>
338
339 <section class="slide level2">
340 <h1>os-client-config</h1>
341 <h3>http://git.openstack.org/cgit/openstack/os-client-config</h3>
342 <p>A library to handle config information for openstack clients</p>
343 <p>Tracks differences in vendors that can't be discovered</p>
344 <p>In use in python-openstackclient and ansible today</p>
345 </section>
346
347 <section class="slide level2">
348 <h1>shade</h1>
349 <h3>http://git.openstack.org/cgit/openstack-infra/shade</h3>
350 <p>A library to wrap business logic around client libraries</p>
351 <pre>
352cloud.create_server('my-server', auto_ip=True)
353 </pre>
354 <p>In use in Infra Nodepool and ansible today</p>
355 </section>
356
357 <section class="slide level2">
358 <h1>Raising Issues</h1>
359 <ul>
360 <li> Product Management Working Group (today, 2pm, room 212) </li>
361 <li> DefCore (Wednesday 10:30 - 12:30, East Building Room 2/3)</li>
362 <li> Direct interaction with the teams and PTLs </li>
363 </ul>
364 </section>
365
366 <section class="slide level2">
367 <h1>What should we do about it?</h1>
368 <ul>
369 <li>
370 Get back to basics
371 </li><li>
372 shade existence is a bug
373 </li><li>
374 Make some decisions about divergences in the basic levels
375 </li><li>
376 Take a stand even if one of our product managers disagrees
377 </li><li>
378 Ensure that simple things are simple
379 </li>
380 </ul>
381 </section>
382
383 </body>
384</html>