Pro Yearly is on sale from $80 to $50! »

ContainerCon North America – Cloud Anti-Patterns

1ed0b822068d34032bca7d2beeb2f846?s=47 Casey West
August 23, 2016

ContainerCon North America – Cloud Anti-Patterns

1ed0b822068d34032bca7d2beeb2f846?s=128

Casey West

August 23, 2016
Tweet

Transcript

  1. Cloud Anti-Patterns @caseywest 1 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  2. A word about consent… Please do: Take pictures, tweet, take

    notes. Please don't: Record or live stream without my explicit consent. 2 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  3. Cloud Anti-Patterns • Twitter @caseywest • Email casey@geeknest.com • Web

    http://caseywest.com 3 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  4. Thanks, Pivotal 4 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  5. Act One The five stages of cloud-native 5 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  6. The five stages of cloud- native 1. Denial 2. Anger

    3. Bargaining 4. Depression 5. Acceptance 6 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  7. Have a seat on the couch 7 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  8. Whatever makes you comfortable 8 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  9. Now for some basic ground rules 9 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  10. Rules We will talk about your delivery pipeline 10 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  11. Rules We will talk about your architecture 11 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  12. Rules We will talk about your automation 12 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  13. ⏰ 13 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  14. "Deploying my apps to 'the cloud' is paintful. Why?" 14

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  15. Denial 15 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  16. Denial Containers are just like tiny virtual machines 16 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  17. Denial We don't need to automate continuous delivery 17 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  18. Anger 18 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  19. Anger Works on my machine 19 ! @caseywest #containercon #linuxcon

    #containers #realworld #sorrynotsorry
  20. Anger Dev is just #YOLO-ing shit to production 20 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  21. Bargaining 21 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  22. Bargaining We crammed this monolith into a container and called

    it a microservice 22 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  23. Bargaining "Bi-Modal IT" 23 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  24. Bargaining What if we create "microservices" that all talk to

    the same data source? 24 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  25. Depression 25 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  26. Depression We made 200 microservices and forgot to set up

    jenkins 26 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  27. Depression We have an automated build pipeline but release twice

    a year 27 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  28. Acceptance 28 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  29. Acceptance All software sucks 29 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  30. Acceptance Respect CAP Theorem 30 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  31. Acceptance Respect Conway's Law 31 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  32. Acceptance Small batch size works for replatforming, too 32 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  33. Acceptance Automate everything 33 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  34. ⏰'s up 34 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  35. What have we learned? 35 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  36. Cloud-native operability is* 1. Microservices Architecture 2. Devops Culture 3.

    Continuous Delivery Pick Any Three * Not always true. 36 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  37. Act Two The twelve-factor container 37 ! @caseywest #containercon #linuxcon

    #containers #realworld #sorrynotsorry
  38. You must be this tall to ride this ride 38

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  39. Audience Participation • Containers? • Schedulers? • Cloud? 39 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  40. Docker Docker Docker Docker Docker Docker Docker Docker 40 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  41. The factors http://12factor.net 41 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  42. 1: One codebase tracked in revision control, many deploys 42

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  43. Anti-pattern Building separate images for staging and production 43 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  44. Anti-pattern Tags for dev and prod 44 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  45. Best Practice Use the environment and/or feature flags 45 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  46. 2: Explicitly declare and isolate dependencies 46 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  47. 2: Explicitly declare and isolate dependencies 47 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  48. Anti-pattern latest 48 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  49. Best Practice Declare version numbers of upstream dependencies 49 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  50. Best Practice Depend on base images for default filesystem and

    runtimes 50 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  51. 3: Store config in the environment 51 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  52. Anti-pattern config.yml 52 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  53. Anti-pattern properties.xml 53 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  54. Anti-pattern Hard-coded feature flags 54 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  55. Best Practice This one is literally about environment variables 55

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  56. Best Practice This one is literally about environment variables !

    ‑ 56 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  57. 4: Treat backing services as attached resources 57 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  58. Anti-pattern Local disk 58 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  59. Anti-pattern Local disk 59 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  60. Anti-pattern Local disk 60 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  61. Best Practice Connect to network- attached services using connection info

    from the environment 61 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  62. 5: Strictly separate build and run stages 62 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  63. Anti-pattern Install on deploy 63 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  64. Best Practice Build immutable images then run those images 64

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  65. Painfully Obvious Best Practices 1. Eat when hungry 2. Sleep

    when tired 3. Book Casey West for speaking gigs 65 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  66. Best Practice Respect the lifecycle: build, run, destroy 66 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  67. 6: Execute the app as one or more stateless processes

    67 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  68. Best Practice Schedule LRPs by distributing them across a cluster

    of physical hardware 68 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  69. Anti-pattern NFS 69 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry

  70. Anti-pattern NFS Need I say more? 70 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  71. 7: Export services via port binding 71 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  72. Best Practice port = Env.fetch(:PORT) 72 ! @caseywest #containercon #linuxcon

    #containers #realworld #sorrynotsorry
  73. Best Practice my $port = $ENV{PORT}; 73 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  74. Best Practice private String getPort() { Map<String, String> env =

    System.getenv(); return env.get("PORT"); } 74 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  75. Best Practice let port = env::var("PORT").unwrap() 75 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  76. 8: Scale out via the process model 76 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  77. Best Practice Horizontally scale by adding instances 77 ! @caseywest

    #containercon #linuxcon #containers #realworld #sorrynotsorry
  78. 9: Maximize robustness with fast startup and graceful shutdown 78

    ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  79. 10: Keep development, staging, and production as similar as possible

    79 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  80. Best Practice Run containers in development 80 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  81. 11: Treat logs as event streams 81 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  82. Anti-pattern Random log files #yolo'd all over the file system

    82 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  83. Best Practice STDOUT STDOUT STDOUT STDOUT 83 ! @caseywest #containercon

    #linuxcon #containers #realworld #sorrynotsorry
  84. 12: Run admin/ management tasks as one-off processes 84 !

    @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  85. Anti-pattern Custom containers for tasks 85 ! @caseywest #containercon #linuxcon

    #containers #realworld #sorrynotsorry
  86. Best Practice Reuse application images with specific entrypoints for tasks

    86 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  87. More factors? • API first • Secrets management • Health

    metrics • Global distribution 87 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
  88. You are now cloud-native 88 ! @caseywest #containercon #linuxcon #containers

    #realworld #sorrynotsorry
  89. Repeatability Reliability Resiliency 89 ! @caseywest #containercon #linuxcon #containers #realworld

    #sorrynotsorry
  90. @caseywest Let's be friends ! 90 ! @caseywest #containercon #linuxcon

    #containers #realworld #sorrynotsorry