Automation and Orchestration
Back in 2011, Forbes published an article with the headline, “Now Every Company is a Software Company.” What does that have to do with automation? In the years since the article was published, many businesses have started their DevOps transformation, and with it, automation is now an important—if not critical—aspect to every company.
The rise of software automation has brought with it new methodologies. For example, Infrastructure as Code (IAC) seeks to transition traditionally managed networks, servers, storage, and services into testable, revisable, and repeatable code. This is a significant departure for traditionally trained system administrators who managed these services for decades with scripts—or worse, manually. There are also Application Release Automation (ARA) frameworks to perform sophisticated testing, workflow, and delivery of applications.
Automation was around far before DevOps was a buzzword. The developer and operations “blurring” with automation has lead to a proliferation of automation technologies. These technologies are now widely adopted and are not just for the so-called cutting-edge companies—they are the new standards. Now that automation has become virtually mandatory, these technologies have become a significant challenge of adoption, complexity, and implementation strategy.
The amount of technologies in the automation space is especially vast, which contributes to the following problems:
- With so many tools, what are the right combinations to use?
- As automation becomes more entrenched in every realm of a company, how are the lifecycles managed in a modern way?
- How can so many tools be managed together in a cohesive way?
These questions are not easy to answer, but there is a path toward a solution: Orchestration.
Managing the End-to-End Picture
Regardless of whether a company is a startup or a large enterprise, most organizations have multiple IT disciplines of automation to solve, such as infrastructure, software release, security, compliance, etc. Each question is filled with variables, so let’s delve into some of the more challenging problems.
The Data Center and Infrastructure
Infrastructure as Code is a cornerstone for automation, but it only solves part of the picture. IAC is also notorious for becoming difficult to manage at scale. It frequently requires additional tools or heavy refactoring to achieve control of very large environments. Solutions such as Terraform, Ansible, or Chef provide varying degrees of imperative and declarative automation for cloud infrastructure services, server configurations, container creation, and even device management such as Cisco devices.
But what about application deployment? These tools work on a multi-cloud, but what coordinates their efforts in a seamless, multi-cloud, or hybrid-cloud way? In other words, what if the suite of IAC tools isn’t robust enough to manage your mix of requirements? What if you need deep management of servers at the hypervisor level on one end of the spectrum, and container scheduling clusters for another division of your business? You are likely managing these ecosystems with completely different tools.
Realistically, if the environments are small, these tools can do a good job getting a lot of the work done. But the beginning is the easiest part. When a business grows or acquires businesses with additional tools, there are multiple sets of automation to manage. With that same problem, what if the IAC is not hundreds of systems, but thousands? Or tens of thousands? Or global? Could you imagine making a configuration change that accidentally brings down an entire region? When the scenario becomes this complex, your best bet is enlisting an orchestrator.
Deploying software reliably and consistently is all the rage. Some companies boast one dozen deployments per day while others are lucky to deploy once a quarter. Like the DevOps race, the adoption of faster iterations and deployments require an even richer automation. This type of automation doesn’t just run tests, build artifacts, store them, or release them; it does all of that at a push of a button—or automatically.
To perform application automation in more durable and sophisticated environments, many have embraced the adoption of blue/green and immutable (throwaway) deployments. Alternatively, some have moved to container scheduling environments through Kubernetes or Docker Swarm. Regardless, these tools require sophisticated—and often complex—coordination. Most environments will be a medley of disparate vendors and SaaS offerings. In an organization with dozens of solutions for a single deployment, the now “automated” end-to-end deployment becomes far more difficult to manage.
The ideal state of software deployment for cutting-edge companies is to reach full continuous integration/continuous deployment and delivery (CI/CD). This is no small task. In summary, true CI/CD involves the following:
- Checking in a software revision.
- Running the change through code verification and acceptance testing.
- Compiling/building/storing the code.
- Deploying it to a test/integration environment.
- Have full smoke testing occur automatically.
- Promoting code to additional environments (QA, UAT, etc.).
- Full smoke testing with the potential for additional testing like load testing or OWASP scanning.
- Releasing code to production.
- Delivery: Human intervention for release to production.
- Deployment: Automatic release to production.
I’ll repeat, this is no small task. As organizations grow and the amount of tools and difficulty levels of integrated end-to-end CI/CD multiplies, “stitching” the solutions to work together becomes a serious bottleneck. This is where automation starts to blur, and orchestration is brought it to take the company to the next level.
Taking Automation Further: Bringing It All Together
Orchestration is mentioned several times in this article, but what does it really involve? If we look at the Topology Orchestration Specification for Cloud Applications (TOSCA), orchestration “offers a standardized way to describe applications as well as its dependencies and cloud infrastructure.” This may sound like an abstraction of what this article discusses because it is. Orchestration is taking all disciplines of automation across multiple platforms, creating the connective tissue, and then finally managing it through code. It’s another way of saying, “Everything As Code.”
Orchestration seeks to solve the software development lifecycle (SDLC) of an application through complete automation. This is to say, the application may initially be deployed to a test environment on an internal OpenStack suite but it will eventually be deployed to an OpenShift and AWS environment, both using Kubernetes. The builders, schedulers, deployers—from initial code ship until decommission—can be controlled through the management of an orchestrator. These capabilities contribute to the flexibility of organizations which are further in the automation journey such as fully managed hundreds of microservices; they also give large organizations the ability to get a firm grasp on unwieldy software behemoths, all under a single pane of management.
These days, automation is king, but soon, just writing automation won’t scale enough. As companies continue to grow, the complexity of their software lifecycle management and suite of tools to manage infrastructure and deploy applications will only become more difficult. Adopting orchestration early means planning for the future by implementing a framework to manage and grow with your automation footprint. The way to take your automation to the next level is by investing in the means to automate “Everything as Code.”