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
Declare Container Deployment as Terraform Package
Manifest Driven, Repeatable Delivery from a Packaged Artefact
Build and Package
Tokens and Properties
Manifest Driven Deployment using Desired State
Kubernetes Secrets Change