51
CloudStack and jclouds Andrew Bayer @abayer Saturday, December 1, 2012

CloudStack, jclouds, Jenkins and CloudCat

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: CloudStack, jclouds, Jenkins and CloudCat

CloudStack and jcloudsAndrew Bayer

@abayer

Saturday, December 1, 2012

Page 2: CloudStack, jclouds, Jenkins and CloudCat

What is jclouds?

• Portable Java API for many cloud APIs and providers

• Compute and Blobstore

• Lower-level Java API for cloud-specific APIs as well

• Usable with any JVM language

Saturday, December 1, 2012

Page 3: CloudStack, jclouds, Jenkins and CloudCat

CloudStack and jclouds

• CloudStack is supported by jclouds

• 2.x and 3.x tested regularly

• 4.x hasn’t been tested much yet, but minimal API changes from 3.x

Saturday, December 1, 2012

Page 4: CloudStack, jclouds, Jenkins and CloudCat

Standard jclouds API and CloudStack

• CloudStack support for jcloud standard API:

• Instance creation/management

• Listing available “hardware” (service offerings), “images” (templates)

• Security groups

Saturday, December 1, 2012

Page 5: CloudStack, jclouds, Jenkins and CloudCat

Lower-level CloudStack API with jclouds

• Pretty much everything the CloudStack API can do is implemented in jclouds

• Administration tasks

• Template creation

• User management

• Much, much more

Saturday, December 1, 2012

Page 6: CloudStack, jclouds, Jenkins and CloudCat

What can you do with jclouds and CloudStack?

Saturday, December 1, 2012

Page 7: CloudStack, jclouds, Jenkins and CloudCat

A lot.Here are some

examples.

Saturday, December 1, 2012

Page 8: CloudStack, jclouds, Jenkins and CloudCat

jclouds Jenkins plugin

• Dynamically provision Jenkins build slaves from CloudStack (or any other supported cloud)

• Much like the Jenkins ec2 plugin, but more features and obviously more clouds

Saturday, December 1, 2012

Page 9: CloudStack, jclouds, Jenkins and CloudCat

How the Jenkins plugin works

• Uses standard jclouds API for instance creation and destruction

• Allows you to choose “image” or OS family/version, and “hardware” (from list of available) or minimum CPU/RAM

• Uses underlying clouds’ APIs to find the right image/hardware for the given input

Saturday, December 1, 2012

Page 10: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 11: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 12: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 13: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 14: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 15: CloudStack, jclouds, Jenkins and CloudCat

Single use slave

• The single use slave option lets you use a slave once and only once

• Slave is marked offline after job completes, guaranteeing the next time that job runs, it gets a fresh slave

Saturday, December 1, 2012

Page 16: CloudStack, jclouds, Jenkins and CloudCat

Jenkins Instance Creation

• Create instances at beginning of build, tear down instances at end of build

• Use clouds and templates available as slaves

• Exposes IPs of instances to build steps

• Useful for testing clusters, etc

Saturday, December 1, 2012

Page 17: CloudStack, jclouds, Jenkins and CloudCat

Building an app using CloudStack and jclouds

Saturday, December 1, 2012

Page 18: CloudStack, jclouds, Jenkins and CloudCat

CloudCat

• Open source, Grails-based reporting and provisioning application for CloudStack

• github.com/abayer/cloudcat

Saturday, December 1, 2012

Page 19: CloudStack, jclouds, Jenkins and CloudCat

Using Lower-Level API

• CloudStack admin information (accounts, hosts, etc) not available through jclouds standard API

• So we’ve got to use the CloudStack API itself - which we can do through jclouds!

• Same jclouds connection whether using standard API or CloudStack-specific

Saturday, December 1, 2012

Page 20: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 21: CloudStack, jclouds, Jenkins and CloudCat

Mapping CloudStack Data

• jclouds has objects for data from CloudStack API

• VirtualMachine, Template, ServiceOffering, etc

• In CloudCat, we map those objects to Grails domain classes

Saturday, December 1, 2012

Page 22: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 23: CloudStack, jclouds, Jenkins and CloudCat

Importing CloudStack data into Grails

• Run API commands as admin

• Persist results into database once an hour, rather than querying API live

• Pull credentials and endpoint from config domain object

• Use jclouds’ *Clients to get lists of hosts, templates, service offerings, instances

Saturday, December 1, 2012

Page 24: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 25: CloudStack, jclouds, Jenkins and CloudCat

Associating templates, instances, etc

• We want to know how instances, templates, service offerings and hosts are related

• We want to keep historical information on instances, and know what instances were still existent the last time we got reported data

Saturday, December 1, 2012

Page 26: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 27: CloudStack, jclouds, Jenkins and CloudCat

Alert Notification

• Email notification when CloudStack has problems - not available in CloudStack itself, so far as I can tell.

• Events and alerts are available from the API - check periodically for new alerts, send email when new ones are seen.

Saturday, December 1, 2012

Page 28: CloudStack, jclouds, Jenkins and CloudCat

Saturday, December 1, 2012

Page 29: CloudStack, jclouds, Jenkins and CloudCat

Alert Email ContentSaturday, December 1, 2012

Page 30: CloudStack, jclouds, Jenkins and CloudCat

Provisioning through CloudCat

• CloudStack UI for instance creation doesn’t make it easy to create a bunch of otherwise identical instances

• Hence, CloudCat provisioned instance groups

Saturday, December 1, 2012

Page 31: CloudStack, jclouds, Jenkins and CloudCat

jclouds standard API or CloudStack-specific?

• jclouds provides instance creation in a standard way across all clouds, including CloudStack

• But the standard instance creation makes a lot of largely redundant API calls, especially to guarantee instance name uniqueness

Saturday, December 1, 2012

Page 32: CloudStack, jclouds, Jenkins and CloudCat

jclouds standard API or CloudStack-specific?• We can guarantee uniqueness within

CloudCat

• Using lower level CloudStack API (still through jclouds) improves performance considerably

• Especially since we’re doing API calls as admin user

Saturday, December 1, 2012

Page 33: CloudStack, jclouds, Jenkins and CloudCat

Speaking of accounts...

• How do we create instances for a logged-in user while making API calls as admin? Two options:

• Use account and domainid options for deployVirtualMachine

• Fetch account’s keys and make API call using those keys

Saturday, December 1, 2012

Page 34: CloudStack, jclouds, Jenkins and CloudCat

Speaking of accounts...

• After experimentation, I went with using the logged-in user’s account’s keys

• Less API traffic when run as logged-in user

Saturday, December 1, 2012

Page 35: CloudStack, jclouds, Jenkins and CloudCat

Grails

• Groovy

• Rails-like

• I’m lazy and bad with UIs, so I like getting sortable tables, MVC, and much more for free, with even more available from plugins!

Saturday, December 1, 2012

Page 36: CloudStack, jclouds, Jenkins and CloudCat

So how does this all look?

Saturday, December 1, 2012

Page 37: CloudStack, jclouds, Jenkins and CloudCat

Logged OutSaturday, December 1, 2012

Page 38: CloudStack, jclouds, Jenkins and CloudCat

Logged inSaturday, December 1, 2012

Page 39: CloudStack, jclouds, Jenkins and CloudCat

Instance ListingSaturday, December 1, 2012

Page 40: CloudStack, jclouds, Jenkins and CloudCat

Filtering InstancesSaturday, December 1, 2012

Page 41: CloudStack, jclouds, Jenkins and CloudCat

HostsSaturday, December 1, 2012

Page 42: CloudStack, jclouds, Jenkins and CloudCat

TemplatesSaturday, December 1, 2012

Page 43: CloudStack, jclouds, Jenkins and CloudCat

Create instancesSaturday, December 1, 2012

Page 44: CloudStack, jclouds, Jenkins and CloudCat

Instance StatusSaturday, December 1, 2012

Page 45: CloudStack, jclouds, Jenkins and CloudCat

Creation errorsSaturday, December 1, 2012

Page 46: CloudStack, jclouds, Jenkins and CloudCat

Creation successSaturday, December 1, 2012

Page 47: CloudStack, jclouds, Jenkins and CloudCat

Instance group listSaturday, December 1, 2012

Page 48: CloudStack, jclouds, Jenkins and CloudCat

Activity loggingSaturday, December 1, 2012

Page 49: CloudStack, jclouds, Jenkins and CloudCat

Known Issues

• I’m not a very good programmer!

• Only really tested with basic networking

• Init script requires hardcoded credentials on instances

• Needs work on packaging/installation

• Only one user so far!

Saturday, December 1, 2012

Page 50: CloudStack, jclouds, Jenkins and CloudCat

More Information

• jclouds: http://jclouds.org

• jclouds Jenkins plugin: https://wiki.jenkins-ci.org/display/JENKINS/JClouds+Plugin

• CloudCat

• source: http://github.com/abayer/cloudcat

• demo: http://cloudcat.andrewbayer.com

Saturday, December 1, 2012

Page 51: CloudStack, jclouds, Jenkins and CloudCat

Thank you!

Saturday, December 1, 2012