DevOpsCon Cloud Workshop
-
Upload
sascha-moellering -
Category
Internet
-
view
191 -
download
5
Transcript of DevOpsCon Cloud Workshop
![Page 1: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/1.jpg)
Sascha Möllering | zanox AG
Cloud Workshop
![Page 2: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/2.jpg)
About me
Sascha Möllering
Lead Engineer / DevOps Hipster
zanox AG
http://autoscaling.io
@sascha242
![Page 3: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/3.jpg)
About meJava Magazin 11.14
Architektur im Kontext der Cloud: Patterns und Best Practices
AWS Virtual Cloud Summit
Continuous delivery in AWS using Docker
http://aws-summit.de/
Entwickler Spezial: Docker
Über den Wolken: Ein Erfahrungsbericht zum Docker-Einsatz in der Amazon Cloud
![Page 4: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/4.jpg)
Agenda
• AWS Overview
• Creating a cloud service
• Real World example
• Cloud deployment
• Q&A
![Page 5: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/5.jpg)
How can we scale?
![Page 6: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/6.jpg)
RegionRegionUS-WEST (N. California)
US-WEST (N. California) EU-WEST (Ireland)
EU-WEST (Ireland)
ASIA PAC (Tokyo)
ASIA PAC (Tokyo)
ASIA PAC (Singapore)
ASIA PAC (Singapore)
US-WEST (Oregon)US-WEST (Oregon)
SOUTH AMERICA (Sao Paulo)
SOUTH AMERICA (Sao Paulo)
US-EAST (Virginia)US-EAST (Virginia)
GOV CLOUDGOV CLOUD
ASIA PAC (Sydney)
ASIA PAC (Sydney)
Regions
Regions
EU-CENTRAL (Frankfurt)
EU-CENTRAL (Frankfurt)
AWS Overview
![Page 7: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/7.jpg)
ZonesZones
Availability
Zone
Availability
Zone
AWS Overview
![Page 8: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/8.jpg)
AWS Overview
EC2: Resizable compute capacity
AutoScaling: scale up or down
Route 53: Domain Name System
ELB: Load Balancing
Elastic IP: Static IP address
![Page 9: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/9.jpg)
AWS Overview
RDS: Managed database service
DynamoDB: NoSQL implementation
Redshift: data warehouse solution
ElastiCache: Managed cache
Kinesis: Service for streaming data
![Page 10: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/10.jpg)
AWS Overview
S3: Highly-scalable object storage
CloudFront: CDN implementation
CloudWatch: Monitoring service
IAM: Identity and Access Management
EMR: Managed Hadoop
CloudFormation: Configuration Mgmt
![Page 11: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/11.jpg)
Starting point
• How can we leverage the Cloud?
• Our application:– Simple Java based web application
– One application
– One database
– Runs in our own DC
![Page 12: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/12.jpg)
Creating a cloud service
• Initial setup:– Route53 for DNS
– One Elastic IP (static IPs for the Cloud)
– One EC2 instance• Web Application
• Database
– One AZ
![Page 13: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/13.jpg)
Creating a cloud service
Availability Zone
![Page 14: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/14.jpg)
Creating a cloud service
• Simple approach to scale:– Different EC2 instance type
• More RAM• More CPU power• More IOPS
• Approach will hit a barrier
![Page 15: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/15.jpg)
Creating a cloud service
• Problems:– No failover– No redundancy– Database and application on one instance– Does not scale very well
![Page 16: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/16.jpg)
Creating a cloud service
• Separate Web Application from DB– One EC2 instance for the Web Application– One EC2 instance for the DB– Or: Managed DB service (RDS)
• One AZ
![Page 17: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/17.jpg)
Creating a cloud service
Availability Zone
Database
![Page 18: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/18.jpg)
Creating a cloud service
• Problems:– No failover– No redundancy– Does still not scale very well
![Page 19: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/19.jpg)
Creating a cloud service
• Add an ELB
• Add EC2 instance for Web Application
• Different AZs
• Standby DB instance– Multi AZ setup in RDS
![Page 20: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/20.jpg)
Creating a cloud service
![Page 21: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/21.jpg)
Creating a cloud service
Availability Zone
Database
Availability Zone
Database
![Page 22: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/22.jpg)
Creating a cloud service
• Problems:– Still limited scaling capabilities– If one EC2 instance crashes, 50% less
capability
![Page 23: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/23.jpg)
Creating a cloud service
• Add additional EC2 instances
• Add read replicas in RDS
![Page 24: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/24.jpg)
Creating a cloud service
Availability Zone
Database
Availability Zone
Database
![Page 25: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/25.jpg)
Creating a cloud service
• Problems:– Naive implementation– Does not leverage AWS services– Limited scaling– Can be quite expensive
![Page 26: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/26.jpg)
Creating a cloud service
• Refactoring
• Introduce caches to take load from DB
• Use S3 and CloudFront to ship static content
• Store session data in DynamoDB
• Add Autoscaling
![Page 27: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/27.jpg)
Creating a cloud service
• Autoscaling– Automatic resizing of compute clusters
based on demand– Integrated to Amazon CloudWatch– Maximum and minimum pool sizes– Autoscaling policies triggered by
CloudWatch alarms
![Page 28: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/28.jpg)
Creating a cloud service
Requests
Elastic Load Balancing
Latency Metrics CPU Metrics
Amazon CloudWatch
MetricMonitoring
Alarm
Notification
Scale up/down
![Page 29: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/29.jpg)
Creating a cloud service
Availability Zone
Auto Scaling group
![Page 30: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/30.jpg)
Creating a cloud service
• Started with a simple web application
• Added several Amazon services
• Managed to shift load from application to services
• Added caches and CDN
• Added Autoscaling
![Page 31: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/31.jpg)
Creating a cloud service
• Next steps:– SOA/Microservices – Loose coupling: decouple interactions– Amazon services, don‘t reinvent the wheel– Database federation– Database sharding
![Page 32: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/32.jpg)
![Page 33: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/33.jpg)
Docker Deployment
• Amazon Services with Docker support:
– Amazon OpsWorks*
– Elastic Beanstalk
– EC2 Container Service
*by adding a custom Docker Layer
![Page 34: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/34.jpg)
Docker Deployment
• On EC2 level:– Using the Docker remote API
– EC2 User Data
![Page 35: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/35.jpg)
Docker Deployment
• Remote API– API to access Docker daemon
– Can be bound to specific host/port
– E.g. Jenkins can trigger deployments
– GET /containers/json
![Page 36: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/36.jpg)
Docker Deployment
• EC2 User Data– Data to configure instance during launch
• Install Docker
• Start Daemon
• Run Docker container
![Page 37: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/37.jpg)
Demo
• Elastic architecture that grows and shrinks
• Multiple AZs
• Use case: simple web app
• Elastic Beanstalk and Docker
• Postgres RDS DB
![Page 38: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/38.jpg)
Demo
![Page 39: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/39.jpg)
• JHipster– Yeoman generator– Yeoman is a scaffolding tool for webapps– Creates Spring Boot/AngularJS projects
Demo
![Page 40: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/40.jpg)
• Support for:– Maven/Gradle– Spring Security– Spring Data JPA– Elasticsearch– MongoDB– Cassandra– ...
Demo
![Page 41: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/41.jpg)
![Page 42: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/42.jpg)
Demo
![Page 43: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/43.jpg)
![Page 44: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/44.jpg)
![Page 45: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/45.jpg)
![Page 46: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/46.jpg)
![Page 47: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/47.jpg)
![Page 48: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/48.jpg)
![Page 49: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/49.jpg)
![Page 50: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/50.jpg)
![Page 51: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/51.jpg)
Elastic Beanstalk
• Docker support:– Dockerrun.aws.json specifies runtime– Dockerfile is an alternative
• EC2 instances using Docker 1.6
• No direct port mapping
• Local nginx reverse proxy
• Connects to IP of Docker container
![Page 52: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/52.jpg)
Elastic Beanstalk
• Dockerrun.aws.json:– Specifies Docker image (support for private
registries as well)– Defines port for local nginx– Support for volumes and logging as well
![Page 53: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/53.jpg)
Elastic Beanstalk
![Page 54: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/54.jpg)
Elastic Beanstalk
But … we didn’t specify RDS connection strings in our Container?
![Page 55: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/55.jpg)
• RDS specific values are exposed as ENV-variables
• Mapped into the Docker container
• Used by the application to connect to Postgres
Elastic Beanstalk
![Page 56: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/56.jpg)
Elastic Beanstalk
![Page 57: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/57.jpg)
Elastic Beanstalk
• nginx local proxy
• Config in sites-enabled and conf.d
• proxy-pass is http://docker
• Maps to container-ip
![Page 58: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/58.jpg)
Elastic Beanstalk
![Page 59: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/59.jpg)
Elastic Beanstalk
![Page 60: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/60.jpg)
Elastic Beanstalk
![Page 61: DevOpsCon Cloud Workshop](https://reader038.fdocuments.net/reader038/viewer/2022103002/55b6db72bb61ebe4588b45ae/html5/thumbnails/61.jpg)
Q&A