Who am I?
Distinguished Engineer
IBM Cloud
Who am I?
Technical Committee
Foundation Board of Directors
Developer Infrastructure Core Team
Is Cloud Native good?
yes
Is not-Cloud Native bad?
no
Do you need to write Cloud Native apps to use cloud?
no
Are you a bad person if don't write Cloud Native apps?
no
Cloud-native applications are meant to function "in a world of cloud
computing that is ubiquitous and flexible." Applications can be
developed on a cloud platform, then deployed to different clouds where
supporting software stacks will help them run at scale.
Information Week - Jul 30, 2015
The Cloud Native Computing Foundation will harmonize emerging
technologies and foster innovation in container packaged, dynamically
scheduled, and microservices based application development and
operations.
Cloud Native Is ...
- Architectural and operational approach
- Assume cloud
- Assume failures
- Microservices
- Containerized?
12 Factor Application
I. Codebase - One codebase tracked in revision control, many deploys
II. Dependencies - Explicitly declare and isolate dependencies
III. Config - Store config in the environment
IV. Backing services - Treat backing services as attached resources
V. Build, release, run - Strictly separate build and run stages
VI. Processes - Execute the app as one or more stateless processes
VII. Port binding - Export services via port binding
VIII. Concurrency - Scale out via the process model
IX. Disposability - Maximize robustness with fast startup and graceful shutdown
X. Dev/prod parity - Keep development and production as similar as possible
XI. Logs - Treat logs as event streams
XII. Admin processes - Run admin/management tasks as one-off processes
Except for III
I use config files
VI. Stateless
If /dev/null is fast in web scale I will use it. Is it web scale?
Use a service to store your data - like a database
Is that database service web scale?
Go google and watch "MongoDB is Web Scale"
A Foolish Consistency is the Hobgoblin of Little Minds
Cloud Native / 12 Factor is **A** great approach
You still have to think.
As an application developer,
I want to deploy and run an application on the internet
so that my customers all over the world can consume it.
As an operator,
I want to deploy the application across multiple clouds
so that my service survives issues in any one of them.
THIS WORKS
I'm doing it myself as we speak
10-20k VMs per-day
10 Cloud Regions in 7 clouds
Only using OpenStack APIs
Our VMs are everywhere
- Rackspace: Dallas, Chicago, DC
- Internap: New York
- OpenStack Innovation Center: San Antonio
- OVH: Strassbourg, Gravelines
- Vexxhost: Montreal
- Blue Box: San Jose
- Red Hat: Phoenix
We also have servers
Infra Cloud - Hardware donated by HPE
Architecture
Gerrit
-
Traditional 'Enterprise' Java Application
- Nova VM, Cinder Volume, Trove DB
- Scale out farm of git replicas
nodepool
- Cloud Native
- Purpose built in Python
- Keeps a pool of ready to go nodes
- Multi-cloud
- Fully elastic - responds to demand
Run what you want
12-factor application on Kubernetes with Kuryr
Traditional Java web application behind NAT with a Floating IP
Kerberos Server on the Internet with Fixed IP and Reverse DNS
Baremetal for hardware enabled transcoding via Ironic
DevOps recognizes the need for Dev and Ops to collaborate
Rigid devotion to any guidelines without judgement is deadly