Extending




 for Fun and Profit

Tim Smith – Co-founder, Gridcentric
A bit about me
   Co-founder & President of Gridcentric
   10+ years hacking embedded/RTOS,
    storage, networks, and virtualization
   Last 3+ years directing engineering at
    Gridcentric
This talk




            Your innovation
Gridcentric VMS
   Delayed “fork()” for virtual machines:
       Take snapshot of running (fully configured) VM (bless)
       Spin up replica instances quickly and efficiently (launch)
       Re-use common memory pages between replicas
Extending Nova
   Nova is a framework, providing:
       A standardized API
       Messaging / RPC
       Database-backed ORM

   Nova can be extended by writing new:
       API extensions
       Custom “services”
       Nova CLI extensions
       Dashboard extensions
Nova API extensions
   Main module: nova.api.openstack.extensions
   Can:
     Add new resources
     Add new properties to existing resources
     Add new actions to existing resources

   Cannot:
     Replace   / hook around existing actions
GC API extension
   Add new server actions:
       gc_bless – create state snapshot of running
        instance
     gc_launch – launch new VM from state snapshot
     gc_discard – discard state snapshot



   Add new resource:
       gcservers – list VMS-capable compute hosts
Creating a new service
   Custom services can:
     Make RPCs to other Nova components
     Receive RPCs from Api server

     Access/modify the Nova data store
The nova-gc service
   Accepts RPCs from GC API extension
     For   bless, launch, discard, etc
   Uses Nova ORM to CRUD server objects
   Interfaces to Gridcentric proprietary code to do
    heavy lifting
Extending the nova client
   New actions can be surfaced to the nova CLI
    client
     Need to be explicitly added via client extensions
     Extensions can be PIP-installable, etc



   GC client extension
     Adds   bless, launch, discard, etc to nova CLI client
Extending the dashboard
   Horizon is a Django application
   New views/panes/etc can be added as
    “Django installed applications”
   Horizon and extensions use the nova client
    programmatically to access nova services.
     Ergo,you also need to write a client extension
     and install it where Horizon is running
Extending the dashboard
Technical challenges
   Some parts of nova not 100% “extension ready”
     E.g. some built-in schedulers don’t route messages to
      custom services
     IP tables rules need to be created through compute
      service, but no interface exists for that
   Service framework makes assumptions w.r.t.
    execution
   Different distributions do things differently
       E.g. paths, nova user, libvirt / qemu user
Business challenges
   Openstack is evolving extremely quickly
     Users/developers/vendors/operators are not always
      synced up on the same release.
     The answer to a lot of issues is “wait for the next
      release”.

   The Openstack market is still early
     Operators haven’t quite nailed down their
      requirements/differentiation/solution set
     Lots of fragmentation = lots of confusion
Further reading
   Rackspace Extensions API intro:
    http://docs.rackspace.com/openstack-extensions/apix-intro
   Rackspace Extensions (good examples!):
    http://docs.rackspace.com/openstack-extensions/
   Gridcentric VMS extension: https://github.com/gridcentric/openstack
   Service architecture intro:
    http://docs.openstack.org/developer/nova/service.architecture.html
   Extending Horizon (dashboard):
    http://docs.openstack.org/developer/horizon/topics/tutorial.html
   Standard OpenStack API and extensions: http://api.openstack.org/
Thank you!
Email: tsmith@gridcentric.com
Link me in: https://www.linkedin.com/in/tsmithgc

Extending OpenStack for Fun and Profit

  • 1.
    Extending for Funand Profit Tim Smith – Co-founder, Gridcentric
  • 2.
    A bit aboutme  Co-founder & President of Gridcentric  10+ years hacking embedded/RTOS, storage, networks, and virtualization  Last 3+ years directing engineering at Gridcentric
  • 3.
    This talk Your innovation
  • 4.
    Gridcentric VMS  Delayed “fork()” for virtual machines:  Take snapshot of running (fully configured) VM (bless)  Spin up replica instances quickly and efficiently (launch)  Re-use common memory pages between replicas
  • 5.
    Extending Nova  Nova is a framework, providing:  A standardized API  Messaging / RPC  Database-backed ORM  Nova can be extended by writing new:  API extensions  Custom “services”  Nova CLI extensions  Dashboard extensions
  • 6.
    Nova API extensions  Main module: nova.api.openstack.extensions  Can:  Add new resources  Add new properties to existing resources  Add new actions to existing resources  Cannot:  Replace / hook around existing actions
  • 7.
    GC API extension  Add new server actions:  gc_bless – create state snapshot of running instance  gc_launch – launch new VM from state snapshot  gc_discard – discard state snapshot  Add new resource:  gcservers – list VMS-capable compute hosts
  • 8.
    Creating a newservice  Custom services can:  Make RPCs to other Nova components  Receive RPCs from Api server  Access/modify the Nova data store
  • 9.
    The nova-gc service  Accepts RPCs from GC API extension  For bless, launch, discard, etc  Uses Nova ORM to CRUD server objects  Interfaces to Gridcentric proprietary code to do heavy lifting
  • 10.
    Extending the novaclient  New actions can be surfaced to the nova CLI client  Need to be explicitly added via client extensions  Extensions can be PIP-installable, etc  GC client extension  Adds bless, launch, discard, etc to nova CLI client
  • 11.
    Extending the dashboard  Horizon is a Django application  New views/panes/etc can be added as “Django installed applications”  Horizon and extensions use the nova client programmatically to access nova services.  Ergo,you also need to write a client extension and install it where Horizon is running
  • 12.
  • 13.
    Technical challenges  Some parts of nova not 100% “extension ready”  E.g. some built-in schedulers don’t route messages to custom services  IP tables rules need to be created through compute service, but no interface exists for that  Service framework makes assumptions w.r.t. execution  Different distributions do things differently  E.g. paths, nova user, libvirt / qemu user
  • 14.
    Business challenges  Openstack is evolving extremely quickly  Users/developers/vendors/operators are not always synced up on the same release.  The answer to a lot of issues is “wait for the next release”.  The Openstack market is still early  Operators haven’t quite nailed down their requirements/differentiation/solution set  Lots of fragmentation = lots of confusion
  • 15.
    Further reading  Rackspace Extensions API intro: http://docs.rackspace.com/openstack-extensions/apix-intro  Rackspace Extensions (good examples!): http://docs.rackspace.com/openstack-extensions/  Gridcentric VMS extension: https://github.com/gridcentric/openstack  Service architecture intro: http://docs.openstack.org/developer/nova/service.architecture.html  Extending Horizon (dashboard): http://docs.openstack.org/developer/horizon/topics/tutorial.html  Standard OpenStack API and extensions: http://api.openstack.org/
  • 16.
    Thank you! Email: tsmith@gridcentric.com Linkme in: https://www.linkedin.com/in/tsmithgc