Some clarification about the different layers of infrastructure automation…
- You have a Cloud provider or many machines(Azure, AWS, Google Cloud, OpenStack, Bare Metal)? Some lines of Terraform scripts and BAM! your machines and your regions are setup. The promise here is to be kind of portable.
- Now that you have your machines, or would want to configure themyou just have to write some lines of Chef, Puppet, Salt or Ansible lines and WOUSH! Your firewalls, ssl certificates, pam, ifconfig, etc (host configs and ‘bare metal’ apps) are magically installed and configured on all your nodes. You can even install Gluster and Swarm to consider your machines as a computation and storage ‘lake’. So that you won’t need to have an advanced container orchestration engine like Kubernete. At this point, you’ve got a nice PaaS like Cloud Foundry (but you’ll have to handle you’re load balancers and scaling strategies manually);-)
- Now that your hosts are configured, you just have to code (or consume) some DockerFile scripts and POW! your apps are running!
- And to link them together (for example, your beautiful web app with it’s database), you’ll use some lines of Docker-compose to WIZZZZZZ!
- And to manage all these containers and composition deployments across your clusters, you’ll use Kubernetes or Rancher to say WOW!
I hope this Infrastructure as code world is now clear! Please don’t tell me to replace Chef by Kubernetes or make a comparison between VM and containers anymore: all those layers are now mandatory to have a nice architecture.