Top Banner
Истиный DevOps. Никита Борзых, Express Секрет
22

Истинный DevOps. Секрет 42.

Jun 14, 2015

Download

Technology

Nikita Borzykh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Истинный DevOps. Секрет 42.

Истиный DevOps.

Никита Борзых, Express

Секрет

Page 2: Истинный DevOps. Секрет 42.
Page 3: Истинный DevOps. Секрет 42.

Клиент

Сервер как произведение искусства

Утеря знаний вместе с админом

Два вечера, чтобы узнать почему ничего не работает

Еще два вечера, чтобы понять как с этим дальше жить

Мониторинг присылает 100 email в день

Page 4: Истинный DevOps. Секрет 42.

Управление конфигурацией

Весь опыт системного администратора в git репо

Вся информация о компонентах есть в git репо

Мониторинг как код =)

Без рук!

Page 5: Истинный DevOps. Секрет 42.

Chef Workflow

1 клиент – 1 git репозиторий

Логическое деление кукбуков на слои

Chef-solo для локального развертывания

Развертывание  проекта  локально  –  три  команды:

bundle install, librarian-chef install, vagrant up

1 окружение – 1  chef server

Page 6: Истинный DevOps. Секрет 42.

Слои кукбуков

Base

Services

Applications

Page 7: Истинный DevOps. Секрет 42.

Слой base

lvm, sysctl, apt, ssh ...

# Add express42 public web repositoryapt_repository "express42-web" do action :add uri "http://repos.express42.com/web/precise/ ./" key "http://repos.express42.com/web/precise/Release.key"end

Сожержит кукбук с chef libraries

Выполняется на всех серверах

Page 8: Истинный DevOps. Секрет 42.

Слой service

redis, postgresql, nginx ...

# Setup redis main databaseredis "main" do configuration( :bind => "0.0.0.0", :maxclients => 256 )end

Содержит кукбуки сервиcов, которые нужны для приложения

LWRP вызывается из кукбуков приложений

Page 9: Истинный DevOps. Секрет 42.

Слой Application

app::redis, app::backend ...# Add express42 public web repositoryapt_repository "express42-web" do action :add uri "http://repos.express42.com/web/precise/ ./" key "http://repos.express42.com/web/precise/Release.key"end

#Create partition for rails applicationpartition redis_lvolume_name do group lvm_group size lvolume_size filesystem 'ext4' mount_point railsapp_application_directoryend

listen_address = net_get_private_ip()

# Setup redis main databaseredis "main" do configuration( :bind => listen_address, :maxclients => 256 )end

...

Page 10: Истинный DevOps. Секрет 42.

Репозиторий

CheffileCheffile.lockGemfileGemfile.lockVagrantfilecookbooksdata_bagsenvironmentsinhouse-cookbooksroles

<-- результат работы librarian

<-- кукбуки проекта

<-- гемы для запуска проекта

<-- используемые в проекте кукбуки

Page 11: Истинный DevOps. Секрет 42.

Управление репозиторием

Librarian Berkshelf

Управляют зависимостями like a pro bundler

Самостоятельно заливает кукбуки на chef-server

Могут интегрироваться с vagrant

Результатом работы является директория с актуальными версиями кукбуков.

управляет только кукбукамиЧто и когда заливать решаете вы

Page 12: Истинный DevOps. Секрет 42.

Забивай молотком,руби топором.

librarian-chef installknife cookbook upload -a

Page 13: Истинный DevOps. Секрет 42.

Chef Solo

Приходится тестировать проект в chef-client и chef-solo

Развертывание проекта локально занимаетминимум времени и усилий

Клиент может поднять свой проект без боли

Page 14: Истинный DevOps. Секрет 42.

Chef Solo

if Chef::Config[:solo] Chef::Log.warn("This recipe uses search. Chef Solo does not support search. I will return current node") postgresql_master_node = [ node ] backend_node = [ node ]else postgresql_master_node = search(:node, "role:postgresql-master AND chef_environment:#{node.chef_environment}") backend_node = search(:node, "role:application-backend AND chef_environment:#{node.chef_environment}")end

Node search in solo mode

Databag search in solo mode

https://github.com/edelight/chef-solo-search

Page 15: Истинный DevOps. Секрет 42.

Bugs in solo mode

Page 16: Истинный DevOps. Секрет 42.

Роли это больНе версионируются,неотделимы от кукбука

Боль почти не чувствуется, если в одном chef сервереодно окружение

Проблемы с распространением кукбуков

Альтернативный путь: role cookbooks

Page 17: Истинный DevOps. Секрет 42.

Role cookbooksroles/rails-backend.rb:name "rails-backend"description "Rails application backend"run_list("recipe[client::rails-backend]")

cookbooks/client/metadata.rb:name "client"description "Sets up applications for client"version "1.0.0"...depends "runit"depends "rvm"depends "lvm"depends "postgresql"depends "redis"

cookbooks/client/recipes/rails-backend.rb:

include_recipe "rvm"node.override['rvm']['rubies'] = [ 'ruby-1.9.3-p392' ]...

Page 18: Истинный DevOps. Секрет 42.

Окружения

chef-run в vagrant дожен проходить с аттрибутами, которые прописаны в кукбуках

переопределение аттрибутов в файле окруженияenvironments/production.rb:name "production"description "Production environment"default_attributes( "postgresql" => { "volume_size" => "500G", "private_network" => "172.20.1.0/24", "databases" => { "main" => { "shared_buffers" => "3GB", "wal_keep_segments" => 128 } } })

Page 19: Истинный DevOps. Секрет 42.

Мониторинг

Собираются базовые(io,net,os) метрики

Приложение присылает данные через zabbix trapper

Сервер добавляется в мониторинг после первого chef-run

Графики по всем метрикам

Page 20: Истинный DevOps. Секрет 42.

Мониторинг::Примерzabbix_connect "connect to zabbix" do apiurl "http://<zabbix-server>/api_jsonrpc.php" databag "zabbix"end

zabbix_host node.fqdn do host_group "Rails-backend" use_ip true ip_address net_get_private_ip(node)end

zabbix_template 'Linux_Template'

zabbix_screen node.fqdn do screen_item "System: Load Average" do resource_type :graph width 900 height 200 y 0 end screen_item "System: CPU Utilization" do resource_type :graph width 900 height 200 y 1 end screen_item "Memory: Triggers" do resource_type :graph width 900 height 200 y 2 endend

<-- создание screen<-- zabbix шаблон с базовыми проверками

<-- добавление хоста в мониторинг

Page 21: Истинный DevOps. Секрет 42.

Мониторинг::Результат

Page 22: Истинный DevOps. Секрет 42.

Вопросы

@ex_sample

@express42_ru

Хотите кусочек девопса[email protected]