infrastructure as code für anfänger - xp days...packer pipeline vcs provision temp instance os...
TRANSCRIPT
"Infrastructure as Code" für Anfänger
XP Days Germany
David Völkel
27.11.2015
@davidvoelkel
@softwerkskammer
@codecentric
TDD & Design
CD & DevOp
Continuous Integration
Automatic Build
VCS Application
Automation
Quality
Reproducible
Faster
Docs
Application VCS
Tip of the Iceberg?
App VCS
Tip of the Iceberg?
VM
App
OS & Packages
Config
OS & Packages
Network
VCS
Continuous Delivery
Infrastructure?
VM
App
OS & Packages
Config
OS & Packages
Network
VCS
Continuous Delivery
Infrastructure as Code
VM
Software
OS & Packages
Config
OS & Packages
Network
VCS
Agenda
1. Deployment
2. Provisioning
3. Environments
4. VM Management
5. SDN
DEMO
VM
App
OS & Packages
Config
OS & Packages
Network
1.DEPLOYMENT
Image: Rigo Peter
VM
App
OS & Packages
Config
OS & Packages
Deployment
SSH/SCP
mvn Plugins
Server
App
Auto Deployment
CI Build Pipeline
Server
Build & Unit Tests
App
VCS
Deployment
Integration Tests
App Server Options
Distro Package Manager
Fat-JARs
Image: RRZEicons
2. PROVISION
VM
App
OS & Packages
Config
OS & Packages
Box by Даниил Пронин from the Noun Project
Snowflake Servers
Snowflake Servers
Work of Art
Image: KUKA Systems GmbH
Configuration Management
Server Provisioning
Installation
Config VCS
Configuration Management
CFEngine Chef
Puppet
Salt
Ansible
90er 00er 10er
Desired State Configuration
Declarative
Tests itself
Idempotent
> mvn package (per jdeb)
> scp software_and_provi.deb server
# dpkg –i *.deb
# puppet apply
> smoketest server
Server
Software
OS & Packages
Config
OS & Packages
Our Provision 1.0
Build & Unit Tests VCS
Provision Deployment
Refactoring to 2.0
no shell
no jdeb
faster
easier
Windows OK
3.ENVIRONMENTS
Computer by Danny Sturgess from the Noun Project
VM
App
OS & Packages
Config
OS & Packages
DEV TEST PROD
Configuration
Global vs. Environment
mail.send.retry=3
reminder.intervall=7
mysql.url = jdbc:mysql://test-mysql-db/users
mySql.driver = com.mysql.jdbc.Driver
mySql.user = username
mySql.password = secretPassword
oracle.url = jdbc:oracle://oracle-test/bills
oracle.driver = oracle.jdbc.driver.OracleDriver
oracle.user = username2
oracle.password = secretPassword2
Configuration
Global vs. Environment
mail.send.retry=3
reminder.intervall=7
mysql.url = jdbc:mysql://test-mysql-db/users
mySql.driver = com.mysql.jdbc.Driver
mySql.user = username
mySql.password = secretPassword
oracle.url = jdbc:oracle://oracle-test/bills
oracle.driver = oracle.jdbc.driver.OracleDriver
oracle.user = username2
oracle.password = secretPassword2
Configuration
Global vs. Environment
mail.send.retry=3
reminder.intervall=7
mySql.driver = com.mysql.jdbc.Driver
oracle.driver = oracle.jdbc.driver.OracleDriver
mysql.url = jdbc:mysql://test-mysql-db/users
mySql.user = username
mySql.password = secretPassword
oracle.url = jdbc:oracle://oracle-test/bills
oracle.user = username2
oracle.password = secretPassword2
Configuration
Global vs. Environment
deploy(ENV)
mail.send.retry=3
reminder.intervall=7
mySql.driver = com.mysql.jdbc.Driver
oracle.driver = oracle.jdbc.driver.OracleDriver
mysql.url = jdbc:mysql://test-mysql-db/users
mySql.user = username
mySql.password = secretPassword
oracle.url = jdbc:oracle://oracle-test/bills
oracle.user = username2
oracle.password = secretPassword2
Latest Config
No branching!
4. VM MANAGEMENT
Data Center Server Virtualization by Rahul KULKARNI from the Noun Project
VM
App
OS & Packages
Config
OS & Packages
Desired State Configuration
Drift! Drift
Phoenix Server
“clean slate“
Clone Golden Master
vs. DSC?
Phoenix Image: RoFra
Technology
Packer & AWS AMI
VMWare VSphere
Phoenix Image: RoFra
Security Patches?
Rotate by Thomas Helbig from the Noun Project
„Immutable Servers
Freeze State
Logs
Config
DB/Storage
Image: Deutsche Fotothek
Golden Master
VM Image
Pipeline
VCS Provision
DEV VM
OS & Packages
Clone VM & Provision
Golden Master
VM Image
Pipeline
VCS Provision
DEV VM
OS & Packages
VCS App Code
Build & UT
Clone VM & Provision
Golden Master
VM Image
Pipeline
VCS Provision
DEV VM
App & DEV Config
OS & Packages
Deploy
VCS App Code
Build & UT
Config
Clone VM & Provision
Golden Master
VM Image
Pipeline
VCS Provision
DEV VM
App & DEV Config
OS & Packages
Deploy
VCS App Code
Build & UT
Config
Clone VM & Provision
Int Test
Pipeline
VCS Provision
Deploy
VCS App Code
Build & UT
Config
Int Test
Deploy Test
Test VM
App & TEST Config
OS & Packages
DEV VM
App & DEV Config
OS & Packages
Clone VM & Provision
Pipeline
VCS Provision
Deploy
VCS App Code
Build & UT
Config
Int Test
Deploy Test
Test VM
App & TEST Config
OS & Packages
Clone VM & Provision
Pipeline
VCS Provision
Deploy
VCS App Code
Build & UT
Config
Int Test
Deploy Test
Test VM
App & TEST Config
OS & Packages
Clone VM & Provision
Deploy Prod
…
Golden Master AMI
Packer Pipeline
VCS Provision
Temp Instance
Packer
Golden Master AMI
Packer Pipeline
VCS Provision
Temp Instance
OS & Packages
Packer
Golden Master AMI
Packer Pipeline
VCS Provision
Temp Instance
OS & Packages
Packer
Provisioned AMI
Demo VM
App
OS & Packages
Config
OS & Packages
Network
Ansible Jar Deploy
Ansible Provision
Vagrant, Packer, Ansible EC2 Module
Terraform
https://github.com/davidvoelkel/infrastructure-as-code-demo https://youtu.be/AiAOLpshguM
Resumee
Version & automate infrastructure
Living Documentation
Quality, “works on my machine“
Layers top to bottom
@davidvoelkel