Guest post originally published on Morpheus’ blog by Martez Reed
Regardless of the industry or market, enterprises around the globe are at some stage on their cloud journey – with digital transformation as the destination. The use of cloud computing (both private and public) is a core part of strategies to speed up application development and deliver on business objectives.
In the midst of all this, IT organizations and professionals are being bombarded from a tools perspective and are struggling as to how to make the right choices – and then successfully manage it all. Think of that classic image of one individual trying to keep too many plates spinning at the same time. There you have it.
Here is where Terraform and Kubernetes come into play.
Let’s first see where each of these tools sits from a capabilities standpoint, then examine where the two overlap and how they can best interface.
A quick look at Terraform
Terraform is an open-source infrastructure-as-code software tool that provides a consistent command-line interface (CLI) workflow that manages hundreds of cloud services. Terraform is used to provision and manage cloud resources, whether a public cloud (like AWS, Azure, or Google Cloud Platform) or on-prem (like VMware vSphere, Nutanix, or OpenStack). It helps both developers and IT operations teams manage their resources, whether a virtual machine, a database-as-a-service or a serverless application.
By utilizing a declarative language and a broad ecosystem of third-party technology providers, Terraform can take advantage of all the benefits of software development processes from a code perspective. Adapting practices like GitOps for automating IT infrastructure using infrastructure as code and software development best practices facilitates cloud resource management – as opposed to the administrator needing to manually access a user interface or trigger a CLI command.
And a quick look at Kubernetes
Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services that can facilitate declarative configuration and automation. Considered primarily a container orchestration platform, Kubernetes is designed to help application development teams accelerate development as well as improve application resiliency.
Kubernetes typically utilizes what are known as manifests for the configuration of resources or deployment of applications into a Kubernetes cluster. These are defined using YAML (short for yet another markup language) files. This is what enables developers and operations teams to deploy containerized applications to a robust platform that can facilitate the scheduling as well as the resiliency of containerized applications.
At the intersection of Terraform and Kubernetes
Both Terraform and Kubernetes use configuration files or code for orchestration. The tools overlap somewhat in scope and one is not a replacement for the other. But they can work together to provide a full-stack deployment solution. I’ll take a look at several different paradigms.
One paradigm: Using Terraform to provision Kubernetes clusters to run containerized workloads
Terraform can be used to provision Kubernetes clusters, whether on-prem, in the public cloud, or a managed Kubernetes offering from a public cloud provider. This scenario leverages the benefit and value of using Terraform to manage cloud resources. It’s just an extension of what Terraform does very well.
From an application perspective, this is where a handoff would be: The cluster is ready to go. Now it’s time to start using the Kubernetes constructs from an interaction and management perspective. Here’s where the YAML manifests come into play – to deploy an application to the Kubernetes cluster that has been provisioned by Terraform.
Second paradigm: Using the Terraform Kubernetes provider for management and application deployment
When you use Terraform to perform the interaction with the Kubernetes cluster to deploy an application to that cluster, the lines can start to blur and the complexity set in. When you do this, you are using Terraform to manage your cloud resources, provision Kubernetes clusters, and deploy Kubernetes applications. Typically, the Terraform Kubernetes provider is used for some of the more basic application deployment scenarios, given that it’s a tool that is purpose-built more for another set of capabilities than as a purely Kubernetes-focused tool.
Third paradigm: Using the Terraform Kubernetes operator to provision and manage cloud resources from Kubernetes
The lines blur even more with the Terraform Kubernetes operator that enables developers and IT operations teams to deploy cloud infrastructure with Terraform using Kubernetes manifests. Similar to the Terraform Kubernetes provider model, this approach aims to consolidate the point of interaction by using Kubernetes manifests as the primary interface. This pattern makes sense for teams or organizations that have begun to treat the Kubernetes API as the core API for their IT environments.
Simplifying management drives tool choices
Most organizations are always looking for ways to simplify management – without having to dig in and learn 50 different tools. Think of it in terms of choosing an adjustable wrench to handle a bevy of different tasks sufficiently and efficiently – versus choosing from a big selection of wrenches, each purpose-built or a particularly sized task.
Simplifying the toolbox like that is the metaphor at work when it comes to using Terraform for interfacing and interacting with your Kubernetes cluster. In practice, unfortunately, organizations often must leverage a mix of various tools and operating models to achieve their desired outcomes. This conversation can get even more complex when you overlay the target endpoints that are supporting the workload; typically a mix of private and public cloud.
Making the complex less so
Digital transformation is a buzzword that at this point is best avoided; what it means however is using software development practices and procedures to help enterprises compete and grow revenue in new ways. Achieving that outcome can be a complex topic triggering some complex discussions and choices for IT organizations.
Where Morpheus shines is the ability to interact and interface with the various tools, models, and paradigms of application deployment including the optimal use of Terraform and Kubernetes.
To see how Morpheus can make the complex simpler and easier, get a demo today.