Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Automating the Cloud - Integrating Puppet with Cloud Infrastructures 2016

Automating the Cloud - Integrating Puppet with Cloud Infrastructures 2016

So, you've applied your manifests to a number of servers, and puppet is working great! Now you've grown more ambitious and want to puppetize an infrastructure on a public cloud like AWS. But after weeks of clicking around in the AWS console and manually hooking up EC2 instances in Puppet you find yourself thinking: "There must be an easier and more structured way to do this, RIGHT?" Well, there is! This talk combines all the secrets I learned at PuppetConf 2015 and will help you leverage tools like puppetlabs-aws, terraform, hiera, cloud-init, CodeDeploy and foreman (autosigning and default_hostgroup) to deploy your "Infrastructure as Code" and overcome the difficulties of bootstrapping and managing a variable number of distributed systems using Puppet. We focus primarily on AWS, but the principles and difficulties apply to most public cloud platforms and all distributed systems in general.

Remco Overdijk

February 05, 2016
Tweet

Other Decks in Technology

Transcript

  1. AUTOMATING THE CLOUD Single Server Infrastructure Issues PROBLEM Limited headroom

    Service issues affect other services One outage means downtime Maintenance during deployment 4
  2. AUTOMATING THE CLOUD Single Server Infrastructure Issues 6 Scalability Service

    Isolation Redundancy Zero-Downtime Deployments SOLUTION PROBLEM Limited headroom Affected services One outage means downtime Maintenance during deployment
  3. • AWS specific, but applies to most (if not any)

    Cloud platforms. AUTOMATING THE CLOUD Scope 7 • LAMP stack, but works for most stacks. • Mix & match for best results. • The method that works best depends on your own setup. • Based on Puppet Open Source. • Things may be different in Puppet Enterprise (Orchestrator). • Ready-to-go AMI’s may be faster to launch, but harder to maintain.
  4. AUTOMATING THE CLOUD AWS Infrastructure Principles Read more https://media.amazonwebservices.com/AWS_Cloud_Best_Practices.pdf 8

    • Infrastructure is failure-prone; Service robustness is achieved through redundancy. • EC2 instances should be considered volatile. • Scaling should be both vertical and horizontal. • Legacy applications aren’t magically cloud-ready. • Loose coupling improves scalability. • Isolation increases security and decreases dependencies.
  5. • IAM Server Certificates • IAM Instance Profiles • IAM

    Roles • IAM Policies • IAM Role Policies • CodeDeploy Apps • CodeDeploy Deployment Groups • EC2 Instances • EC2 Elastic IP’s • CloudWatch Metrics • CloudWatch Alarms • EIP Attachments • ElastiCache Subnet Groups Provisioning Infrastructure AWS Resources • ElastiCache Clusters • ElastiCache Parameter Groups • EC2 Elastic Load Balancers • ELB Health Checks • ELB App Cookie Stickiness Policies • Key Pairs • RDS Subnet Groups • RDS Parameter Groups • RDS DB Instances • Route53 Zones • Route53 Records • S3 Buckets • S3 Policies • S3 CORS Configuration • Security Groups • SNS Topics • SNS Topic Subscriptions • VPC’s • VPC Subnets • VPC Internet Gateways • VPC (S3) Endpoints • VPC Route Tables • VPC Customer Gateways • VPC VPN Gateways • VPC DHCP Option Sets • VPC VPN Routes 11
  6. Provisioning Infrastructure That’s a lot of clicking 13 • Manual

    changes are extremely error-prone. • Manual changes result in an inconsistent platform. • Collaboration is difficult; People are scared to break things. • Changes are scattered throughout the AWS console.
  7. • Uses the same DSL as your ”regular” Puppet code.

    Provisioning Infrastructure Puppetlabs-AWS 15 • Most benefits from ”regular” Puppet; like relationships, defined types and the graph. • At the moment this module only supports a few of the resources in the AWS API. • Does NOT run using agents / puppet masters, but manually from your workstation using `puppet apply`. • Not as idempotent as you’d like at times. Read more https://github.com/puppetlabs/puppetlabs-aws https://forge.puppetlabs.com/puppetlabs/aws
  8. Provisioning Infrastructure Hashicorp Terraform • Uses HCL, which looks a

    lot like Puppet DSL. • Maintains a dependency graph, just like Puppet. • Runs from your workstation. • Is not AWS API feature complete, but covers most services. • Allows flexible scaling and destruction. 17 Read more https://github.com/hashicorp/terraform https://www.terraform.io/
  9. Provisioning Infrastructure Puppet? 20 • Automated Infrastructure is awesome. •

    We like Puppet too. • Empty EC2 instances don’t serve websites. • How do we connect Puppet to the infrastructure we’ve just provisioned?
  10. Bootstrapping Puppet So, Cattle. • Configuration should be at type

    level. Not node level. • Nodes should be replaceable. • Data on the nodes should be considered volatile. • Only versioned and cached content should be present. 25 • Provisioning should be automated; No manual intervention should be required.
  11. Bootstrapping Puppet Puppet: Autosigning • Automates indoctrination for new nodes.

    • Multiple mechanisms available: Naïve, Basic and Policy-based Autosigning. 26 View & try https://github.com/MaxServ/Terraform-Puppet-Demo/blob/master/Puppet/puppet.conf Read more https://docs.puppetlabs.com/puppet/latest/reference/ssl_autosign.html Be very careful with naïve autosigning. Don’t do it in production without strict firewalls.
  12. Bootstrapping Puppet Hiera • Configuration at `type` level instead of

    `clientcert`. • Use node-level overrides when required. • Combine with host `%H` mount points for master/slave. 29 View & try https://github.com/MaxServ/Terraform-Puppet-Demo/tree/master/Puppet/hieradata Read more https://docs.puppetlabs.com/hiera/latest/ https://docs.puppetlabs.com/guides/file_serving.html#file-server-configuration
  13. Bootstrapping Puppet Foreman: Default Host Groups • The same idea

    as Autosigning in Puppet. • Uses a Foreman Plugin. • Use facts for assigning host groups. 32 Read more https://github.com/theforeman/foreman_default_hostgroup
  14. Bootstrapping Puppet Assigning Configuration: Facter 34 View & try https://github.com/MaxServ/Terraform-Puppet-Demo/blob/master/Terraform/templates/userdata.tpl

    https://github.com/MaxServ/Terraform-Puppet-Demo/blob/master/Puppet/Vagrantfile Read more https://docs.puppetlabs.com/facter/2.4/custom_facts.html#structured-data-facts
  15. Bootstrapping Puppet AWS: User data • User data allows you

    to pass configuration data to an instance during launch. • User data can be used to provide cloud-init configuration. 35
  16. Bootstrapping Puppet Cloud-init 37 • Handles early initialization of cloud

    instances. • Supports EC2, CloudStack, OpenStack, OnApp, OpenNebula, RHEVm, vSphere & more. • Can install packages, do basic config and more. • Is able to bootstrap Puppet. Read more http://cloudinit.readthedocs.org/en/latest/index.html http://cloudinit.readthedocs.org/en/latest/topics/examples.html#setup-and-run-puppet
  17. Bootstrapping Puppet Don’t forget to clean up! • Revoke Puppet-CA

    certificates for decommissioned nodes. • Clean up Salt keys. • Remove old reports, exported resources and catalogs from PuppetDB. • Clean connected resources like Load Balancers. 40 Sloppiness will catch up with you when it hurts the most.
  18. Demo Terraform & Puppet THIS DEMONSTRATION INCLUDES: VIEW & TRY

    THE FULL SOURCE OF THIS DEMO https://github.com/MaxServ/Terraform-Puppet-Demo A B C Docker container running a Puppetmaster. AWS Stack with 4 webservers using Terraform. Webserver provisioning using Puppet based on type. 42
  19. 44