What is Infrastructure as Code (IaC)?
Infrastructure as Code (IaC) is infrastructure management in a descriptive model, which means you can create your infra and manage it with your source code. Like the principle that the same source code generates the same binary, the same environment is generated by an IaC model every time it is applied.
Kubernetes also follows infrastructure as code (IaC) principles which mean all of our deployment is written in the form of code. This is a tremendous benefit in two ways: Our infrastructure can now be versioned and committed to any Git repository, and our infrastructure can easily be “deployed” elsewhere with the same configuration and with no human error.
Read more about Infrastructure as Code Tools and Best Practices
Why IaC in Kubernetes?
Now let’s take a quick to understand how powerful Kubernetes is by taking an example of a cluster which is spawned and managed by Kops, and the whole setup is running on AWS. If we make a deployment onto the cluster then in this process we never need to know which instance exactly has pod one or pod two because the Kubernetes manage that load. Moreover, when we add new deployments into our cluster, Kubernetes will handle the load across a cluster and decide where to put the new pods. We can kill one of the pods and our replica set in deployment manifest file then it will spawn a new one as a replacement. We can also try to kill one of the EC2 instances, and KOPS will re-spawn new instances. And surprisingly, we barely scratch the surface of Kubernetes and how powerful it can get.
Bear in mind that this is only covered one application deployment. Now imagine if we write all the deployments and third party dependencies we need in this way, then we will have what we want: infrastructure written as code.
Kubernetes IaC Principles
Build Infrastructure Effortlessly
Using Infrastructure as code in kubernetes, we can rebuild effortlessly, and reliable infrastructure by creating different kubernetes manifest files.
To build an infrastructure run:
kubectl apply -f hello_world.yaml
The hello_world.yaml is the kubernetes manifest file which contains all the configuration required to build infrastructure using kubernetes which means if we want to make any changes in future which can do it by making changes in its manifest file.
The ability to build any element of infrastructure is powerful. It removes much of risk and fear when making any changes as there is very less probability of human error.
Reuse the System
One of the advantages of dynamic infrastructure is that the resources of infrastructure can be easily destroyed, created, replaced and moved. The application should continue running even when the server disappears and when they resized.
If we want to build infrastructure, then we can make use of above kubernetes manifest file by updating its configurations according to our requirements and then apply the updated manifest file which results in a newly built infrastructure.
Processes Are Repeatable
Building on the reproductive principle, any action we will perform on our infrastructure should be repeatable. This is one of the benefits of using configuration management tools and scripts rather than making changes manually. Still, it can be hard to stick to doing things this way, especially for experienced system administrators.
All infrastructure is handled through the kubernetes manifest files and tools (kubernetes) that are responsible for implementing adjustments in infrastructure, so less risk of human error is present.
As the Kubernetes is truly a “Production-Grade Container Orchestration”. It makes it easy to manage our infrastructure by simply managing it from manifests files.
When the infrastructure is written is as code, moving your entire infrastructure is as easy as pointing your kubectl to another cluster and running
kubectl-f manifest file-apply . You can also commit it to a Git repository and understand clearly how your infrastructure is changing over time.