4. Identify your pain points
- Our release cycles were slow - Every 3-6 months deployments
- Monolithic code is complex
- Difficult to implement change
- Test surface is large (feature pileup)
- High Risk deployments
- Low team morale
5. Taking the First step
- Reduce operational overhead on monolith
- Target low hanging fruit
- For Webjet, this was automated deployments
- Without downtime
- Teams gained confidence
- Business gained confidence
- Agile DevOps
- Automate yourself out of a job
- Deploy weekly
6. Selecting first candidate
- Decoupling the monolith
- Don’t decouple for the sake of decoupling
- Don’t over-engineer
- If it ain’t broke, don’t fix it
- Low hanging fruit
- Do what adds value
- MVP
- Found Low critical, valuable feature candidate
- Write it in .NET Core
7. Azure Web Apps
- We deployed our first web app
- IIS as a service model
- don’t have to manage VMs and infrastructure
- Less operational overhead
- At some point we had 60
- - Allowed teams to learn about microservices
- - Less unknowns (Managed IIS)
- Focus on agility and value
8. New pain points
- We needed more
- Became quite expensive at scale
- 60 apps
- 60 servers
- 120 servers data center HA
- 240 servers = cross geo HA
- Shared infrastructure = noisy neighbour
- Lot's more infrastructure
- Release cycles not fast enough
- Network not efficient enough
9. Era of containers
- Why containers ???
- Containers are enablers
- Resource isolation = contain noisy neighbour
- Port mappings
- Host machines are immutable
- Give me a kernel
- Stateless architectures
- Utilise PaaS for data (S3,blob etc)
- Immutable builds
- Don’t install anything on a build server ever!
- Only docker :)
- Jenkins pipelines as code
- Describe entire app and its dependencies in a single dockerfile
10. Choosing an orchestrator
- What is a container orchestrator?
- Deploys and runs containers
- Scheduler
- Monitor container health, restarts, probes
- Enforce resource limits
- DC/OS by Mesosphere , Kubernetes , Docker Enterprise ??? which one ?
- It doesn’t matter which one
- We did not lock ourselves to the platform
- We chose DC/OS
- We switched to K8s a week after going live
11. Kubernetes
- Platform to build platform
- Desired State Configuration
- Entire infrastructure described in a YAML file
- kubectl apply -f environment.yaml
- Manages ports for containers
- Internal DNS
- Ingress Traffic
- Deployments & Pods
12. VM VM VM VM VM
KUBERNETES API db
node node node node node
*Deployments - replicas=3 How to deploy=graceful
* Pod
- name=app
- port=80
- myimage:v0.0.1
- environment variables
appappapp app
*Services
- Describes
traffic
SERVICE (private DNS)SERVICE (type = LoadBalancer)
LOAD
BALANCER
(PUBLIC IP)
OTHERS
● CONFIGMAP
● SECRETS (passwordskeys)
13. KUBERNETES API db- Namespace
- Ingress
- Deployment
- Pod
- Ingress controller
- Service
- Type = LoadBalancer
Ingress controller
LOAD
BALANCER
(PUBLIC IP)- Namespace
- flights
- Deployment
- Pod
- flights-search-service
- Service
- Type = ClusterIP
- Ingress
- Host = host.com
- Path /api/flightsearch
Service
Pod 1
Pod 2
Ingress
Host.com
/api/flightssearch
Service
Pod A
Pod B
Ingress
Host.com
/api/bookservice
14. What’s next
- Scaling for performance
- Scale traffic to 100k+ requests sec
- Scheduling for scale
- CPU + Memory allocation efficiency
- Capacity planning
- Quality of Service tuning
- Multitenancy
- Performance engineering
- Flame graph style metrics
- Developer Experience Improvements
15. We're hiring :
Careers Email : rrhh@sunhotels.com
Jobs Link : https://www.linkedin.com/company/webbeds-europe/jobs/