Cloud Native Computing, Microservices, Containers, Kubernetes, OpenStack = Optimization, efficiency, agile, scale, orchestration.
I am a Software Engineer at IBM and previously I have written articles on enterprise DevOps for mobile, the Apple + IBM partnership, and most passionately spoken about OpenStack (Tokyo Summit, Austin Summit).
This is the journey as my team and I pivot our development and DevOps platform used in delivery of IBM consulting services. We will be migrating and transforming the platform to work on containers and IBM Cloud Private.
The current platform is hosted across Legacy IaaS, OpenStack, and Cloud Foundry. We have a slew of applications, tools, and services that are all integrated. Some data is in a Cloudant as a Service. Some of our services are microservice based, some are monolithic.
Our cloud contract was expiring, and moved to end of life. Our mission has evolved from a centralized platform for a specific purpose to one that could be used in delivery, even in a customers private cloud. Additionally as we grew as a team, in our learnings, we grew a mounting pile of Tech Debt!
We knew that now was the time to pivot to a more sustainable consolidated approach and to enable custom implementations in private clouds. We needed to ensure
- Common technologies across platform.
- Core attributes: Elastic scaling, Load balanced, Highly Available, Optimized for performance
- 100% automatable
- Be deployed into any private cloud
One might have overwhelming feelings that this is a gigantic undertaking. To transform a multi-cloud, multi-technology, multi-tool platform used by delivery teams to the next generation of technologies.
At my roots, and the roots of my team, we are developers and engineers, crazy about automation, and love tackling problems. So instead we have gone all in.
The challenge: do all of this in 4 sprints (2 months).
Where to start?
We analyzed our entire architecture and identified the key areas that we wanted to achieve
- Consolidate, migrate and transform all code to Sprint Boot microservices and ReactJS UI’s in containers
- Consolidate, migrate, restructure any required data to MongoDB.
- Upgrade, and migrate all tools to newer versions, and for the time being, host on a newer OpenStack based private cloud.
- A new CI pipeline.
- Identify and implement a platform for running, managing, and orchestrating containers.
How to start?
Once we understood what we were trying to achieve, we looked into how to go about achieving this and identified the following approach
- Review, Clean, and Consolidate each code repository. This included; code structure, common code components / library, upgrading dependencies, enabling actuators, enabling profiles, and exposing environment specific variables. In one case we even had to do a complete rewrite of a service.
- Identify all data used across the platform and migrate to MongoDB. Re design as necessary.
- Re-investigate all our tools, test out various migration strategies, and identify upgrade paths.
- To our credit, we already heavily use OpenStack Heat blueprints and IBM UrbanCode Deploy and its patterns engine to manage our infrastructure as a service, and to orchestrate our applications.
Our decision was to continue down this path, extending where necessary for the more modern design. This has lead to leveraging Travis CI for container builds, and UrbanCode Deploy for deployment from a Private Container Registry to IBM Cloud Private.
- After much searching we settled on IBM Cloud Private and Kubernetes to manage our new cloud native platform.
We split all these actions and areas across our team with my focus on
- Researching and implementing the best approach for containers
- Restructuring our Spring Boot services in regards to support containers, Other team members took on the modernization tasks.
- The use of IBM Cloud Private.
- Research and implement the new CI pipeline.
Why IBM Cloud Private
I thought I would finish off with the reasoning around IBM Cloud Private and why it fit into our strategy.
IBM Cloud Private is a new IBM Cloud offering focusing on managing cloud native workloads, leveraging existing investment on infrastructure. It is built on open source, including Kubernetes, plus many value adds from IBM.
This was perfect for us to leverage our existing OpenStack and Heat automation, with IBM Cloud Private / Kubernetes added in. In my opinion, I feel that it gives us the best balance between Open Source Flexibility and Enterprise Security and Stability. Plus the ease of high availability and scaling was a no brainer.