Full Stack Release using Terraform

This approach extends 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.

In the Helm example, the Application Stack is limited to the containers in a given namespace, in this scenario, the Application Stack includes the Kubernetes infrastructure and namespaces. All of which are defined once, and deployed many times, e.g. development, test, staging and production.

graph TD subgraph kbs1["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 end subgraph kbs2["Kubernetes"] subgraph ns3["Staging 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 subgraph ns4["Production namespace"] ns4-ingress["ingress"] subgraph ns4-pod-1["Pod"] ns4-con-a["container"] end subgraph ns4-pod-2["Pod"] ns4-con-b["container"] ns4-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 client --> ns4-ingress --> ns4-con-a ns4-ingress --> ns4-con-b --> ns4-con-c classDef external fill:lightblue class client external classDef dashed stroke-dasharray: 5, 5 class ns1,ns2,ns3,ns4 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,ns4-pod-1,ns4-pod-2 dotted