Terraform Kubernetes
Full Stack Release using Terraform
This approach implements the Autonomous Development, Authoritative Release principle, to orchestrate a full stack release, i.e. the automated coordination of Infrastructure as Code, Configuration Management and Application deployment.
This is an alternative implementation to How to Helm, using Terraform instead of Helm, but with the same core principles of runtime versioning and desired state, and the inclusion of the Kubernetes Infrastructure as Code, using a single language, i.e. Terraform.
The Application Stack can be defined once, and deployed many times into separate namespaces, e.g. development, test and production.
graph TD subgraph k8s["Kubernetes"] subgraph ns1["Dev namespace"] ns1-ingress["ingress"] subgraph ns1-pod-1["Pod"] ns1-con-a["container"] end subgraph ns1-pod-2["Pod"] ns1-con-b["container"] ns1-con-c["container"] end end subgraph ns2["Test namespace"] ns2-ingress["ingress"] subgraph ns2-pod-1["Pod"] ns2-con-a["container"] end subgraph ns2-pod-2["Pod"] ns2-con-b["container"] ns2-con-c["container"] end end subgraph ns3["Production namespace"] ns3-ingress["ingress"] subgraph ns3-pod-1["Pod"] ns3-con-a["container"] end subgraph ns3-pod-2["Pod"] ns3-con-b["container"] ns3-con-c["container"] end end end client --> ns1-ingress --> ns1-con-a ns1-ingress --> ns1-con-b --> ns1-con-c client --> ns2-ingress --> ns2-con-a ns2-ingress --> ns2-con-b --> ns2-con-c client --> ns3-ingress --> ns3-con-a ns3-ingress --> ns3-con-b --> ns3-con-c classDef external fill:lightblue class client external classDef dashed stroke-dasharray: 5, 5 class ns1,ns2,ns3 dashed classDef dotted stroke-dasharray: 2, 2 class ns1-pod-1,ns1-pod-2,ns2-pod-1,ns2-pod-2,ns3-pod-1,ns3-pod-2 dotted
Manifest
Declare Container Deployment as Terraform Package
Terraform Build
Immutable Release Package
Configuration Management
Tokens and Properties
Deploy
Deploy-time Detokenisation
Feedback Loop
Realising the Feedback Loop