diff options
Diffstat (limited to 'src/talks/global-interop.hbs')
-rw-r--r-- | src/talks/global-interop.hbs | 250 |
1 files changed, 77 insertions, 173 deletions
diff --git a/src/talks/global-interop.hbs b/src/talks/global-interop.hbs index 90f17c6..52de08f 100644 --- a/src/talks/global-interop.hbs +++ b/src/talks/global-interop.hbs | |||
@@ -45,11 +45,22 @@ | |||
45 | </section> | 45 | </section> |
46 | 46 | ||
47 | <section class="slide level2"> | 47 | <section class="slide level2"> |
48 | <p> | ||
49 | I want to write some new Cloud Native applications while continuing | ||
50 | to make use of my existing investments.</p> | ||
51 | </section> | ||
52 | |||
53 | <section class="slide level2"> | ||
54 | <p> | ||
55 | I need to move faster than before AND I need increased stability at | ||
56 | the same time.</p> | ||
57 | </section> | ||
58 | |||
59 | <section class="slide level2"> | ||
48 | <h1>THIS WORKS</h1> | 60 | <h1>THIS WORKS</h1> |
49 | <h3>I'm doing it myself as we speak</h3> | 61 | <h3>I'm doing it myself as we speak</h3> |
50 | <img style="float:right; margin-right:24pt" src="/images/graphite.openstack.org.png"/> | 62 | <img style="float:right; margin-right:24pt" src="/images/graphite.openstack.org.png"/> |
51 | 63 | ||
52 | |||
53 | <p class='fragment'>20k VMs per-day</p> | 64 | <p class='fragment'>20k VMs per-day</p> |
54 | <p class='fragment'>20 Cloud Regions in 9 clouds</p> | 65 | <p class='fragment'>20 Cloud Regions in 9 clouds</p> |
55 | <p class='fragment'>Only using OpenStack APIs</p> | 66 | <p class='fragment'>Only using OpenStack APIs</p> |
@@ -61,20 +72,27 @@ | |||
61 | </section> | 72 | </section> |
62 | 73 | ||
63 | <section id="tooling-automation-and-ci-for-openstack-project" class="slide level2" data-transition='zoom'> | 74 | <section id="tooling-automation-and-ci-for-openstack-project" class="slide level2" data-transition='zoom'> |
64 | <h1>Tooling, Automation and CI for OpenStack Project</h1> | 75 | <h1>Tooling and Automation for the development of OpenStack Project</h1> |
65 | </section> | 76 | </section> |
66 | 77 | ||
67 | <section id="developers" class="slide level2" data-transition='zoom'> | 78 | <section id="developers" class="slide level2" data-transition='zoom'> |
68 | <h1>2000 Developers</h1> | 79 | <h1>>2500 Developers</h1> |
69 | </section> | 80 | </section> |
70 | 81 | ||
71 | <section id="gated-commits" class="slide level2" data-transition='zoom'> | 82 | <section id="gated-commits" class="slide level2" data-transition='zoom'> |
72 | <h1>Gated Commits</h1> | 83 | <h1>Gated Changes</h1> |
73 | <p>Every commit is fully integration tested (twice) before landing</p> | 84 | <p>Every change goes through enforced automatic full integration testing |
85 | <em>(at least twice)</em> before landing</p> | ||
74 | </section> | 86 | </section> |
75 | 87 | ||
76 | <section id="each-test-runs-on-a-single-use-cloud-slave" class="slide level2" data-transition='zoom'> | 88 | <section id="integration-testing" class="slide level2" data-transition='zoom'> |
77 | <h1>Each Test Runs on a Single Use Cloud Slave</h1> | 89 | <h1>Integration Testing</h1> |
90 | <p>Install and run one or more clouds then validate that those clouds | ||
91 | work.</p> | ||
92 | </section> | ||
93 | |||
94 | <section id="each-test-runs-on-a-single-use-cloud-server" class="slide level2" data-transition='zoom'> | ||
95 | <h1>Each Test Job Runs on Single Use Cloud Servers</h1> | ||
78 | <p>This is that "cloud scale out" part</p> | 96 | <p>This is that "cloud scale out" part</p> |
79 | </section> | 97 | </section> |
80 | 98 | ||
@@ -82,8 +100,8 @@ | |||
82 | <h1>2 KJPH (kilo-jobs per hour)</h1> | 100 | <h1>2 KJPH (kilo-jobs per hour)</h1> |
83 | </section> | 101 | </section> |
84 | 102 | ||
85 | <section id="our-vms-are-everywhere" class="slide level2"> | 103 | <section id="our-cloud-servers-are-everywhere" class="slide level2"> |
86 | <h1>Our VMs are everywhere</h1> | 104 | <h1>Our Cloud Servers are everywhere</h1> |
87 | <h3>Public Clouds</h3> | 105 | <h3>Public Clouds</h3> |
88 | <ul> | 106 | <ul> |
89 | <li>Rackspace: Dallas, Chicago, DC</li> | 107 | <li>Rackspace: Dallas, Chicago, DC</li> |
@@ -115,9 +133,9 @@ | |||
115 | <section class="slide level2"> | 133 | <section class="slide level2"> |
116 | <h1>Gerrit</h1> | 134 | <h1>Gerrit</h1> |
117 | <ul> | 135 | <ul> |
118 | <li class="fragment"> | 136 | <li class="fragment">Code Review and Code Hosting</li> |
119 | Traditional 'Enterprise' Java Application</li> | 137 | <li class="fragment">Traditional 'Enterprise' Java Application</li> |
120 | <li class="fragment">Single Nova VM, Cinder Volume</li> | 138 | <li class="fragment">Single OpenStack Nova VM, Cinder Volume</li> |
121 | <li class="fragment">Scale out farm of git replicas</li> | 139 | <li class="fragment">Scale out farm of git replicas</li> |
122 | </ul> | 140 | </ul> |
123 | </section> | 141 | </section> |
@@ -125,9 +143,8 @@ | |||
125 | <section class="slide level2"> | 143 | <section class="slide level2"> |
126 | <h1>nodepool</h1> | 144 | <h1>nodepool</h1> |
127 | <ul> | 145 | <ul> |
128 | <li class="fragment">Cloud Native</li> | 146 | <li class="fragment">Cloud Native resource manager</li> |
129 | <li class="fragment"> | 147 | <li class="fragment">Purpose built in Python</li> |
130 | Purpose built in Python</li> | ||
131 | <li class="fragment">Keeps a pool of ready to go nodes</li> | 148 | <li class="fragment">Keeps a pool of ready to go nodes</li> |
132 | <li class="fragment">Multi-cloud</li> | 149 | <li class="fragment">Multi-cloud</li> |
133 | <li class="fragment">Fully elastic - responds to demand</li> | 150 | <li class="fragment">Fully elastic - responds to demand</li> |
@@ -135,129 +152,22 @@ | |||
135 | </section> | 152 | </section> |
136 | 153 | ||
137 | <section class="slide level2"> | 154 | <section class="slide level2"> |
138 | <h1>How do we do this?</h1> | 155 | <h1>zuul</h1> |
139 | </section> | ||
140 | |||
141 | <section class="slide level2"> | ||
142 | <h1>Control plane</h1> | ||
143 | <h3>http://git.openstack.org/cgit/openstack-infra/system-config</h3> | ||
144 | <ul> | ||
145 | <li>All server config management in git</li> | ||
146 | <li>Puppet manages the servers: puppet apply</li> | ||
147 | <li>Ansible runs puppet: ansible puppet module</li> | ||
148 | <li>Ansible OpenStack Dynamic Inventory</li> | ||
149 | <li>Only thing not public are keys and secrets</li> | ||
150 | </ul> | ||
151 | </section> | ||
152 | |||
153 | <section class="slide level2"> | ||
154 | <h1>os-client-config</h1> | ||
155 | <h3>http://git.openstack.org/cgit/openstack/os-client-config</h3> | ||
156 | <h3>https://docs.openstack.org/os-client-config/latest/</h3> | ||
157 | <p>A library to handle config information for openstack clients</p> | ||
158 | <p>Tracks differences in vendors that can't be discovered</p> | ||
159 | <p>In use in python-openstackclient, shade and ansible</p> | ||
160 | <h3 class='fragment'>https://docs.openstack.org/os-client-config/latest/user/vendor-support.html</h3> | ||
161 | </section> | ||
162 | |||
163 | <section class="slide level2"> | ||
164 | <h1>os-client-config</h1> | ||
165 | <p>~/.config/openstack/clouds.yaml</p> | ||
166 | <pre> | ||
167 | clouds: | ||
168 | citycloud: | ||
169 | profile: citycloud | ||
170 | auth: | ||
171 | username: mordred | ||
172 | password: XXXXXXXXXXXXXXXXXXXXX | ||
173 | project_id: 65222a4d09ea4c68934fa1028c77f394 | ||
174 | user_domain_id: d0919bd5e8d74e49adf0e145807ffc38 | ||
175 | project_domain_id: d0919bd5e8d74e49adf0e145807ffc38 | ||
176 | regions: | ||
177 | - Kna1 | ||
178 | - Sto2 | ||
179 | - Lon1 | ||
180 | dreamcompute: | ||
181 | profile: dreamhost | ||
182 | auth: | ||
183 | username: montay6 | ||
184 | project_name: dhc2111978 | ||
185 | password: XXXXXXXXXXXXX | ||
186 | region_name: RegionOne | ||
187 | </pre> | ||
188 | </section> | ||
189 | |||
190 | <section class="slide level2"> | ||
191 | <h1>shade</h1> | ||
192 | <h3>http://git.openstack.org/cgit/openstack-infra/shade</h3> | ||
193 | <p>A library to wrap business logic around client libraries</p> | ||
194 | <pre> | ||
195 | cloud.create_image('image-name', filename='image-filename.qcow2') | ||
196 | cloud.create_server('my-server', image='immage-name', auto_ip=True) | ||
197 | </pre> | ||
198 | <p>In use in Infra Nodepool and ansible</p> | ||
199 | </section> | ||
200 | |||
201 | <section class="slide level2"> | ||
202 | <h1>ansible</h1> | ||
203 | <p>Based on shade</p> | ||
204 | <pre> | ||
205 | - os_keypair: | ||
206 | cloud: citycloud | ||
207 | name: mordred | ||
208 | public_key_file: ~/.ssh/id_rsa.pub | ||
209 | - os_image: | ||
210 | cloud: citycloud | ||
211 | name: Monty Ubuntu | ||
212 | file: ubuntu.vhd | ||
213 | - os_server: | ||
214 | cloud: citycloud | ||
215 | name: my-server | ||
216 | flavor_ram: 1024 | ||
217 | image: Monty Ubuntu | ||
218 | </pre> | ||
219 | </section> | ||
220 | |||
221 | <section class="slide level2"> | ||
222 | <h1>ansible</h1> | ||
223 | <h2>Add my keypair to 12 clouds<h2> | ||
224 | <pre><code> | ||
225 | - os_keypair: | ||
226 | cloud: "{{ item.cloud }}" | ||
227 | region_name: "{{ item.region_name }}" | ||
228 | name: mordred | ||
229 | public_key_file: ~/.ssh/id_rsa.pub | ||
230 | with-items: | ||
231 | - {cloud: vexxhost, region_name: ca-ymq-1} | ||
232 | - {cloud: ovh, region_name: GRA1} | ||
233 | - {cloud: ustack, region_name: bj1} | ||
234 | - {cloud: citycloud, region_name: Sto2} | ||
235 | - {cloud: internap, region_name: sin01} | ||
236 | - {cloud: fuga, region_name: cystack} | ||
237 | - {cloud: datacentred, region_name: sal01} | ||
238 | - {cloud: rax, region_name: SYD} | ||
239 | - {cloud: clouda, region_name: regionOne} | ||
240 | - {cloud: auro, region_name: van1} | ||
241 | - {cloud: zetta, region_name: no-osl1} | ||
242 | - {cloud: kiss, region_name: region1} | ||
243 | </code></pre> | ||
244 | </section> | ||
245 | |||
246 | <section class="slide level2"> | ||
247 | <h1>nodepool</h1> | ||
248 | <ul> | 156 | <ul> |
249 | <li>Use shade to treat all cloud regions as one giant cloud</li> | 157 | <li>"Test it like you deploy it"</li> |
250 | <li>diskimage-builder makes identical base images for each</li> | 158 | <li>The Gatekeeper</li> |
251 | <li>Pre-cache network artifacts in disk images</li> | 159 | <li class="fragment">Microservices but with a centralized scheduler</li> |
252 | <li>glean instead of cloud-init to handle no-DHCP on Rackspace</li> | 160 | <li class="fragment">Responds to code review events from Gerrit</li> |
253 | <li>Pre-spins warm pool - always keep min-ready number of nodes</li> | 161 | <li class="fragment">Runs Ansible content on nodes from nodepool</li> |
162 | <li class="fragment">Use production Ansible to test proposed changes</li> | ||
163 | <small>Talk about Zuul Tomorrow 15:50-16:15 on stage OP5</small> | ||
254 | </ul> | 164 | </ul> |
255 | </section> | 165 | </section> |
256 | 166 | ||
257 | <section class="slide level2"> | 167 | <section class="slide level2"> |
258 | <h1>OpenStack Works!</h1> | 168 | <h1>OpenStack Works!</h1> |
259 | <p class='fragment'>Why should you care?</p> | 169 | <p class='fragment'>Why should you care?</p> |
260 | <p class='fragment'>Is interop really important?</p> | 170 | <p class='fragment'>Is interoperability really important?</p> |
261 | </section> | 171 | </section> |
262 | 172 | ||
263 | <section class="slide level2"> | 173 | <section class="slide level2"> |
@@ -270,30 +180,25 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
270 | <section class="slide level2"> | 180 | <section class="slide level2"> |
271 | <h1>Run it where you want</h1> | 181 | <h1>Run it where you want</h1> |
272 | <ul> | 182 | <ul> |
273 | <li>Geography</li> | ||
274 | <li>Delivery Model</li> | ||
275 | </ul> | ||
276 | |||
277 | </section> | ||
278 | |||
279 | <section class="slide level2"> | ||
280 | <h1>Geography</h1> | ||
281 | <ul> | ||
282 | <li>Put it near your users</li> | 183 | <li>Put it near your users</li> |
283 | <li>Don't put it in an US data center</li> | 184 | <li>Avoid putting it in an US data center</li> |
284 | <li>Locality Requirements</li> | 185 | <li>Locality Requirements</li> |
285 | <li class='fragment'>What if you have customers in China?</li> | 186 | <li class='fragment'>What if you have customers in China?</li> |
286 | <li class='fragment'>What if you also have customers in Sweden?</li> | 187 | <li class='fragment'>What if you also have customers in Sweden? |
188 | <span class='fragment'>New Zealand?</span> | ||
189 | <span class='fragment'>Brazil?</span> | ||
190 | </li> | ||
287 | </ul> | 191 | </ul> |
288 | </section> | 192 | </section> |
289 | 193 | ||
290 | <section class="slide level2"> | 194 | <section class="slide level2"> |
291 | <h1>Delivery Model</h1> | 195 | <h1>Run it how you want</h1> |
292 | <ul> | 196 | <ul> |
293 | <li>Public</li> | 197 | <li>Public</li> |
294 | <li>Hosted Private</li> | 198 | <li>Hosted Private</li> |
295 | <li>Managed Private On-Premise</li> | 199 | <li>Managed Private On-Premise</li> |
296 | <li>Run your own</li> | 200 | <li>Run your own with a partner/vendor</li> |
201 | <li>Run your own on your own</li> | ||
297 | </ul> | 202 | </ul> |
298 | </section> | 203 | </section> |
299 | 204 | ||
@@ -312,7 +217,7 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
312 | 217 | ||
313 | <section class="slide level2" data-transition='zoom'> | 218 | <section class="slide level2" data-transition='zoom'> |
314 | <h1>Anybody <em>REALLY</em> think that should run in a | 219 | <h1>Anybody <em>REALLY</em> think that should run in a |
315 | Public Cloud owned by a US company?</h1> | 220 | Public Cloud owned and operated by a US company?</h1> |
316 | </section> | 221 | </section> |
317 | 222 | ||
318 | <section class="slide level2" data-transition='zoom'> | 223 | <section class="slide level2" data-transition='zoom'> |
@@ -328,34 +233,21 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
328 | </section> | 233 | </section> |
329 | 234 | ||
330 | <section class="slide level2"> | 235 | <section class="slide level2"> |
331 | <h1>Chinese OpenStack</h1> | 236 | <h1>OpenStack in Asia</h1> |
332 | <h2>Huawei</h2> | 237 | <h2>Huawei: First Chinese Platinum Member of OpenStack Foundation</h2> |
333 | <div class='fragment'><p><small>sorted alphabetically</small></p> | 238 | <p class='fragment'> |
334 | <p>99 Cloud</p> | 239 | Only 8 of the 24 Gold Member Companies are non-Asian</p> |
335 | <p>China Mobile</p> | ||
336 | <p>China National Offshore Oil Corp</p> | ||
337 | <p>China Telecom</p> | ||
338 | <p>China Unicom</p> | ||
339 | <p>EasyStack</p> | ||
340 | <p>Inspur</p> | ||
341 | <p>Sinorail</p> | ||
342 | <p>State Grid of China</p> | ||
343 | <p>T2 Cloud</p> | ||
344 | <p>Tencent</p> | ||
345 | <p>UMCloud</p> | ||
346 | <p>UnitedStack</p> | ||
347 | <p>ZTE</p> | ||
348 | </section> | 240 | </section> |
349 | 241 | ||
350 | <section class="slide level2"> | 242 | <section class="slide level2"> |
351 | <h1>European Public OpenStack</h1> | 243 | <h1>European OpenStack Public Clouds</h1> |
352 | <p>CityCloud: Sweden, UK, US</p> | 244 | <p>CityCloud: Sweden, UK, US</p> |
353 | <p>Datacentred: UK</p> | 245 | <p>Datacentred: UK</p> |
354 | <p>Elastx: Sweden</p> | 246 | <p>Elastx: Sweden</p> |
355 | <p>Enter Cloud Suite: Italy, Germany</p> | 247 | <p>Enter Cloud Suite: Italy, Germany</p> |
356 | <p>Fugo: Netherlands</p> | 248 | <p>Fugo: Netherlands</p> |
357 | <p>Internap: Netherlands, US, Singapore</p> | 249 | <p>Internap: Netherlands, US, Singapore</p> |
358 | <p>OTC: Frankfurt</p> | 250 | <p>OTC: Germany</p> |
359 | <p>OVH: France, US</p> | 251 | <p>OVH: France, US</p> |
360 | <p>Switch: Switzerland</p> | 252 | <p>Switch: Switzerland</p> |
361 | <p>Ultimum: Czech Republic</p> | 253 | <p>Ultimum: Czech Republic</p> |
@@ -364,13 +256,15 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
364 | </section> | 256 | </section> |
365 | 257 | ||
366 | <section class="slide level2"> | 258 | <section class="slide level2"> |
367 | <h1>Other Public OpenStack</h1> | 259 | <h1>Other Public OpenStack Clouds</h1> |
260 | <p><small>That I personally have an account on</small></p> | ||
368 | <p>Auro: Vancouver</p> | 261 | <p>Auro: Vancouver</p> |
369 | <p>Catalyst: New Zealand</p> | 262 | <p>Catalyst: New Zealand</p> |
370 | <p>Conoha: Japan, Singapore, US</p> | 263 | <p>Conoha: Japan, Singapore, US</p> |
371 | <p>Dreamhost: US</p> | 264 | <p>Dreamhost: US</p> |
372 | <p>Ormuco: Canada + Federated</p> | 265 | <p>Ormuco: Canada, Federated Worldwide</p> |
373 | <p>Vexxhost: Canada</p> | 266 | <p>Vexxhost: Canada</p> |
267 | <p>UnitedStack: China</p> | ||
374 | </section> | 268 | </section> |
375 | 269 | ||
376 | <section class="slide level2"> | 270 | <section class="slide level2"> |
@@ -379,13 +273,11 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
379 | 273 | ||
380 | <section class="slide level2"> | 274 | <section class="slide level2"> |
381 | <h1>The OpenStack Project Believes all Participants are Equal</h1> | 275 | <h1>The OpenStack Project Believes all Participants are Equal</h1> |
382 | <p class='fragment'>Constant work in progress, help us when we get this | ||
383 | wrong</p> | ||
384 | </section> | 276 | </section> |
385 | 277 | ||
386 | <section class="slide level2"> | 278 | <section class="slide level2"> |
387 | <h1><em>We</em> aren't going to remove something <em>you</em> need...</h1> | 279 | <h1><em>OpenStack</em> isn't going to remove something <em>you</em> need...</h1> |
388 | <p class='fragment'>because we <em>ARE</em> you.</p> | 280 | <p class='fragment'>because OpenStack <em>IS</em> you.</p> |
389 | </section> | 281 | </section> |
390 | 282 | ||
391 | <section class="slide level2"> | 283 | <section class="slide level2"> |
@@ -419,10 +311,22 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
419 | <h1>It's all about the tools</h1> | 311 | <h1>It's all about the tools</h1> |
420 | <ul> | 312 | <ul> |
421 | <li>Ansible</li> | 313 | <li>Ansible</li> |
314 | <li>OpenShift</li> | ||
422 | <li>Terraform</li> | 315 | <li>Terraform</li> |
423 | <li>Spinnaker</li> | 316 | <li>Spinnaker</li> |
424 | <li>Zuul<small class='fragment'> -- v3 is almost out and will blow your mind</small></li> | 317 | <li>Zuul</li> |
318 | </ul> | ||
319 | </section> | ||
320 | |||
321 | <section class="slide level2"> | ||
322 | <h1>Ansible OpenStack Modules</h1> | ||
323 | <ul> | ||
324 | <li>Based on the API consumption code from nodepool: "shade"</li> | ||
325 | <li>Support all of the known OpenStack Public Clouds</li> | ||
326 | <li>Interoperable == you can use them with your cloud</li> | ||
327 | <li class='fragment'>Maintained by me</li> | ||
425 | </ul> | 328 | </ul> |
329 | <small class='fragment'>Talk about Ansible and OpenStack Today 16:00 - 17:00</small> | ||
426 | </section> | 330 | </section> |
427 | 331 | ||
428 | <section class="slide level2"> | 332 | <section class="slide level2"> |
@@ -442,8 +346,8 @@ cloud.create_server('my-server', image='immage-name', auto_ip=True) | |||
442 | </section> | 346 | </section> |
443 | 347 | ||
444 | <section class="slide level2"> | 348 | <section class="slide level2"> |
445 | <h1>China, and the rest of our Global Community, understands the power | 349 | <h1>China understands the power of Open Collaboration on |
446 | of Open Collaboration on shared problems.</h1> | 350 | shared problems.</h1> |
447 | </section> | 351 | </section> |
448 | 352 | ||
449 | <section class="slide level2"> | 353 | <section class="slide level2"> |