SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Истиный DevOps.
   Секрет

 Никита Борзых, Express
Клиент
        Сервер как произведение искусства
          Утеря знаний вместе с админом
Два вечера, чтобы узнать почему ничего не работает
Еще два вечера, чтобы понять как с этим дальше жить
      Мониторинг присылает 100 email в день
Управление
       конфигурацией
   Весь опыт системного администратора
                 в git репо

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

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

                  Без рук!
Chef Workflow
            1 клиент – 1 git репозиторий
       Логическое деление кукбуков на слои
     Chef-solo для локального развертывания
             1 окружение – 1	
  chef server
Развертывание	
  проекта	
  локально	
  –	
  три	
  команды:
    bundle install, librarian-chef install, vagrant up
Слои кукбуков

       Base
     Services
    Applications
Слой base
                      lvm, sysctl, apt, ssh ...


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

            Сожержит кукбук с chef libraries
# Add express42 public web repository
apt_repository "express42-web" do
  action :add
  uri "http://repos.express42.com/web/precise/ ./"
  key "http://repos.express42.com/web/precise/Release.key"
end
Слой service
                 redis, postgresql, nginx ...


     Содержит кукбуки сервиcов, которые
          нужны для приложения
LWRP вызывается из кукбуков приложений
# Setup redis main database
redis "main" do
  configuration(
    :bind => "0.0.0.0",
    :maxclients => 256
  )
end
Слой Application
                               app::redis, app::backend ...
# Add express42 public web repository
apt_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 application
partition redis_lvolume_name do
  group lvm_group
  size lvolume_size
  filesystem 'ext4'
  mount_point railsapp_application_directory
end

listen_address = net_get_private_ip()

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

...
Репозиторий

Cheffile            <-- используемые в проекте кукбуки
Cheffile.lock
Gemfile             <-- гемы для запуска проекта
Gemfile.lock
Vagrantfile
cookbooks           <-- результат работы librarian
data_bags
environments
inhouse-cookbooks   <-- кукбуки проекта
roles
Управление
                   репозиторием

            Librarian                                    Berkshelf
                           Могут интегрироваться с vagrant
                      Управляют зависимостями like a pro bundler
Результатом работы является директория с     Самостоятельно заливает кукбуки на chef-
     актуальными версиями кукбуков.                          server

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


 librarian-chef install
knife cookbook upload -a
Chef Solo
 Развертывание проекта локально занимает
        минимум времени и усилий


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


     Приходится тестировать проект в
          chef-client и chef-solo
Chef Solo
                          Node search in solo mode
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




                       Databag search in solo mode

       https://github.com/edelight/chef-solo-search
Bugs in solo mode
Роли это боль
               Не версионируются,
              неотделимы от кукбука

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

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

       Альтернативный путь: role cookbooks
Role cookbooks
 roles/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' ]
 ...
Окружения
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
                   }
                 }
               }
             )
Мониторинг
     Собираются базовые(io,net,os) метрики

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

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

 Сервер добавляется в мониторинг после первого
                    chef-run
Мониторинг::Пример
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 шаблон с базовыми проверками
zabbix_screen node.fqdn do                     <-- создание screen
  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
  end
end
Мониторинг::Результат
Вопросы


   @express42_ru

     @ex_sample



Хотите кусочек девопса?
input@express42.com

Weitere ähnliche Inhalte

Was ist angesagt?

Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Ontico
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»FDConf
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Ec2 Rootconf2009
Ec2 Rootconf2009Ec2 Rootconf2009
Ec2 Rootconf2009Liudmila Li
 
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разRootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разTimur Batyrshin
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"Provectus
 
Chef коротко об инфраструктуре
Chef коротко об инфраструктуреChef коротко об инфраструктуре
Chef коротко об инфраструктуреAndrey Subbota
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Vasil Remeniuk
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus0leGG
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesMad Devs
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 

Was ist angesagt? (20)

Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Ec2 Rootconf2009
Ec2 Rootconf2009Ec2 Rootconf2009
Ec2 Rootconf2009
 
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разRootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
Chef коротко об инфраструктуре
Chef коротко об инфраструктуреChef коротко об инфраструктуре
Chef коротко об инфраструктуре
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на Kubernetes
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 

Andere mochten auch

Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальNikita Borzykh
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016Alex Chistyakov
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016Alex Chistyakov
 
Развитие DevOps/NoOps инструментов. Что было, что есть, что будет.
Развитие DevOps/NoOps инструментов.  Что было, что есть, что будет.Развитие DevOps/NoOps инструментов.  Что было, что есть, что будет.
Развитие DevOps/NoOps инструментов. Что было, что есть, что будет.Ivan Evtukhovich
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
My talk at Linux Piter 2016
My talk at Linux Piter 2016My talk at Linux Piter 2016
My talk at Linux Piter 2016Alex Chistyakov
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesSreenivas Makam
 

Andere mochten auch (10)

Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
 
Cobbler
CobblerCobbler
Cobbler
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016
 
DC/OS more than PAAS
DC/OS more than PAASDC/OS more than PAAS
DC/OS more than PAAS
 
Развитие DevOps/NoOps инструментов. Что было, что есть, что будет.
Развитие DevOps/NoOps инструментов.  Что было, что есть, что будет.Развитие DevOps/NoOps инструментов.  Что было, что есть, что будет.
Развитие DevOps/NoOps инструментов. Что было, что есть, что будет.
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
My talk at Linux Piter 2016
My talk at Linux Piter 2016My talk at Linux Piter 2016
My talk at Linux Piter 2016
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
 

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

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42DevDay
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомAlexander Titov
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиBusiness incubator HSE
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаAlexander Kirillov
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаOpen-IT
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Ontico
 

Ähnlich wie Истинный DevOps. Секрет 42. (20)

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
 
PowerShell
PowerShellPowerShell
PowerShell
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
PHP
PHPPHP
PHP
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Масштабируемый DevOps
Масштабируемый DevOpsМасштабируемый DevOps
Масштабируемый DevOps
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 

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

  • 1. Истиный DevOps. Секрет Никита Борзых, Express
  • 2.
  • 3. Клиент Сервер как произведение искусства Утеря знаний вместе с админом Два вечера, чтобы узнать почему ничего не работает Еще два вечера, чтобы понять как с этим дальше жить Мониторинг присылает 100 email в день
  • 4. Управление конфигурацией Весь опыт системного администратора в git репо Вся информация о компонентах есть в git репо Мониторинг как код =) Без рук!
  • 5. Chef Workflow 1 клиент – 1 git репозиторий Логическое деление кукбуков на слои Chef-solo для локального развертывания 1 окружение – 1  chef server Развертывание  проекта  локально  –  три  команды: bundle install, librarian-chef install, vagrant up
  • 6. Слои кукбуков Base Services Applications
  • 7. Слой base lvm, sysctl, apt, ssh ... Выполняется на всех серверах Сожержит кукбук с chef libraries # Add express42 public web repository apt_repository "express42-web" do action :add uri "http://repos.express42.com/web/precise/ ./" key "http://repos.express42.com/web/precise/Release.key" end
  • 8. Слой service redis, postgresql, nginx ... Содержит кукбуки сервиcов, которые нужны для приложения LWRP вызывается из кукбуков приложений # Setup redis main database redis "main" do configuration( :bind => "0.0.0.0", :maxclients => 256 ) end
  • 9. Слой Application app::redis, app::backend ... # Add express42 public web repository apt_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 application partition redis_lvolume_name do group lvm_group size lvolume_size filesystem 'ext4' mount_point railsapp_application_directory end listen_address = net_get_private_ip() # Setup redis main database redis "main" do configuration( :bind => listen_address, :maxclients => 256 ) end ...
  • 10. Репозиторий Cheffile <-- используемые в проекте кукбуки Cheffile.lock Gemfile <-- гемы для запуска проекта Gemfile.lock Vagrantfile cookbooks <-- результат работы librarian data_bags environments inhouse-cookbooks <-- кукбуки проекта roles
  • 11. Управление репозиторием Librarian Berkshelf Могут интегрироваться с vagrant Управляют зависимостями like a pro bundler Результатом работы является директория с Самостоятельно заливает кукбуки на chef- актуальными версиями кукбуков. server Что и когда заливать решаете вы управляет только кукбуками
  • 12. Забивай молотком, руби топором. librarian-chef install knife cookbook upload -a
  • 13. Chef Solo Развертывание проекта локально занимает минимум времени и усилий Клиент может поднять свой проект без боли Приходится тестировать проект в chef-client и chef-solo
  • 14. Chef Solo Node search in solo mode 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 Databag search in solo mode https://github.com/edelight/chef-solo-search
  • 15. Bugs in solo mode
  • 16. Роли это боль Не версионируются, неотделимы от кукбука Проблемы с распространением кукбуков Боль почти не чувствуется, если в одном chef сервере одно окружение Альтернативный путь: role cookbooks
  • 17. Role cookbooks roles/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' ] ...
  • 18. Окружения 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 } } } )
  • 19. Мониторинг Собираются базовые(io,net,os) метрики Графики по всем метрикам Приложение присылает данные через zabbix trapper Сервер добавляется в мониторинг после первого chef-run
  • 20. Мониторинг::Пример 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 шаблон с базовыми проверками zabbix_screen node.fqdn do <-- создание screen 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 end end
  • 22. Вопросы @express42_ru @ex_sample Хотите кусочек девопса? input@express42.com