July 9, 2015 | Written by: Tamar Eilam
Share this post:
As of May 23rd IBM Bluemix Container Service now provides a native Kubernetes operations experience while removing the burden of maintaining master nodes. Kubernetes itself is based on the Docker engine for managing software images and instantiating containers. Get the details.
At DockerCon, IBM announced IBM Containers based on Docker. This article discusses how IBM Containers help developers achieve extreme agility with quality, and why it’s important.
Let’s start with a bit of history to set the context.
Not so long ago, the holy grail of IT Operations was keeping the system stable; namely, making sure no change accidentally occurs, and working hard to detect if something went wrong. Academic research explored root cause analysis, to find the source of a problem when it occurred; Convergence and Promise theory was built on the premise that there is a single state to which we want the system to continuously converge.
It is now well understood by ‘born on the cloud’ startups that the how is as important as the what.
Along came the cloud, with large quantities of compute and storage instantly available at scale, followed by an explosion of valuable APIs that can be composed quickly to bring new ideas to light. Companies such as Netflix and Etsy demonstrated how business value can be attained with innovation that is fueled by agility—the ability to react quickly to market needs.
Following these well-publicized examples, it is now well understood by “born on the cloud” startups that the how is as important as the what. The what continuously keeps evolving and transforming; The how is what enables these changes – with speed! The most frustrating situation to be in for any app provider is to fail to make a necessary app change quickly enough, and thus lose the business to the competition. This can happen if the app or the DevOps processes are not designed from the beginning for maximum agility – a poor situation to be in!
Now what about enterprises? Many enterprises suffer from what is termed a “technology debt”—having to run and maintain a large code base that was written 20 or even 30 years ago, a time where the bottlenecks and optimization targets were totally different! Back in “the good old days”, I/O and CPU were scarce, and systems were written to optimize the transaction response time. Software was written as a monolith for maximum efficiency. Alas, monolith goes against the principles of agility – but back in the days agility was not a main concern since it was not the bottleneck!
Today, enterprises know they need to evolve and transform to become more agile. Transformation will happen by identifying the parts of the system that can and must be restructured according to the new principles, and integrated with the back-end (that still requires the type of availability, consistency, security and performance that is achieved well with the System of Record architecture).
Agility became a business imperative!
In many conversations I had with customers who are going through an enterprise digital transformation driven by the quest for agility, they are asking for three things: DevOps, Microservices, and Containers. I came to realize that DevOps, Microservices and Containers (based on Docker) are the three main pillars to enable continuous innovation fueled by agility.
DevOps advocates a cultural change, as well as a new way to deliver software, by automating everything (change is reproducible) and making the infrastructure immutable (full software stack deployments, with no change “in place”).
Microservices is an implementation and delivery style that, while adopting many of the DevOps principles, it significantly expands the discussion to include software architectural patterns aimed at simplifying the operations, maintenance and evolution of the code and maximize its robustness.
Docker based Containers are a great technology of choice for developers interested to adopt the DevOps principles and Microservices implementation style, because they provide fast start up time, effective usage of the infrastructure, portability that works to reduce differences between development and production environments, and, developer-centric open ecosystem focused on developer’s productivity.
IBM Containers Enable Agility
The benefits of containers to enhance developer productivity are well understood at this point.
However, a less publicized fact is that IBM Containers come together with a number of Bluemix services that work together to enable you to apply the principles I described above (let’s call them “Agility principles”) to achieve agility with quality.
One of the main agility principles is Automate Everything so that everything is reproducible from code. Long gone are the days where administrators simply SSH into a machine to perform changes; treating machines as pets (vs. cattle), and causing an unmanageable infrastructure heterogeneity (analogous to spaghetti code) that is not understood, cannot be re-produced, or un-done.
IBM Bluemix Delivery Pipeline can be used to automate the entire process: from code commit, through Docker Build, and deployment into IBM Containers.
Automation is not enough, it needs to be done right! This is where the Immutable Infrastructure agility principle becomes handy. Changes are not done “in place”, in a running environment. What you want to do is always deliver changes in full stack deployments where a new environment is stood up next to your current one, and where you gradually increase the traffic to the new environment. It is a good practice to keep the old environment live for a while, so that if problems are found, you simply roll back. Easy enough. Want to follow this practice? Use the Active Deploy service that we just announced. It simply allows you to deploy Docker Containers to a new environment, and gradually roll forward to it.
Enough about Agility, let’s talk about Quality
While agility is extremely important, it will work against you if you are not going to make sure every change you produce is safe and robust. Part of what we announced includes the Vulnerability Advisor: no matter how you produced the Docker Container, whether it was through our automated pipeline or build, or on your own, once you upload it to our cloud, it will be automatically checked for you, and you will be advised if there are any software or config vulnerabilities found. More on this important topic in an excellent blog post by my colleague Jim Doran.
It is my own view that we are on the verge of a complete transformation of the software life cycle, that will affect how we develop, test, and operate software in the cloud. This transformation is fueled by the quest for extreme agility. I will write more about this topic in future blogs. Our team is working vigorously to invent the future: new ways of developing, testing, and operating services, optimized for agility.