As part of the Continuous Application Delivery team over the past few years, we have seen-and in many instances actually shaped-the continuous delivery process at Equinix. By continuously learning from different trials and applying those learnings when necessary, we have overcome many of our initial challenges. To explain more about these challenges and how we addressed them to enable continuous delivery with containers at Equinix, let us take you through our “journey with the whales.”
Environment Configuration Management Our apps are hosted on virtual machines, often running more than one app or service per host sharing the same base infrastructure. We have a load balancing server, reverse proxies across app and DB servers which make it similar to any other classic production environment. This brings us back to the agility issue in terms of delivering features to production due to the overall turnaround time for serving a request.
App Configuration Management:
- We have multiple technology stacks (many are open source) and applications to support our business, and it is always a challenge to keep the configuration unique across various instances, whether Machines, OS, packages, support tools or other application-related dependencies.
- App-specific isolation makes it much more complex to manage, maintain and enable continuous delivery.
- Replicating and debugging production issues had also become another time-consuming undertaking, seeing how it is highly intertwined with the above two challenges. The turnaround time to replicate and test a production issue was a particular pain point, for us as well as for the continued engineering teams.
- Fixing or providing a resolution for a problem was taking a lot longer than it should, and systemic problems were particularly difficult to isolate, as so many apps were sharing resources-and many apps on the same servers had conflicting requirements.
Jenkins and Dockerto the Rescue The CAD Team at Equinix thrives on innovating constantly, and-because we operate on a principle of “Fail Fast, Learn Fast,”-we began exploring various solutions to overcome the challenges mentioned above. We were confident that moving into a container-based approach to launch our software services would not only help us solve our current challenges, but would also bring in the opportunities to bridge the agility gap between Business and Technology. Jenkins Highlights in our Ecosystem
- Empowering Teams: Because the deployment pipeline is a pull system, testers, developers, operations and others can deploy the application version into an environment of their choice.
- Reducing Errors: Automation ensures the correct version (configuration, database schema, etc.) is applied the same way every time.
- Lowering Stress: A release becomes commonplace without the usual stress, thanks to push-button releases to production and rehearsing deployments.
- Deployment Flexibility: Implement in a new environment or configuration (via containerization) by making a few changes to the automated delivery system.
- Practice makes Perfect: Through the deployment pipeline, the final deployment into production is being rehearsed every single time the software is deployed to any target lower environments like INT, QA, UAT, etc.
Docker Highlights in our Ecosystem
How did we achieve this?
We took a 2-step approach to implementing containerization at Equinix.
- Build the foundation of containers using Docker
- Orchestrate the entire continuous delivery workflow via Jenkins
We started building the foundation of container management at Equinix by leveraging open source Docker Private Repository, Shipyard Container Management and custom scripts to automate the entire workflow.
- Using Docker, we separated OS Image, which included the app-related configurations, builds and deployments.
- Created baseline standardized OS and App Images.
- Jenkins Continuous Delivery Server then pulls images from the Equinix Docker private registry, packs it with application artifacts and spawns them as containers onto servers as needed.
Since the idea was not to impact the existing Continuous Delivery Practices and to instead let teams retain their existing Pipeline structure of Jenkins, we took extra care in replacing the entire traditional deployment architecture with Docker workflows.
The End Result
After successfully integrating Docker workflows with Jenkins for our application builds and deployments, Docker has fundamentally changed the way we deploy services and run apps at Equinix. With this success, we have achieved significant improvements in agility and operational efficiency, and are accelerating our continuous delivery process by leveraging Docker containers for testing and deployment, with Jenkins for orchestrating the process. Finally, our implementation has helped Equinix software engineering teams switch more easily to a micro-services architecture, which is where all of our customer-facing software and APIs are going. It’s an exciting time to be at Equinix! Questions? Feedback? Want our take on how you can devise a continuous delivery strategy that will help you realize your business goals? Email us at Global-SAE-CAD@equinix.com.