Asgard is a grail web application developed by Netflix for managing cloud and deploying applications.  It provides additional features AWS dashboard doesn’t offer directly.

  • Linking deployed application with cloud objects(instances, ASGs) for  easy management and maintaining application registry using Simple DB

  • Takes  auto scaling to another level by introducing cluster(mapped to   application) with  multiple ASGs for application upgrades, faster roll back and rolling pushes making application deployment very easy without any down time.

  • Asgard is integrated with Eureka which can be used for locating services for the purpose of load balancing and fail-over of middle-tier servers and easy application deployment.

  • Easy Auto scaling management

jclouds is an open source project for creating  and controlling cloud resources with single interface for most cloud providers  by abstracting common features in all providers as  compute and blobstore services and also providing cloud provider specific features. Provisioning with jclouds becomes simple to switch cloud provider easily.

Why Asgard with jclouds ?

Looking at additional features asgard adds on top of AWS it would be a great cloud provisioner/manager if  we can leverage application and cluster model  used in asgard with other cloud providers with minimal configuration .

So by changing service layer to jclouds as cloud provisioner will add benefits like.

  •    Easy cloud provider switching with minimal configuration

  •    UI support  for jclouds which is not developed yet.

Netflix’s Asgard  has few assumptions which needs to be  changed  to make it more generic for cloud provider portability

  • Netflix’s Asgard works only with AWS cloud and also the Application/Cluster model uses Simple DB as service registry thus making  totally dependent on AWS.

  • Asgard assumes that there is only one application per instance or comes with AMI(Netflix baked AMIs has only one Application)  where it may not be necessary.

Asgard re-engineering with jclouds

  • Replace  AWS services  in asgard with jcloud abstractions/cloud specific services

  • Enable Asgard to work with all  cloud providers supported by jclouds. Add ability to switch to other  cloud providers with minimal configuration like username, Api Keys and endpoints.

  • Provide service/application and cluster ability to  cloud providers.

  • Instance can have multiple applications. Eureka Service discovery should be able to load balance in many to many(applications to instances) scenario.

What’s  done so far…

  • Replaced asgard service layer  coupled with AWS with jclouds compute service API and EC2(only supported  for AWS and Openstack)

  • Easy configuration for adding any cloud provider to Asgard and see all jcloud abstractions(instances,images,zones,instance types etc.)  and  ec2 for AWS and Openstack.

  • Provider specific features for  Rackspace(no ec2 API ) in place

  • Eureka Integration for application discovery across all instances in cloud provider (even across all cloud providers )

  • All cloud providers can be managed at a time by easy  switching between providers.

Setting up Asgard with Jclouds

Checkout  code from github  repostory

Build war using grails war plugin and deploy it in server

Add User Name ,API key for cloud providers (Access Key and Secret Key for AWS, Openstack EC2) . End point needed for Openstack.

Challenges/Work Ahead

jclouds abstraction is still evolving and lot of features still needs to be added to abstraction, At present most of the other  cloud providers are lagging behind AWS, as these cloud providers catch up with AWS. More features may be abstracted in jclouds.