A couple of years ago I wrote a blog post titled “The Many Layers of DevOps.” At the time, I wanted the post to speak to all of the different aspects of managing change through a DevOps delivery process. It was important from my perspective to acknowledge that there was more to DevOps than simply infrastructure as code. I went on to explain that we still need to manage the application layer. Application deployments, database updates, static content deployments, application configuration all play a vital part in DevOps. Lately I have been asked to revise this post and expand upon other areas of change.
Today, enterprises are focusing on managing “full stack deployments” in an effort to reduce the complications of managing large sets of configuration. A full stack deployment, when done correctly, encompasses all aspects of an application and its surrounding environment. Most people are familiar with virtual machines and understand their importance in the enterprise. Virtual machines save companies a ton of time by easily allowing them to stand up a new server with the exact operating system and tools already installed. This same VM technology is being leveraged in combination with configuration/infrastructure as code products to provision servers that are ready to receive an application deployment as soon as they are available. Even more companies are taking this one step further and provisioning entire environments (many servers) with database servers, application servers, and more, with the push of a single button.
I’d like to take a quick look at the various parts of the full stack deployment model, and the tools I see most often used in enterprises that support each layer. Each layer plays a specific role in updating and managing change into your environments.
Like the integrity of a house, a full stack deployment model is nothing without a solid foundation. The foundation layer consists of networking, storage, virtualization/servers, and the operating system. With the popularity of public and private clouds, the foundation layer has been flooded with tooling to support getting networked servers, on demand, in any type of cloud that fits your companies needs. Amazon (EC2 + S3), Microsoft (Azure), IBM (Softlayer/Openstack), Rackspace, and other IaaS providers have offerings for provisioning and managing servers in their public clouds. These are excellent for development teams that want to efficiently, and cost effectively, have access to servers on demand for building, deploying, and testing applications in a cloud environment.
The cloud conversation at large enterprises always sparks a heated discussion. Most are hesitant to put all of their eggs in one cloud basket, so to speak. Others are concerned about security issues, and having their proprietary code sitting on a public cloud. For these reasons, many customers are working to build their own internal private cloud. Many are using some form of VMWare, and lately we have seen a strong adoption of the OpenStack framework.
The OpenStack framework is intriguing on many levels, because it allows companies to easily manage their “foundation” as code (Heat templates). This code can then be checked into source control and versioned, further beating the DevOps drum of bringing development practices into the operations departments.
IBM offers many tools in this space. Softlayer is a great IaaS provider, and also allows for private cloud hosting. IBM Cloud Orchestrator helps companies provision servers to cloud environments, and can also assist in applying the middleware stack.
UrbanCode Deploy with Patterns (UCDP) is a full stack management solution, which allows teams to define a “pattern” of their foundation, and provision the pattern into many different cloud offerings. It also allows enterprises to easily stand up the middleware and application components once the foundation is in place.
Once servers have been provisioned; regardless if its in a private cloud, public cloud, or some sort of hybrid cloud, the next step is to seed those servers with the infrastructure and tools needed to support our application. This is where the configuration/infrastructure as code tools bring the greatest value. Tools such as Chef, Puppet, Ansible, and Salt, allow companies to consistently install and configure application servers, databases, and OS patches, to name a few. Some companies will also leverage configuration as code tools to deploy the application layer as well. While this can be done, it typically involves more scripting to get the orchestration of specific application components deployed correctly. Other companies will skip on the infrastructure as code components, and build this architecture into their Application Release Automation tools.
The application layer has the highest frequency of change. Once the Foundation, and middleware are in place, the application layer may change several times a day. Configuration changes to the middle ware, Application updates, rollbacks, continuos delivery into lower environments are all reasons why enterprises seek out Application Release Automation tools. IBM UrbanCode Deploy (UCD) is the flagship product that not only handles deployment automation and configuration management, but also integrates with products throughout the rest of the full stack deployment model. It allows for complete orchestration of all components of an application to multiple environments ensuring that teams can consistently promote code from one environment to the next. IBM UrbanCode Release (UCR) allows companies to manage hundreds of applications as part of a large release process, providing visibility into the current state of a release. It allows release managers to understand if they are ahead or behind on a particular release, and what features are currently on track for the release. During the actual release, UCR provides a visual representation of your release plans, so that any person involved with the release knows exactly what part of the release is currently being executed.
The Full Stack
Today, many companies are piecing together products from the above sections to help produce a full stack framework. IBM UrbanCode Deploy with Patterns works directly with the OpenStack framework (and AWS) to provision your foundation (compute, network, and storage layers) and integrates tightly with all of the Infrastructure as Code tooling. These features, combined with the deployment capability in UrbanCode Deploy have been able to adequately provide the entire full stack framework for customers, and help them tackle the challenges of a hybrid cloud.
BlueMix is a complete PaaS offering from IBM that enables companies to develop, build, deploy, and run applications in the cloud. This full stack framework is based on Cloud Foundry open technology and runs on SoftLayer infrastructure.