diff options
Diffstat (limited to 'src/talks')
-rw-r--r-- | src/talks/fallacy.hbs | 228 | ||||
-rw-r--r-- | src/talks/who-cares.hbs | 196 |
2 files changed, 395 insertions, 29 deletions
diff --git a/src/talks/fallacy.hbs b/src/talks/fallacy.hbs new file mode 100644 index 0000000..bf8936d --- /dev/null +++ b/src/talks/fallacy.hbs | |||
@@ -0,0 +1,228 @@ | |||
1 | <!doctype html> | ||
2 | <html lang="en"> | ||
3 | |||
4 | <head> | ||
5 | <meta charset="utf-8"> | ||
6 | |||
7 | <title>The Cloud Native Fallacy: You are not Google, or How to Stop Worrying and Learn to Love your Servers</title> | ||
8 | |||
9 | </head> | ||
10 | <body> | ||
11 | |||
12 | <section id="who-am-i-ibm" class="slide level2"> | ||
13 | <h1>Who am I?</h1> | ||
14 | <img style="float:right; margin-right:24pt" src="/images/ibm-logo.png"/> | ||
15 | <p> Distinguished Engineer </p> | ||
16 | <p> IBM Cloud </p> | ||
17 | </section> | ||
18 | |||
19 | <section id="who-am-i-openstack" class="slide level2"> | ||
20 | <h1>Who am I?</h1> | ||
21 | <img style="float:right; margin-right:24pt" src="/images/openstack-cloud-software-vertical-large.png" /> | ||
22 | <p>Technical Committee</p> | ||
23 | <p>Foundation Board of Directors</p> | ||
24 | <p>Developer Infrastructure Core Team</p> | ||
25 | </section> | ||
26 | |||
27 | <section class="slide level2"> | ||
28 | <img src="/images/Slim-pickens_riding-the-bomb_enh-lores.jpg" | ||
29 | alt="Slim Pickens Rides Bomb" /> | ||
30 | </section> | ||
31 | |||
32 | <section class="slide level2"> | ||
33 | <h1>Is Cloud Native good?</h1> | ||
34 | <h2 class='fragment'>yes</h2> | ||
35 | </section> | ||
36 | |||
37 | <section class="slide level2"> | ||
38 | <h1>Is not-Cloud Native bad?</h1> | ||
39 | <h2 class='fragment'>no</h2> | ||
40 | </section> | ||
41 | |||
42 | <section class="slide level2"> | ||
43 | <h1>Do you need to write Cloud Native apps to use cloud?</h1> | ||
44 | <h2 class='fragment'>no</h2> | ||
45 | </section> | ||
46 | |||
47 | <section class="slide level2"> | ||
48 | <h1>Are you a bad person if don't write Cloud Native apps?</h1> | ||
49 | <h2 class='fragment'>no</h2> | ||
50 | </section> | ||
51 | |||
52 | <section class="slide level2"> | ||
53 | <h1>What is Cloud Native?</h1> | ||
54 | </section> | ||
55 | |||
56 | <section class="slide level2"> | ||
57 | <p>Cloud-native applications are meant to function "in a world of cloud | ||
58 | computing that is ubiquitous and flexible." Applications can be | ||
59 | developed on a cloud platform, then deployed to different clouds where | ||
60 | supporting software stacks will help them run at scale.</p> | ||
61 | <p><em>Information Week - Jul 30, 2015</em></p> | ||
62 | </section> | ||
63 | |||
64 | <section class="slide level2"> | ||
65 | <p>The Cloud Native Computing Foundation will harmonize emerging | ||
66 | technologies and foster innovation in container packaged, dynamically | ||
67 | scheduled, and microservices based application development and | ||
68 | operations.</p> | ||
69 | </section> | ||
70 | |||
71 | <section class="slide level2"> | ||
72 | <h1>Cloud Native Is ... </h1> | ||
73 | <ul> | ||
74 | <li>Architectural and operational approach</li> | ||
75 | <li>Assume cloud</li> | ||
76 | <li>Assume failures</li> | ||
77 | <li>Microservices</li> | ||
78 | <li>Containerized?</li> | ||
79 | </ul> | ||
80 | </section> | ||
81 | |||
82 | <section class="slide level2"> | ||
83 | <img src="/images/Cloud-Native-Architecture.png" | ||
84 | alt="Pivotal Cloud Native Architecture" /> | ||
85 | </section> | ||
86 | |||
87 | <section class="slide level2"> | ||
88 | <h1>12 Factor Application</h1> | ||
89 | <h3>I. Codebase - One codebase tracked in revision control, many deploys</h3> | ||
90 | <h3>II. Dependencies - Explicitly declare and isolate dependencies</h3> | ||
91 | <h3>III. Config - Store config in the environment</h3> | ||
92 | <h3>IV. Backing services - Treat backing services as attached resources</h3> | ||
93 | <h3>V. Build, release, run - Strictly separate build and run stages</h3> | ||
94 | <h3>VI. Processes - Execute the app as one or more stateless processes</h3> | ||
95 | <h3>VII. Port binding - Export services via port binding</h3> | ||
96 | <h3>VIII. Concurrency - Scale out via the process model</h3> | ||
97 | <h3>IX. Disposability - Maximize robustness with fast startup and graceful shutdown</h3> | ||
98 | <h3>X. Dev/prod parity - Keep development and production as similar as possible</h3> | ||
99 | <h3>XI. Logs - Treat logs as event streams</h3> | ||
100 | <h3>XII. Admin processes - Run admin/management tasks as one-off processes</h3> | ||
101 | </ul> | ||
102 | </section> | ||
103 | |||
104 | <section class="slide level2" data-transition='zoom'> | ||
105 | <h1>This is awesome</h1> | ||
106 | </section> | ||
107 | |||
108 | <section class="slide level2" data-transition='zoom'> | ||
109 | <h1>Except for III</h1> | ||
110 | <h2>I use config files</h2> | ||
111 | </section> | ||
112 | |||
113 | <section class="slide level2" data-transition='zoom'> | ||
114 | <h1>VI. Stateless</h1> | ||
115 | <h2>If /dev/null is fast in web scale I will use it. Is it web scale?</h2> | ||
116 | <h3 class="fragment">Use a service to store your data - like a database</h3> | ||
117 | <h3 class="fragment">Is that database service web scale?</h3> | ||
118 | </section> | ||
119 | |||
120 | <section class="slide level2"> | ||
121 | <h1>Go google and watch "MongoDB is Web Scale"</h1> | ||
122 | </section> | ||
123 | |||
124 | <section class="slide level2"> | ||
125 | <h1>A Foolish Consistency is the Hobgoblin of Little Minds</h1> | ||
126 | </section> | ||
127 | |||
128 | <section class="slide level2"> | ||
129 | <h1>Cloud Native / 12 Factor is **A** great approach</h1> | ||
130 | <h2>You still have to think.</h2> | ||
131 | </section> | ||
132 | |||
133 | <section class="slide level2"> | ||
134 | <p>As an application developer,<br /> | ||
135 | I want to deploy and run an application on the internet | ||
136 | so that my customers all over the world can consume it.</p> | ||
137 | </section> | ||
138 | |||
139 | <section class="slide level2"> | ||
140 | <p>As an operator,<br /> | ||
141 | I want to deploy the application across multiple clouds | ||
142 | so that my service survives issues in any one of them.</p> | ||
143 | </section> | ||
144 | |||
145 | <section class="slide level2"> | ||
146 | <h1>THIS WORKS</h1> | ||
147 | <h3>I'm doing it myself as we speak</h3> | ||
148 | <img style="float:right; margin-right:24pt" src="/images/graphite.openstack.org.png"/> | ||
149 | <p class='fragment'>10-20k VMs per-day</p> | ||
150 | <p class='fragment'>10 Cloud Regions in 7 clouds</p> | ||
151 | <p class='fragment'>Only using OpenStack APIs</p> | ||
152 | </section> | ||
153 | |||
154 | <section id="openstack-infra" data-transition='zoom'> | ||
155 | <h1>OpenStack Infra</h1> | ||
156 | </section> | ||
157 | |||
158 | <section id="tooling-automation-and-ci-for-openstack-project" class="slide level2" data-transition='zoom'> | ||
159 | <h1>Tooling, Automation and CI for OpenStack Project</h1> | ||
160 | </section> | ||
161 | |||
162 | <section id="our-vms-are-everywhere" class="slide level2"> | ||
163 | <h1>Our VMs are everywhere</h1> | ||
164 | <ul> | ||
165 | <li>Rackspace: Dallas, Chicago, DC</li> | ||
166 | <li>Internap: New York</li> | ||
167 | <li>OpenStack Innovation Center: San Antonio</li> | ||
168 | <li>OVH: Strassbourg, Gravelines</li> | ||
169 | <li>Vexxhost: Montreal</li> | ||
170 | <li>Blue Box: San Jose</li> | ||
171 | <li>Red Hat: Phoenix</li> | ||
172 | </ul> | ||
173 | </section> | ||
174 | |||
175 | <section id="we-also-have-servers" class="slide level2"> | ||
176 | <h1>We also have servers</h1> | ||
177 | <h2>Infra Cloud - Hardware donated by HPE</h2> | ||
178 | </section> | ||
179 | |||
180 | <section id="architecture" class="slide level2"> | ||
181 | <h1>Architecture</h1> | ||
182 | <p><img src="/images/infra_architecture.jpg" alt="image" /></p> | ||
183 | </section> | ||
184 | |||
185 | <section class="slide level2"> | ||
186 | <h1>Gerrit</h1> | ||
187 | <ul> | ||
188 | <li class="fragment"> | ||
189 | Traditional 'Enterprise' Java Application</li> | ||
190 | <li class="fragment">Nova VM, Cinder Volume, Trove DB</li> | ||
191 | <li class="fragment">Scale out farm of git replicas</li> | ||
192 | </ul> | ||
193 | </section> | ||
194 | |||
195 | <section class="slide level2"> | ||
196 | <h1>nodepool</h1> | ||
197 | <ul> | ||
198 | <li class="fragment">Cloud Native</li> | ||
199 | <li class="fragment">Purpose built in Python</li> | ||
200 | <li class="fragment">Keeps a pool of ready to go nodes</li> | ||
201 | <li class="fragment">Multi-cloud</li> | ||
202 | <li class="fragment">Fully elastic - responds to demand</li> | ||
203 | </ul> | ||
204 | </section> | ||
205 | |||
206 | <section class="slide level2"> | ||
207 | <h1>Run what you want</h1> | ||
208 | <p class='fragment'>12-factor application on Kubernetes with Kuryr</p> | ||
209 | <p class='fragment'>Traditional Java web application behind NAT with a Floating IP</p> | ||
210 | <p class='fragment'>Kerberos Server on the Internet with Fixed IP and Reverse DNS </p> | ||
211 | <p class='fragment'>Baremetal for hardware enabled transcoding via Ironic</p> | ||
212 | </section> | ||
213 | |||
214 | <section class="slide level2"> | ||
215 | <img src="/images/Cloud-Native-Architecture.png" | ||
216 | alt="Pivotal Cloud Native Architecture" /> | ||
217 | </section> | ||
218 | |||
219 | <section class="slide level2"> | ||
220 | <h1>DevOps recognizes the need for Dev and Ops to collaborate</h1> | ||
221 | </section> | ||
222 | |||
223 | <section class="slide level2"> | ||
224 | <h1>Rigid devotion to any guidelines without judgement is deadly</h1> | ||
225 | </section> | ||
226 | |||
227 | </body> | ||
228 | </html> | ||
diff --git a/src/talks/who-cares.hbs b/src/talks/who-cares.hbs index f2675a4..fdc1d2d 100644 --- a/src/talks/who-cares.hbs +++ b/src/talks/who-cares.hbs | |||
@@ -63,7 +63,7 @@ | |||
63 | 63 | ||
64 | 64 | ||
65 | <p class='fragment'>10-20k VMs per-day</p> | 65 | <p class='fragment'>10-20k VMs per-day</p> |
66 | <p class='fragment'>3 (soon to be 6) clouds</p> | 66 | <p class='fragment'>10 Cloud Regions in 7 clouds</p> |
67 | <p class='fragment'>Only using OpenStack APIs</p> | 67 | <p class='fragment'>Only using OpenStack APIs</p> |
68 | 68 | ||
69 | </section> | 69 | </section> |
@@ -102,33 +102,30 @@ | |||
102 | <h1>18 Terabytes of Log Data in six months</h1> | 102 | <h1>18 Terabytes of Log Data in six months</h1> |
103 | </section> | 103 | </section> |
104 | 104 | ||
105 | <section id="we-have-no-servers" class="slide level2"> | ||
106 | <h1>We have no servers</h1> | ||
107 | <ul> | ||
108 | <li>Rackspace Public Cloud</li> | ||
109 | <li>HP Helion Public Cloud</li> | ||
110 | <li>TripleO Community Cloud hosted at RedHat</li> | ||
111 | </ul> | ||
112 | <span class='fragment'> | ||
113 | <p>Coming soon:</p> | ||
114 | <ul> | ||
115 | <li>OVH Public Cloud</li> | ||
116 | <li>Blue Box Dedicated Cloud on SoftLayer</li> | ||
117 | <li>Infra Cloud hosted at HP</li> | ||
118 | <li>IBM Public Cloud</li> | ||
119 | </ul> | ||
120 | </span> | ||
121 | </section> | ||
122 | |||
123 | <section id="our-vms-are-everywhere" class="slide level2"> | 105 | <section id="our-vms-are-everywhere" class="slide level2"> |
124 | <h1>Our VMs are everywhere</h1> | 106 | <h1>Our VMs are everywhere</h1> |
107 | <h3>Public Clouds</h3> | ||
125 | <ul> | 108 | <ul> |
126 | <li>HP: Las Vegas, DC</li> | ||
127 | <li>Rackspace: Dallas, Chicago, DC</li> | 109 | <li>Rackspace: Dallas, Chicago, DC</li> |
128 | <li>RedHat: Phoenix</li> | 110 | <li>Internap: New York</li> |
129 | <li>OVH: Strassbourg, Gravelines</li> | 111 | <li>OVH: Strassbourg, Gravelines</li> |
112 | <li>Vexxhost: Montreal</li> | ||
113 | <li>OpenStack Innovation Center: San Antonio</li> | ||
114 | </ul> | ||
115 | <h3>Private Clouds</h3> | ||
116 | <ul> | ||
130 | <li>Blue Box: San Jose</li> | 117 | <li>Blue Box: San Jose</li> |
131 | <li>IBM: Amsterdam, Dallas, Franfurt, Hong Kong, Houston, London, Montreal, Paris, Querétaro, San Jose, São Paulo, Seattle, Singapore, Sydney, Tokyo, Toronto, DC</li> | 118 | <li>Red Hat: Phoenix</li> |
119 | </ul> | ||
120 | </section> | ||
121 | |||
122 | <section id="we-also-have-servers" class="slide level2"> | ||
123 | <h1>We also have servers</h1> | ||
124 | <h2>Infra Cloud</h2> | ||
125 | <ul> | ||
126 | <li>Hardware donated by HPE: Houston</li> | ||
127 | <li>Community run cloud using OpenStack Puppet</li> | ||
128 | <li>Bare Metal managed with Bifrost/Ironic</li> | ||
132 | </ul> | 129 | </ul> |
133 | </section> | 130 | </section> |
134 | 131 | ||
@@ -182,6 +179,141 @@ | |||
182 | </section> | 179 | </section> |
183 | 180 | ||
184 | <section class="slide level2"> | 181 | <section class="slide level2"> |
182 | <h1>How do we do this?</h1> | ||
183 | </section> | ||
184 | |||
185 | <section class="slide level2"> | ||
186 | <h1>Control plane</h1> | ||
187 | <h3>http://git.openstack.org/cgit/openstack-infra/system-config</h3> | ||
188 | <ul> | ||
189 | <li>All server config management in git</li> | ||
190 | <li>Puppet manages the servers: puppet apply</li> | ||
191 | <li>Ansible runs puppet: ansible puppet module</li> | ||
192 | <li>Ansible OpenStack Dynamic Inventory</li> | ||
193 | <li>Only thing not public are keys and secrets</li> | ||
194 | </ul> | ||
195 | </section> | ||
196 | |||
197 | <section class="slide level2"> | ||
198 | <h1>os-client-config</h1> | ||
199 | <h3>http://git.openstack.org/cgit/openstack/os-client-config</h3> | ||
200 | <p>A library to handle config information for openstack clients</p> | ||
201 | <p>Tracks differences in vendors that can't be discovered</p> | ||
202 | <p>In use in python-openstackclient and ansible</p> | ||
203 | </section> | ||
204 | |||
205 | <section class="slide level2"> | ||
206 | <h1>os-client-config</h1> | ||
207 | <p>~/.config/openstack/clouds.yaml</p> | ||
208 | <pre> | ||
209 | clouds: | ||
210 | vexxhost: | ||
211 | profile: vexxhost | ||
212 | auth: | ||
213 | project_name: d8af8a8f-a573-48e6-898a-af333b970a2d | ||
214 | username: 0b8c435b-cc4d-4e05-8a47-a2ada0539af1 | ||
215 | password: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
216 | region_name: ca-ymq-1 | ||
217 | dreamcompute: | ||
218 | profile: dreamhost | ||
219 | auth: | ||
220 | username: montay6 | ||
221 | project_name: dhc2111978 | ||
222 | password: XXXXXXXXXXXXX | ||
223 | region_name: RegionOne | ||
224 | </pre> | ||
225 | </section> | ||
226 | |||
227 | <section class="slide level2"> | ||
228 | <h1>shade</h1> | ||
229 | <h3>http://git.openstack.org/cgit/openstack-infra/shade</h3> | ||
230 | <p>A library to wrap business logic around client libraries</p> | ||
231 | <pre> | ||
232 | cloud.create_image('image-name', filename='image-filename.qcow2') | ||
233 | cloud.create_server('my-server', image='immage-name', auto_ip=True) | ||
234 | </pre> | ||
235 | <p>In use in Infra Nodepool and ansible</p> | ||
236 | </section> | ||
237 | |||
238 | <section class="slide level2"> | ||
239 | <h1>ansible</h1> | ||
240 | <p>Brand new modules, based on shade</p> | ||
241 | <p>Part of 2.0 release</p> | ||
242 | <pre> | ||
243 | - os_keypair: | ||
244 | cloud: hp-mordred | ||
245 | name: mordred | ||
246 | public_key_file: ~/.ssh/id_rsa.pub | ||
247 | - os_image: | ||
248 | cloud: hp-mordred | ||
249 | name: Monty Ubuntu | ||
250 | file: ubuntu.vhd | ||
251 | - os_server: | ||
252 | cloud: hp-mordred | ||
253 | name: my-server | ||
254 | flavor_ram: 1024 | ||
255 | image: Monty Ubuntu | ||
256 | </pre> | ||
257 | </section> | ||
258 | |||
259 | <section class="slide level2"> | ||
260 | <h1>ansible</h1> | ||
261 | <p>multi-cloud support</p> | ||
262 | <pre> | ||
263 | - os_keypair: | ||
264 | cloud: "{{ item }" | ||
265 | name: mordred | ||
266 | public_key_file: ~/.ssh/id_rsa.pub | ||
267 | with-items: | ||
268 | - vexxhost | ||
269 | - rackspace | ||
270 | - ovh | ||
271 | </pre> | ||
272 | </section> | ||
273 | |||
274 | <section class="slide level2"> | ||
275 | <h1>Ansible Role Cloud Launcher</h1> | ||
276 | <h2>http://git.openstack.org/cgit/openstack/ansible-role-cloud-launcher</h2> | ||
277 | <pre> | ||
278 | profiles: | ||
279 | - name: admin-clouds | ||
280 | flavors: | ||
281 | - name: aoclcompany.xlarge | ||
282 | ram: 128 | ||
283 | vcpus: 1 | ||
284 | - name: ops | ||
285 | images: | ||
286 | - name: ubuntu-trusty | ||
287 | filename: /home/ubuntu/trusty-server-cloudimg-amd64-disk1.img | ||
288 | - name: bootstrap-keypair | ||
289 | keypairs: | ||
290 | - name: bootstrap-key | ||
291 | public_key_file: /home/ubuntu/.ssh/id_rsa.pub | ||
292 | clouds: | ||
293 | - name: awesomecloud | ||
294 | profiles: | ||
295 | - admin-clouds | ||
296 | - bootstrap-keypair | ||
297 | - name: yaycloud-ops | ||
298 | oscc_cloud: yaycloud-opsuser | ||
299 | profiles: | ||
300 | - bootstrap-keypair | ||
301 | - ops | ||
302 | </pre> | ||
303 | </section> | ||
304 | |||
305 | <section class="slide level2"> | ||
306 | <h1>nodepool</h1> | ||
307 | <ul> | ||
308 | <li>Use shade to treat all cloud regions as one giant cloud</li> | ||
309 | <li>diskimage-builder makes identical base images for each</li> | ||
310 | <li>Pre-cache network artifacts in disk images</li> | ||
311 | <li>glean instead of cloud-init to handle no-DHCP on Rackspace</li> | ||
312 | <li>Pre-spins warm pool - always keep min-ready number of nodes</li> | ||
313 | </ul> | ||
314 | </section> | ||
315 | |||
316 | <section class="slide level2"> | ||
185 | <h1>OpenStack Works!</h1> | 317 | <h1>OpenStack Works!</h1> |
186 | <p class='fragment'>Why should you care?</p> | 318 | <p class='fragment'>Why should you care?</p> |
187 | </section> | 319 | </section> |
@@ -218,7 +350,7 @@ | |||
218 | <li>Put it near your users</li> | 350 | <li>Put it near your users</li> |
219 | <li>Don't put it in an NSA data center</li> | 351 | <li>Don't put it in an NSA data center</li> |
220 | <li>Locality Requirements</li> | 352 | <li>Locality Requirements</li> |
221 | <li class='fragment'>What if you have customers in Suriname?</li> | 353 | <li class='fragment'>What if you have customers in Hungary?</li> |
222 | </ul> | 354 | </ul> |
223 | </section> | 355 | </section> |
224 | 356 | ||
@@ -273,17 +405,23 @@ | |||
273 | <p>CityCloud: Sweden, UK</p> | 405 | <p>CityCloud: Sweden, UK</p> |
274 | <p>Elastx: Sweden</p> | 406 | <p>Elastx: Sweden</p> |
275 | <p>Datacentred: UK</p> | 407 | <p>Datacentred: UK</p> |
276 | <p>Ultimum: Prague</p> | ||
277 | <p>Enter Cloud Suite: Italy, Germany, Frankfurt</p> | 408 | <p>Enter Cloud Suite: Italy, Germany, Frankfurt</p> |
278 | <p>Internap: Netherlands, US</p> | 409 | <p>Internap: Netherlands, US</p> |
279 | <p>Ultimum: Prague</p> | 410 | <p>Ultimum: Czech Republic</p> |
411 | <p>Zetta: Norway</p> | ||
412 | </section> | ||
413 | |||
414 | <section class="slide level2"> | ||
415 | <h1>Managed Private Cloud</h1> | ||
416 | <h2>Bluebox: an IBM Company</h2> | ||
417 | <ul> | ||
418 | <li>Blue Box Dedicated: In any Softlayer Data Center Worldwide</p> | ||
419 | <li>Blue Box Local: In your data center</p> | ||
280 | </section> | 420 | </section> |
281 | 421 | ||
282 | <section class="slide level2"> | 422 | <section class="slide level2"> |
283 | <h1>Global Reach</h1> | 423 | <h1>Private Cloud Distro</h1> |
284 | <p>Blue Box Dedicated: In every Softlayer Data Center Worldwide</p> | 424 | <h3>Not listing them - I can't possibly remember them all</h3> |
285 | <h3>Including right here in Amsterdam</h3> | ||
286 | <p>Blue Box Local: Same thing, but in your DC</p> | ||
287 | </section> | 425 | </section> |
288 | 426 | ||
289 | <section class="slide level2"> | 427 | <section class="slide level2"> |