In a previous set of posts I have shown examples using JSON and .NET instead of YAML. This post is going to show another alternative using Terraform. I will be using the same Kubernetes object to allow comparison.

YAML Object

We are going to create a busybox pod. This manifest isn’t a super simple example, nor is it a complex example. This manifest should allow demonstrating the differences. Here is the pod YAML.

apiVersion : v1 kind : Pod metadata : name : busybox spec : containers : - image : busybox command : - sleep - "3600" imagePullPolicy : IfNotPresent name : busybox restartPolicy : Always

Now we can save this as busybox.yaml and create it on our cluster.

$ kubectl apply -f busybox.yaml pod/busybox created

Now let’s take a look at this in Terraform.

Terraform

This example is going to leverage the Kubernetes Provider for Terraform. Let’s create a Terraform file with the provider and the object.

$ mkdir k8stf && cd k8stf && touch main.tf

Now we can setup our provider, create our object, and execute the Terraform.

provider "kubernetes" { } resource "kubernetes_pod" "busybox" { metadata { name = "busybox-tf" } spec { container { image = "busybox" command = [ "sleep", "3600" ] name = "busybox" image_pull_policy = "IfNotPresent" } restart_policy = "Always" } }

Now we can init Terraform.

$ terraform init * provider.kubernetes: version = "~> 1.11" Terraform has been successfully initialized!

Now, execute Terraform plan.

$ terraform plan Plan: 1 to add, 0 to change, 0 to destroy.

Finally, let’s create our Kubernetes object with Terraform.

$ terraform apply Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Now, if we get all pods, we should see it running.

$ kubectl get pods NAME READY STATUS RESTARTS AGE busybox-tf 1/1 Running 0 30m

Don’t forget to clean up your cluster by deleting the object, which can be done with Terraform.

$ terraform destroy Destroy complete! Resources: 1 destroyed.

Wrap Up

The key take away from this is that you don’t have to use YAML. As with any markup, an excellent tool goes a long way in making it more manageable. If you are already using Terraform in your environment, then I would recommend you trying out the Kubernetes provider to see if it meets your needs or not. I personally like HCL and I see it as having the simplicity of YAML with a little better tooling.

Stay tuned for more alternatives.

Thanks for reading,

Jamie

If you enjoy the content then consider buying me a coffee.