Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ContainerCon North America – Cloud Anti-Patterns
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Casey West
August 23, 2016
Technology
3
3.3k
ContainerCon North America – Cloud Anti-Patterns
Casey West
August 23, 2016
Tweet
Share
More Decks by Casey West
See All by Casey West
Voxxed Days Belgrade 2017: Deploying Image Recognition with TensorFlow and Kubernetes
caseywest
0
170
TechSummit Amsterdam 2017: Enhance! Deploying Image Recognition with TensorFlow and Kubernetes
caseywest
0
180
Said no CEO ever: Things that don't matter in the cloud
caseywest
12
3.4k
OperabilityIO 2016 – Achieving Cloud-Native Operability
caseywest
0
640
Abstractions – Pittsburgh – The Twelve-Factor Container + BONUS
caseywest
0
400
Velocity — Minimum Viable Platform
caseywest
0
280
Minimum Viable Platform - Devops MSP
caseywest
0
250
How Platforms Work
caseywest
0
700
Linux Conf Australia 2016 - The Twelve-Factor Container
caseywest
3
590
Other Decks in Technology
See All in Technology
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
340
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
2
750
全員が「作り手」になる。職能の壁を溶かすプロトタイプ開発。
hokuo
1
660
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
67k
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
4
2.4k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
13k
分析画面のクリック操作をそのままコード化 ! エンジニアとビジネスユーザーが共存するAI-ReadyなBI基盤
ikumi
0
120
無ければ作る! バイブコーディングで作ったものを一気に紹介
tatsuya1970
0
110
2026年はチャンキングを極める!
shibuiwilliam
8
1.8k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
270
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
1
850
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Amusing Abliteration
ianozsvald
0
91
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
920
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
150
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
440
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
93
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
52
Transcript
Cloud Anti-Patterns @caseywest 1 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
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
Cloud Anti-Patterns • Twitter @caseywest • Email
[email protected]
• Web
http://caseywest.com 3 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Thanks, Pivotal 4 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Act One The five stages of cloud-native 5 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
The five stages of cloud- native 1. Denial 2. Anger
3. Bargaining 4. Depression 5. Acceptance 6 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Have a seat on the couch 7 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Whatever makes you comfortable 8 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Now for some basic ground rules 9 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Rules We will talk about your delivery pipeline 10 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Rules We will talk about your architecture 11 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
Rules We will talk about your automation 12 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
⏰ 13 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
"Deploying my apps to 'the cloud' is paintful. Why?" 14
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Denial 15 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Denial Containers are just like tiny virtual machines 16 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Denial We don't need to automate continuous delivery 17 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anger 18 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anger Works on my machine 19 ! @caseywest #containercon #linuxcon
#containers #realworld #sorrynotsorry
Anger Dev is just #YOLO-ing shit to production 20 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Bargaining 21 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Bargaining We crammed this monolith into a container and called
it a microservice 22 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Bargaining "Bi-Modal IT" 23 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
Bargaining What if we create "microservices" that all talk to
the same data source? 24 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Depression 25 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Depression We made 200 microservices and forgot to set up
jenkins 26 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Depression We have an automated build pipeline but release twice
a year 27 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Acceptance 28 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Acceptance All software sucks 29 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Acceptance Respect CAP Theorem 30 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Acceptance Respect Conway's Law 31 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Acceptance Small batch size works for replatforming, too 32 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Acceptance Automate everything 33 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
⏰'s up 34 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
What have we learned? 35 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
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
Act Two The twelve-factor container 37 ! @caseywest #containercon #linuxcon
#containers #realworld #sorrynotsorry
You must be this tall to ride this ride 38
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Audience Participation • Containers? • Schedulers? • Cloud? 39 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Docker Docker Docker Docker Docker Docker Docker Docker 40 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
The factors http://12factor.net 41 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
1: One codebase tracked in revision control, many deploys 42
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Building separate images for staging and production 43 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Tags for dev and prod 44 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Best Practice Use the environment and/or feature flags 45 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
2: Explicitly declare and isolate dependencies 46 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
2: Explicitly declare and isolate dependencies 47 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Anti-pattern latest 48 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice Declare version numbers of upstream dependencies 49 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice Depend on base images for default filesystem and
runtimes 50 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
3: Store config in the environment 51 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Anti-pattern config.yml 52 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern properties.xml 53 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Hard-coded feature flags 54 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Best Practice This one is literally about environment variables 55
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice This one is literally about environment variables !
‑ 56 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
4: Treat backing services as attached resources 57 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Local disk 58 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
Anti-pattern Local disk 59 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
Anti-pattern Local disk 60 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
Best Practice Connect to network- attached services using connection info
from the environment 61 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
5: Strictly separate build and run stages 62 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Install on deploy 63 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Best Practice Build immutable images then run those images 64
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
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
Best Practice Respect the lifecycle: build, run, destroy 66 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
6: Execute the app as one or more stateless processes
67 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice Schedule LRPs by distributing them across a cluster
of physical hardware 68 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern NFS 69 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern NFS Need I say more? 70 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
7: Export services via port binding 71 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Best Practice port = Env.fetch(:PORT) 72 ! @caseywest #containercon #linuxcon
#containers #realworld #sorrynotsorry
Best Practice my $port = $ENV{PORT}; 73 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Best Practice private String getPort() { Map<String, String> env =
System.getenv(); return env.get("PORT"); } 74 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice let port = env::var("PORT").unwrap() 75 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
8: Scale out via the process model 76 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice Horizontally scale by adding instances 77 ! @caseywest
#containercon #linuxcon #containers #realworld #sorrynotsorry
9: Maximize robustness with fast startup and graceful shutdown 78
! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
10: Keep development, staging, and production as similar as possible
79 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice Run containers in development 80 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
11: Treat logs as event streams 81 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Random log files #yolo'd all over the file system
82 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Best Practice STDOUT STDOUT STDOUT STDOUT 83 ! @caseywest #containercon
#linuxcon #containers #realworld #sorrynotsorry
12: Run admin/ management tasks as one-off processes 84 !
@caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
Anti-pattern Custom containers for tasks 85 ! @caseywest #containercon #linuxcon
#containers #realworld #sorrynotsorry
Best Practice Reuse application images with specific entrypoints for tasks
86 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
More factors? • API first • Secrets management • Health
metrics • Global distribution 87 ! @caseywest #containercon #linuxcon #containers #realworld #sorrynotsorry
You are now cloud-native 88 ! @caseywest #containercon #linuxcon #containers
#realworld #sorrynotsorry
Repeatability Reliability Resiliency 89 ! @caseywest #containercon #linuxcon #containers #realworld
#sorrynotsorry
@caseywest Let's be friends ! 90 ! @caseywest #containercon #linuxcon
#containers #realworld #sorrynotsorry