Cloud Foundry buildpacks provide framework and runtime support for Java enterprise applications
Cloud Foundry was created by VMware to streamline deployment for application developers, application operators, and cloud operators. Then in April 2011, Cloud Foundry was announced as open source under the Apache 2.0 license, with the pitch to developers that they could code in the language and Web framework of their choice without worrying about the IT environment.
In February 2014, VMware spin-off Pivotal announced the formation of the Cloud Foundry Foundation, with Pivotal, EMC, IBM, Rackspace, and VMware as Platinum sponsors. The foundation has since expanded to 33 members and 42 contributing companies. One differentiator for Cloud Foundry is support for Pivotal HD Hadoop MapReduce, HAWQ SQL for Hadoop, and GemFire XD analytics. Another is the availability of the Pivotal Mobile Services Suite, thanks to last year's acquisition of Xtreme Labs. Pivotal's big data services and mobile services are both now integrated with Pivotal CF, the company's enterprise version of Cloud Foundry.
Several Cloud Foundry Foundation members have released their own distributions of Cloud Foundry, including ActiveState with its Stackato product. The free Stackato Micro Cloud comes packaged for VirtualBox, VMware Fusion/Player, VMware vSphere, and KVM. While the Micro Cloud Foundry VM has not yet been updated to Cloud Foundry v2, you can install Cloud Foundry open source locally using either bosh-lite or cf_nise_installer. Bosh-lite supports VMware Fusion/Player, VirtualBox, and Amazon Web Services, while cf_nise_installer only supports VirtualBox.
I asked Pivotal about the lack of a Micro Cloud Foundry v2 VM and got this response from Jamie O'Meara, Pivotal CF community engineer:
Our focus is on delivering an enterprise PaaS experience for Cloud Foundry, which includes installation into a number of cloud providers like vSphere/vCHS, OpenStack, AWS, and Google Compute Engine. As part of the experience, we found developers willing to build and use their local tools or to push to private and public instances of Cloud Foundry.
Bosh-lite is a tool that offers support for a portion of CF v2 and is used to perform specific tasks such as building BOSH deployable services like a database. It is not a replacement for Micro Cloud Foundry, which is still on our roadmap. Stackato's Micro is based on CF v2 with some proprietary additions.
Pivotal itself has two Cloud Foundry PaaS offerings: the online Pivotal Web Services, and the enterprise-oriented Pivotal CF. These are complemented by Pivotal HD and related cloud service offerings, as well as other specialized data offerings such as the Pivotal Greenplum RDBMS, Pivotal GemFire, and Pivotal SQLFire. In addition, Pivotal's acquisition last year of Xtreme Labs has given it a suite of mobile services that integrates with its PaaS and its big data services.
As mentioned in the statement by Jamie O'Meara, Pivotal CF runs on VMware, OpenStack, Amazon Web Services, and Google Cloud Platform.
Cloud Foundry architecture and features
The Cloud Foundry Elastic Runtime runs applications in packages called "droplets" in DEAs (Droplet Execution Agents). DEAs are managed by the Cloud Controller and monitored by the Health Manager, while Routers manage application traffic, do load balancing, and combine logs. In turn, DEAs call on service broker nodes, which communicate over a message bus. The Cloud Controller has access to a blob store and a database of application metadata and service credentials.
To deploy an application, the developer basically uploads the app bits and metadata, using the Cloud Foundry command line or plug-ins from Eclipse, Maven, or Gradle. In addition, the developer needs to create and bind services. This all boils down to building a WAR archive and uploading the WAR.
The Cloud Controller will automatically detect and load any necessary system buildpacks, create a droplet, deploy the application droplet to the DEAs, register the routes, and forward the ports. Once the DEAs are active, the Health Manager compares the expected state of DEAs from the Cloud Controller with the actual state from the DEAs. If the Health Manager detects a deviation, it will ask the Cloud Controller to restart any DEAs not in the expected state.
Administrators use BOSH, as opposed to other IT automation tools, such as Puppet or Chef, to manage the underlying infrastructure of Cloud Foundry. An open source tool chain for release engineering, deployment, and lifecycle management of large-scale distributed services, BOSH has its own command line, separate from the cf command line, but you don't need it to deploy an application. BOSH is for deploying VMs, not droplets.
At a very high level, BOSH clones new VMs from a "stemcell" to create the VMs needed for a deployment. A stemcell contains an operating system and an embedded BOSH agent that allows BOSH to control VMs cloned from the stemcell. A BOSH release is a collection of source code, configuration files, and startup scripts, with a version number that identifies these components. The BOSH deployment manifest is a YAML file defining the layout and properties of the deployment.
Cloud Foundry includes UAA (User Account and Authorization) and login servers. The UAA is the identity management service for Cloud Foundry. Its primary role is as an OAuth2 provider, issuing tokens for client applications to use when they act on behalf of Cloud Foundry users. However, it can also authenticate users with their Cloud Foundry credentials and act as an SSO (single sign-on) service. The login server performs authentication for the UAA, acting as a back-end service. The login server is where Cloud Foundry administrators set up their authentication sources, such as LDAP/AD, SAML, OpenID (Google, Yahoo, and so on), or social.
Down at the application execution level, the DEA uses Warden Linux containers. Warden provides a simple API for managing isolated, ephemeral, and resource-controlled environments, or containers. In the future, Cloud Foundry will support Docker containers.
Figure 1. A block diagram of the Cloud Foundry architecture.
Deploying applications with buildpacks
Buildpacks provide framework and runtime support for your applications. Four buildpacks are standard in Cloud Foundry and Pivotal CF: Java, Node.js, Ruby, and Go. (Stackato has Python instead of Go.) The good news is that buildpacks are readily available, easy to install, and even easy to construct, assuming you can write a few lines of Ruby or another scripting language. In most cases, the open source language and framework you want will be available as a buildpack, and all you'll need to load it will be a mention of the Git repository on the cf command line when you push your app:
$ cf push my-new-app -b git://github.com/johndoe/my-buildpack.git
Alternatively, mention the buildpack in your manifest. For example, a working WordPress for Cloud Foundry is available in this repository created by Daniel Mikusa. To install it, you simply clone the repo, which is not very big; create a MySQL service in your Cloud Foundry instance; edit the manifest and config files on your local machine; and cf push the app. The manifest.yml file looks like this before editing:
--- applications: - name: mywordpress memory: 128M instances: 1 host: mywordpress domain: cfapps.io path: . buildpack: https://github.com/dmikusa-pivotal/cf-php-build-pack.git services: - mysql-db
As you can guess, the buildpack line in the manifest references the Git repository of a PHP and Apache buildpack.
Cloud Foundry does messaging among the parts of its environment using NATS, a lightweight and distributed publish-subscribe messaging system written in Ruby.
The Cloud Foundry services API defines the contract between the Cloud Controller and the service broker. The broker is expected to implement several HTTP (or HTTPS) endpoints underneath a URI prefix, and it may be load-balanced. User-provided service instances are a mechanism to deliver credentials to applications for service instances that have been pre-provisioned outside of Cloud Foundry -- for example, an Oracle cluster.
Pivotal has a big data product, Pivotal HD, that integrates with Pivotal CF. It includes Hadoop, Pivotal's HAWK SQL query engine for Hadoop, and GemFire XD analytics, as well as the Spring for Apache Hadoop Java framework. The Pivotal Big Data Suite is an enterprise data warehouse that includes unlimited Pivotal HD.
Figure 2. Services in the Pivotal Web Services Marketplace are typically available in a variety of plans, ranging from free to $100 or more per month.
According to Pivotal, in practice an administrator defines a service pool of HDFS and MapReduce instances, which take about five minutes to provision from scratch on Pivotal CF. Then a developer or an application can ask for an instance from the pool, obtain it in about two seconds, and a new instance can be created for the pool in the background. When the requested instance is no longer needed, it can be released.
Pivotal also offers a Mobile Services Suite that's integrated with both Pivotal CF and Pivotal HD. This is based on the seven years and 400 apps' worth of know-how acquired with Xtreme Labs last year. It's basically an MBaaS (mobile back end as a service) on Pivotal's PaaS, with the integration extending out to the mobile application level.
Cloud Foundry installation and use
Signing up for Pivotal Web Services was painless. I had no trouble with the developer console, and downloading and installing the cf command line was a matter of a minute or two. The documentation made the steps needed to deploy an application with cf quite clear.
As I mentioned earlier, the Micro Cloud Foundry VM has not yet been updated to Cloud Foundry v2. While I found two methods for installing the current Cloud Foundry open source into a local VM, each promised to be a multihour process. It was much easier for me to download a Stackato Micro Cloud VM (10 minutes) and install it into VMware Fusion on my MacBook Pro (two minutes). I also installed the Stackato command line, which is a superset of cf. Using the Stackato developer console in a browser turned out to be very similar to using the Pivotal Web Services developer console.
With the exception of the current lack of a Micro Cloud Foundry VM, which is kind of a pain, installation and setup of Cloud Foundry are very good. Everything you need is available for download, and the installations are self-explanatory. You can start small either online (in a couple of minutes) or on premise and grow your cloud incrementally, or you can install an enterprise cloud on an appropriate VM host in a few hours.
For a developer, deploying droplets from the command line, Eclipse, Spring Tools Suite, Maven, or Gradle is dead simple, once you've constructed a valid manifest file that includes any necessary buildpacks. Managing droplets and DEAs is straightforward, though I wish that automatic scaling of applications were fully supported instead of being an enterprise-only beta feature in Pivotal CF.
Figure 3. The Stackato Micro Cloud VM -- available for VirtualBox, VMware Fusion, VMware vSphere, and KVM -- is currently the fastest way to get Cloud Foundry on to a developer's desktop. Here the Stackato management console is running behind the Stackato Micro Cloud window.
Managing Cloud Foundry clouds isn't hard, but BOSH is a complicated, powerful tool that has a significant learning curve. Administrators accustomed to Puppet and other popular configuration management and orchestration tools won't have any trouble learning BOSH, but they will have to dedicate some time to doing so.
Overall, Cloud Foundry is a strong PaaS in its open source form and in both proprietary forms from Pivotal: online as Pivotal Web Services, and on premises as Pivotal CF. While I haven't evaluated all the proprietary PaaS offerings based on Cloud Foundry by Foundation members, I have looked at Stackato from ActiveState and found that it streamlined a few items not yet cooked in the open source edition, adding value for cloud management and language support.
Cloud Foundry at a glance
- Wide assortment of languages, Web frameworks, and databases available and supported
- Easy and fast self-service deployment for developers and cloud operators
- Application container, service, and node health are all monitored and automatically restarted if not in the expected state
- Big data and mobile services are supported in the PaaS
- Can deploy from the command line, Eclipse, Spring Tools Suite, Maven, and Gradle
- Automatic horizontal scaling is still in beta, but scheduled for Q3 release in Pivotal CF; another PaaS based on Cloud Foundry, ActiveState's Stackato, already has it
- No downloadable "micro" VM for Cloud Foundry v2 yet, but you can download Stackato Micro, or use one of two Cloud Foundry installers to install Cloud Foundry in a local VM
- Limited to applications that run on Ubuntu Linux, unless you use the Uhuru Windows version of Cloud Foundry, which we have not reviewed
- Amazon Web Services
- Google Cloud Platform
- Cloud Foundry, free open source
- Pivotal Web Services, 3 cents per gigabyte per hour after two-month free trial with up to 2GB of app memory and 10 free Marketplace services
- Pivotal CF, priced by number of application instances running and number of Operations Manager instances running, with a 90-day evaluation license available for free
This story, "Review: Cloud Foundry brings power and polish to PaaS" was originally published by InfoWorld.
Learn how the implementation of static analysis at Intuit led to reduced technical, improved code...
The major new features in Java 8 center around lambda expressions, a functional programming construct...
Geir Magnusson Jr. gets you started with using the Velocity Template Engine and the Velocity Template...
Popular updates like Project Jigsaw and the new JSON API get the hype, but Java 9 promises a goldmine...
As Oracle presses forward with Project Jigsaw, it is notifying developers of potential changes to apps...
Application architectures keep evolving. APIs and microservices are the latest style and make...
Storm lets you create real-time analytics for every conceivable need. Here's a tasty example using...
Streem could end up being the basis for future Ruby upgrades, while Mochi brings key functional...