72
Partners:

Antons Kranga Building Agile Infrastructures

Embed Size (px)

DESCRIPTION

Antons Kranga speaking at DevConfu Conference, Riga November 2013.

Citation preview

Page 1: Antons Kranga   Building Agile Infrastructures

Partners:

Page 2: Antons Kranga   Building Agile Infrastructures

Building Agile Infrastructures

November 2013

Page 3: Antons Kranga   Building Agile Infrastructures

Presenter

- Technology Architect at Accenture

- 10+ years Enterprise Java Developmentg

- Areas of work: - Open Source activist - DevOps evangelist - Technical and OO Trainer - Cloud and PaaS development

[email protected] [email protected] http://www.linkedin.com/in/antonskranga

Antons Kranga

Page 4: Antons Kranga   Building Agile Infrastructures

This talk is not

Developers vs Operations

Page 5: Antons Kranga   Building Agile Infrastructures

This talk is not

demanding to fire sysadmins

Page 6: Antons Kranga   Building Agile Infrastructures

This talk is not

asking to rebuild your org

Page 7: Antons Kranga   Building Agile Infrastructures

How fast you setup new project?

Page 8: Antons Kranga   Building Agile Infrastructures

How fast you setup new project?

Page 9: Antons Kranga   Building Agile Infrastructures

What is your operational model?

Page 10: Antons Kranga   Building Agile Infrastructures

Agile ITILbuild & release deploy & support

Devs Ops

Goals of DevOps

Page 11: Antons Kranga   Building Agile Infrastructures

Agile ITILbuild & release

Release notes

deploy & support

Devs Opsincidents

Goals of DevOps

Page 12: Antons Kranga   Building Agile Infrastructures

Agile ITILbuild & release

Release notes

deploy & support

Devs Opsincidents

Goals of DevOps

Page 13: Antons Kranga   Building Agile Infrastructures

Agile Agilebuild & release

Learn

deploy & support

Devs OpsLearn

Goals of DevOps

Page 14: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 15: Antons Kranga   Building Agile Infrastructures

Opscode

Page 16: Antons Kranga   Building Agile Infrastructures

Infrastructure as Code

Page 17: Antons Kranga   Building Agile Infrastructures

- Written declaratively (just enough ruby DSL)

- Repeatable

- OS agnostic

- Source control

- Active community (tons of ready to use cookbooks)

Infrastructure as Codeinclude_recipe “java“ package "tomcat6“ artifact_deploy "tomcat6“ do version "latest“ artifact_location "foo.war" deploy_to node[:tomcat][:work_dir] end service "tomcat6" do action [:enable, :start] end

Page 18: Antons Kranga   Building Agile Infrastructures

include_recipe “java“ package "tomcat6“ artifact_deploy "tomcat6“ do version "latest“ artifact_location "foo.war" deploy_to node[:tomcat][:work_dir] end service "tomcat6" do action [:enable, :start] end

OS Type: RedHat OS Version: 6.2

Tomcat Home: /etc/tomcat Tomcat Port: 8080

MySQL IP: 10.10.0.1 MySQL Root Password:

password

RecipeAttributes

OS Specific Instructions

Example

Page 19: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Page 20: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Page 21: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Detect Change

Run Unit TestsRun build

Page 22: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Detect Change

Run Unit TestsRun build

Publish

Snapshot Repo

Page 23: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Detect Change

Run Unit TestsRun build

Publish

Snapshot Repo

Page 24: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Detect Change

Run Unit TestsRun build

Publish

Snapshot Repo

Run Analytics

Code quality report

Page 25: Antons Kranga   Building Agile Infrastructures

Jenkins CINexus

Push Code

Detect Change

Run Unit TestsRun build

Publish

Snapshot Repo

Run Analytics

Code quality report

Release Repo

Page 26: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

Provision CI Server

Page 27: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Provision CI Server

Page 28: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 29: Antons Kranga   Building Agile Infrastructures

Vagrant (www.vagrantup.com)

Page 30: Antons Kranga   Building Agile Infrastructures

Vagrant- Easy to manage local VM(s)

- Easy to manage multi VM env

- Easy to deal with multi OS env

- Easy to distribute across teams VMs

- Describe VM resources

- Source Control

Page 31: Antons Kranga   Building Agile Infrastructures

Vagrant- Easy to manage local VM(s)

- Easy to manage multi VM env

- Easy to deal with multi OS env

- Easy to distribute across teams VMs

- Describe VM resources

- Source Control

shell

$ vagrant box add precise64 ttp://files.vagrantup.com/precise64.box $ vagrant init $ vagrant up

Page 32: Antons Kranga   Building Agile Infrastructures

Vagrant configurationVagrant.configure("2") do |config| config.vm.box = "precise64" config.vm.network "forwarded_port", guest: 8080, host: 8080, auto_correct: true config.vm.provision "chef_solo" do |chef| chef.add_recipe "tomcat" chef.add_recipe "mysql" end end

vagrantfile

Page 33: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Personal Dev Environment

Page 34: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Personal Dev Environment

Dev VM

deploy

verify

Page 35: Antons Kranga   Building Agile Infrastructures

Extending Jenkins Jobstart job

pull sources compile project run unit tests

run integr tests

publish to Nexus …

Page 36: Antons Kranga   Building Agile Infrastructures

Extending Jenkins Jobstart job

pull sources compile project run unit tests

run integr tests

publish to Nexus …

provision VM

Page 37: Antons Kranga   Building Agile Infrastructures

Extending Jenkins Jobstart job

pull sources compile project run unit tests

run integr tests

publish to Nexus …

provision VM

configure

Page 38: Antons Kranga   Building Agile Infrastructures

Extending Jenkins Jobstart job

pull sources compile project run unit tests

run integr tests

publish to Nexus …

provision VM

configure

run tests

Page 39: Antons Kranga   Building Agile Infrastructures

Extending Jenkins Jobstart job

pull sources compile project run unit tests

run integr tests provision VM

configure

run tests

destroy VMpublish to Nexus …

Page 40: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 41: Antons Kranga   Building Agile Infrastructures

Test Kitchen (github.com/test-kitchen/test-kitchen)

Page 42: Antons Kranga   Building Agile Infrastructures

Chef Cookbooks

Page 43: Antons Kranga   Building Agile Infrastructures

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

Chef Cookbooks

Page 44: Antons Kranga   Building Agile Infrastructures

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

Chef Cookbooks

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

.kitchen.yml

Page 45: Antons Kranga   Building Agile Infrastructures

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

Chef Cookbooks

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

@test "tmux is installed and in the path" { which tmux } @test "tmux configuration exists" { cat /etc/tmux.conf | grep "map“ }

tests

.kitchen.yml

Page 46: Antons Kranga   Building Agile Infrastructures

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

Chef Cookbooks

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

@test "tmux is installed and in the path" { which tmux } @test "tmux configuration exists" { cat /etc/tmux.conf | grep "map“ }

tests

shell

$ bundle exec kitchen test

.kitchen.yml

Page 47: Antons Kranga   Building Agile Infrastructures

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

@test "tmux is installed and in the path" { which tmux } @test "tmux configuration exists" { cat /etc/tmux.conf | grep "map“ }

tests

Chef Cookbooks

shell

$ bundle exec kitchen test

.kitchen.yml

Page 48: Antons Kranga   Building Agile Infrastructures

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

@test "tmux is installed and in the path" { which tmux } @test "tmux configuration exists" { cat /etc/tmux.conf | grep "map“ }

tests

Chef Cookbooks

shell

$ bundle exec kitchen test

Jenkins CI?

.kitchen.yml

Page 49: Antons Kranga   Building Agile Infrastructures

--- driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - recipe[my_cookbook] attributes: {}

source 'https://rubygems.org' gem 'test-kitchen', '~> 1.0' group :integration do gem 'kitchen-vagrant', '~> 0.11' end

Gemfile

@test "tmux is installed and in the path" { which tmux } @test "tmux configuration exists" { cat /etc/tmux.conf | grep "map“ }

tests

Chef Cookbooks

shell

$ bundle exec kitchen test

Jenkins CI?

Don’t forget Food critic

acrmp.github.io/foodcritic

.kitchen.yml

Page 50: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 51: Antons Kranga   Building Agile Infrastructures

Automation: 1.Env Provisioning 2.Configuration

ssh

Environment at Local, On Premises or Cloud

chef-solo

Page 52: Antons Kranga   Building Agile Infrastructures

Automation: 1.Env Provisioning 2.Configuration

ssh

Automation: 1.Service Discovery 2.Server Integration 3.Deployment

Environment at Local, On Premises or Cloud

Server

Page 53: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Environment Provisioning

Dev VM

deploy

verify

Page 54: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Environment Provisioning

Dev VM

deploy

verify

Test Env VMs

Test team

Page 55: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Environment Provisioning

Dev VM

deploy

verify

Test team

Test VMTest VM

Test VMTest Env VMs

Page 56: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Environment Provisioning

Dev VM

deploy

verify

Test team

Test VMTest VM

Test VMTest Env VMs

Page 57: Antons Kranga   Building Agile Infrastructures

Dev Workstation

java code

CI Server VMpush

pull

Environment Provisioning

Dev VM

deploy

verify

Test team

Test VMTest VM

Test VMTest Env VMs

Test VMTest VM

Test VMUAT Env VMs

Clients

Page 58: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 59: Antons Kranga   Building Agile Infrastructures

Chaos Monkey (github.com/Netflix/SimianArmy)

Page 60: Antons Kranga   Building Agile Infrastructures

Chaos Monkey (github.com/Netflix/SimianArmy)

Warning!!! There will be mess!!!

Page 61: Antons Kranga   Building Agile Infrastructures

Provision your infra in AWS

Deploy your System (if applicable)

Enable Maximum Logging

Configure Simian Army

Make sure that Devs are seeing the show!

Page 62: Antons Kranga   Building Agile Infrastructures

Check out other beasts in Simian Army (github.com/Netflix/SimianArmy)

Page 63: Antons Kranga   Building Agile Infrastructures

Chaos Monkey Chaos Gorilla Will destroy an entire zone Latency Monkey Inspects and introduces latency Howler Monkey Looks for overused resources Security Monkey Ensures certs are not expiring soon, etc. Janitor Monkey Cleans-up unused resources

Page 64: Antons Kranga   Building Agile Infrastructures

Provision Continuous Integration

Personal Development Environment

Automate Infrastructure Testing

Provision QA, Prod Environment

AT for Infrastructure

DevOps adoption scenario

Page 65: Antons Kranga   Building Agile Infrastructures

What is besides Chef?

Page 66: Antons Kranga   Building Agile Infrastructures

Bosh (github.com/cloudfoundry/bosh)

Page 67: Antons Kranga   Building Agile Infrastructures

- Extracted from Cloud Foundry

- Harness for your IaaS

- Automates

- Environment Provisioning

- Health Checks

- Scalability

- Logs Collection

Bosh

Page 68: Antons Kranga   Building Agile Infrastructures

Docker (docker.io)

Page 69: Antons Kranga   Building Agile Infrastructures

- Handles LXC VM management

- LXC supported by Linux Kernel 2.6

- Slicing Large instances

- Lightweight environment provisioning

- Provides Application Isolation

Docker

Page 70: Antons Kranga   Building Agile Infrastructures

Thank You!

Page 71: Antons Kranga   Building Agile Infrastructures

☺ ☹!

Feedback

Page 72: Antons Kranga   Building Agile Infrastructures

Partners: