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