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

Taming the Modern Data Center

Taming the Modern Data Center

Today we are plagued by hundreds of choices when architecting a modern data center. Should our machines be virtual or physical? Should we use containers or Docker? Should we use a public cloud provider or a private cloud provider? Which configuration management tool is best to use? What about IaaS, PaaS, and SaaS? It would be manageable if these were binary choices; however, we often find ourselves in a hybrid environment.

As more operations choices are added to your data center, whether through company acquisitions, a growing development team, or general technical debt, managing complexity between legacy and new systems becomes a nightmare. Yet the end goal is still the same — safely deploy your application to your infrastructure. We need to tame our data centers by managing change across systems, enforcing policies, and by establishing a workflow for both developers and operations engineers to build in a collaborative environment.

This talk will discuss the problems faced in the modern data center, and how a set of innovative open source tooling can be used to tame the rising complexity curve. Join me on an adventure with Packer, Consul, and Terraform as we take your data center from chaos to control.

Seth Vargo

May 17, 2017
Tweet

More Decks by Seth Vargo

Other Decks in Technology

Transcript

  1. @sethvargo  RISING DATACENTER COMPLEXITY DC VM VM VM VM

    VM VM VM VM VM VM VM VM VM VM VM VM C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
  2. @sethvargo  RISING DATACENTER COMPLEXITY DC-01 DC-02 VM VM VM

    VM VM VM VM VM C C C C C C C C C C C C C C C C C C C C C C C C
  3. ACQUIRE PROVISION UPDATE DESTROY G U ’ U ’ U

    U ’ U VENDOR DC OPS SYSADMIN
  4. ACQUIRE PROVISION UPDATE DESTROY G U ’ U ’ U

    U ’ U U ’ U VENDOR DC OPS SYSADMIN DC OPS
  5. @sethvargo resource "digitalocean_droplet" "web" { name = "tf-web" size =

    "512mb" image = "centos-5-8-x32" region = "sfo1" } resource "dnsimple_record" "hello" { domain = "example.com" name = "test" value = "${digitalocean_droplet.web.ipv4_address}" type = "A" } main.tf
  6. @sethvargo resource "digitalocean_droplet" "web" { name = "tf-web" size =

    "512mb" image = "centos-5-8-x32" region = "sfo1" } resource "dnsimple_record" "hello" { domain = "example.com" name = "test" value = "${digitalocean_droplet.web.ipv4_address}" type = "A" } main.tf
  7. @sethvargo resource "digitalocean_droplet" "web" { name = "tf-web" size =

    "512mb" image = "centos-5-8-x32" region = "sfo1" } resource "dnsimple_record" "hello" { domain = "example.com" name = "test" value = "${digitalocean_droplet.web.ipv4_address}" type = "A" } main.tf
  8. @sethvargo resource "digitalocean_droplet" "web" { name = "tf-web" size =

    "512mb" image = "centos-5-8-x32" region = "sfo1" } resource "dnsimple_record" "hello" { domain = "example.com" name = "test" value = "${digitalocean_droplet.web.ipv4_address}" type = "A" } main.tf
  9. @sethvargo + digitalocean_droplet.web backups: "" => "<computed>" image: "" =>

    "centos-5-8-x32" ipv4_address: "" => "<computed>" ipv4_address_private: "" => "<computed>" name: "" => "tf-web" private_networking: "" => "<computed>" region: "" => "sfo1" size: "" => "512mb" status: "" => "<computed>" + dnsimple_record.hello domain: "" => "example.com" Terminal
  10. @sethvargo + digitalocean_droplet.web backups: "" => "<computed>" image: "" =>

    "centos-5-8-x32" ipv4_address: "" => "<computed>" ipv4_address_private: "" => "<computed>" name: "" => "tf-web" private_networking: "" => "<computed>" region: "" => "sfo1" size: "" => "512mb" status: "" => "<computed>" + dnsimple_record.hello domain: "" => "example.com" Terminal
  11. @sethvargo + digitalocean_droplet.web backups: "" => "<computed>" image: "" =>

    "centos-5-8-x32" ipv4_address: "" => "<computed>" ipv4_address_private: "" => "<computed>" name: "" => "tf-web" private_networking: "" => "<computed>" region: "" => "sfo1" size: "" => "512mb" status: "" => "<computed>" + dnsimple_record.hello domain: "" => "example.com" Terminal
  12. @sethvargo + digitalocean_droplet.web backups: "" => "<computed>" image: "" =>

    "centos-5-8-x32" ipv4_address: "" => "<computed>" ipv4_address_private: "" => "<computed>" name: "" => "tf-web" private_networking: "" => "<computed>" region: "" => "sfo1" size: "" => "512mb" status: "" => "<computed>" + dnsimple_record.hello domain: "" => "example.com" Terminal
  13. @sethvargo size: "" => "512mb" status: "" => "<computed>" +

    dnsimple_record.hello domain: "" => "example.com" domain_id: "" => "<computed>" hostname: "" => "<computed>" name: "" => "test" priority: "" => "<computed>" ttl: "" => "<computed>" type: "" => "A" value: "" => "${digitalocean_droplet.web.ipv4_address}" Terminal
  14. @sethvargo Service Discovery DNS interface is zero-touch - no application

    changes are required HTTP API for modern applications returns rich metadata Allows discovery of both internal and external services
  15. @sethvargo Health Checking Integrates with the service discovery layer DNS

    does not return results for unhealthy services or nodes HTTP endpoints can list health and query by health
  16. @sethvargo KV Store Highly available storage for configuration and feature

    flags Feature flags without big CM processes Supports blocking queries for "pushing" changes Optional ACLs to protect sensitive information at paths
  17. @sethvargo Multi-Datacenter Usually query the local datacenter Can query other

    datacenters however you may need to Can view all datacenters within one OSS UI
  18. @sethvargo Events, Exec, and Watches Build powerful orchestration tools Implement

    client-side leader election Distributed locking and event system All approaches proven to scale to thousands of agents
  19. @sethvargo $ consul event deploy 6DF7FE # ... $ consul

    watch -type event -name deploy /usr/bin/deploy.sh # ... $ consul exec -service web /usr/bin/deploy.sh # ... Terminal
  20. @sethvargo Security Encrypt gossip traffic with shared key or keyring

    (UDP) Encrypt HTTP traffic with TLS (TCP) Advanced ACLs and token-based system allows for massive scale