Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deployments

Avatar for Matt Tyler Matt Tyler
September 15, 2017

 Deployments

One teams war on flaky and slow deployments on OpenStack

Avatar for Matt Tyler

Matt Tyler

September 15, 2017

More Decks by Matt Tyler

Other Decks in Technology

Transcript

  1. About Me • Member of Configuration Automation Team in DEA

    • I’m usually work on building and managing stateful systems (ELK, KeyValueApi/ETCD) on OpenStack • I have held a number of roles (Sysadmin, Developer, Reliability Engineer, System Analyst, Senior Developer) mainly in mining and transport systems • ‘Full(er) Stack’ - I’ve worked in embedded systems, CI/CD, frontend web, backend, and cloud. • Sporadic Open Source Developer
  2. Goals • Introduce the latest version of the deployment pipeline

    on OpenStack to a wider audience. • Understand the decisions that influenced the design and why they were made. • Frame this design in the wider context of cloud applications
  3. Deploy (verb) 1. Move (troops or equipment) into position for

    military action. 2. Bring into effective action.
  4. What makes a good deploy? • Simple • Light on

    details; do not expose infrastructure! • Little human intervention required • Automatic Testing • Fast • Assumes that failure is an option
  5. Report Card • Simple • Light on details; do not

    expose infrastructure! • Little human intervention required • Automatic Testing • Fast • Assumes that failure is an option Fail Fail Pass Pass Fail Fail
  6. Immutable Infrastructure Build Live S1 S1 S1 + Δ =

    S2 S2 Build Live S1 S1 Δ S2 Shared vs Bundled, Dynamic vs Static
  7. A solution Preconfigured Base Image = SoE + Patches +

    OpenStack Configuration Platform Images = Preconfigured Base Image + Framework (.NET or JRE) Platform Image App v1 App v2
  8. OS Deploy Get-Clouds Init-Deployment New-Deployment Move-DeploymentLive Remove-Deployment Output "clouds": [

    { "Name": "cloud1", "Code": "A", "KeystoneUrl": ... }, { "Name": "cloud2", ... }, ] "deployments": [ { "Cloud": "A", "ApplicationId": "KeyValueApi", "Environment": "test", "Release": "1.0.57", "RandomId": "a76eop", "StackName": …” "Keystone": { ... } }, … "deployments": [ { "Status": "CREATE_COMPLETE", "Cloud": "A", "ApplicationId": "KeyValueApi", "Environment": "test", "Release": "1.0.57", "RandomId": "a76eop", "StackName": ... "Keystone": { ... } }, ... Wrap Update-DeploymentPools { "A": { "prelive": { "admin_state_up": false }, "live": { "admin_state_up": true } }, "B": { ... } } Heat Calls Get-Keystone Create-Stack Get-Stack Get-StackResources Get-StackResources Remove-Stack Neutron Calls Update-Member
  9. Results • Applications deployed ~ 7x Faster • Application deploys

    are less likely to fail • Operating System concerns can potentially be abstracted away from teams managing and operating their applications • Moved much closer to a PaaS model
  10. On OpenStack • Our version of OpenStack is ancient ◦

    Many new API’s have been published ◦ Many additions to existing APIs have been made ◦ There are many bugs that have been fixed that have not been backported • Internal processes never adapted to the realities of running a cloud ◦ Who pays? Project-based model does not work for shared services ◦ Learning to operate a cloud platform whilst building cloud applications on it was always going to be a tall order - particularly at an IaaS level Poor Utilization (VM) + No (real) Elasticity
  11. Report Card • Simple • Light on details; do not

    expose infrastructure! • Little human intervention required • Automatic Testing • Fast • Assumes that failure is an option Pass Pass Pass Pass Pass Pass