19
Управление облачной инфраструктурой Системы управления конфигурацией ПО

Управление облачной инфраструктурой

  • Upload
    dddpaul

  • View
    443

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Управление облачной инфраструктурой

Управление облачной инфраструктурой

Системы управления конфигурацией ПО

Page 2: Управление облачной инфраструктурой

Задачи

1. Выполнение типовых команд на множестве серверов

2. Развертывание собственного ПО на множестве серверов

3. Управление объектами (ресурсами) множества ОС

Page 3: Управление облачной инфраструктурой

1. Выполнение типовых команд

Примеры:• обновление системы:– yum update;– aptitude full-upgrade и т.д.

• заливка нового конфигурационного файла:– yum.conf, sources.list;– resolv.conf.– ntp.conf и т.д.

Page 4: Управление облачной инфраструктурой

1.1. Использование скриптов

Например:for veid in {101..105}; dovzctl exec $veid команда

done

Преимущества НедостаткиПростота Скрипт нужно запускать на каждом

хосте отдельно

Page 5: Управление облачной инфраструктурой

1.2. Использование distributed shells

yum update

Преимущества НедостаткиСервера адресуются по имени или IP, т.е. нет привязки к их расположению

Требуется дополнительная конфигурация на сервере (sudoers)Полностью работает только в гомогенных средах

Page 6: Управление облачной инфраструктурой

1.2.1. Использование distributed shells

Например: dsh или pdshЗапрос:$ pdsh -R ssh -w mvio.ru,nagios.reic.ru ls

Ответ:nagios.reic.ru: Projectsmvio.ru: buildmvio.ru: Projects

Page 7: Управление облачной инфраструктурой

2. Развертывание собственного ПО

Действия:1. копирование на сервер (scp, rsync, tar c, git push);2. сборка на сервере (tar x, git merge);3. перезапуск приложения.

Машина разработчика Сервер

Page 8: Управление облачной инфраструктурой

2.1. Развертывание собственного ПО

Для более сложной архитектуры удобнее использовать специальные инструменты

Машина разработчика

Василия

Тестовый сервер

Машина разработчика

Петра

Центральныйрепозиторий

Рабочий сервер 1

Рабочийсервер 2

Page 9: Управление облачной инфраструктурой

2.2. Развертывание собственного ПО

Для различных ЯП и платформ используются свои инструменты для сборки и развертывания:

• Python – Fabric;• Ruby – Capistrano;• Java – Ant, Maven …

ПреимуществаМожно гибко конфигурировать в зав-ти от типа/роли (test, prod) сервера

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

Page 10: Управление облачной инфраструктурой

3. Управление объектами (ресурсами) ОС

Объекты управления (ресурсы):• пакеты ПО (apache, nginx, syslog, ntp …);• конфигурация этого ПО;• пользователи и группы;• сетевая конфигурация;• другие параметры.

Page 11: Управление облачной инфраструктурой

Web-прокси (nginx)

Java-приложение(mvio-web)

1-й вариант конфигурации:Электронный секретарь

Web-прокси (nginx)

Java-приложение(BGBilling)

2-й вариант конфигурации:Биллинг BGBilling

Web-прокси (nginx)

PHP-приложение(сайт)

3-й вариант конфигурации:Сайт maestrotelecom.ru

У всех вариантовконфигурации Nginx есть общие части и части специфические!

Page 12: Управление облачной инфраструктурой

Отсюда – разные потребности:• изменение общих частей конфигурации

(например, нужно добавить защиту от DDOS-атак);

• изменение специфических частей конфигурации (увеличить размер буфера для пользовательских данных на портале «Электронный секретарь»).

Page 13: Управление облачной инфраструктурой

Решение №1:• для общих частей использовать собственные пакеты (т.е.

взять и включить типовую конфигурацию nginx в rpm-пакет nginx).

• cпецифические части хранить в отдельном репозитории.

НедостаткиПриходится самому поддерживать пакеты (т.е. отслеживать обновления исходного ПО и уязвимости ПО)Куча ручной работы по изменению конфигурационных файлов (либо нужно писать специальные скрипты с использованием distributed shells)

Page 14: Управление облачной инфраструктурой

Решение №2:• использование SCM (Software Configuration Management)

или системы управления конфигурацией ПО.

Основной подход – описание объектов системы на абстрактном языке.

Пользователь Сервис (nginx) Настройки сети

user paul { uid 1000 comment Pavel home /home/paul shell /bin/bash …}

service nginx { name test.reic.ru port 80 ssl yes template nginx-std.conf}

file interfaces { int 01 name eth1 speed 100 mode full-duplex}

Page 15: Управление облачной инфраструктурой

В системе SCM должны быть описаны ВСЕ специфические объекты конфигурации (те, которые отличаются от стандартных).

Другими словами, в SCM-системе хранится точный функциональный образ системы (сервера).

Из SCM-системы можно в любой момент получить копию работоспособного сервера, выполняющего нужные нам задачи.

Page 16: Управление облачной инфраструктурой

Работа SCM (Chef)

Машина администратора

Евгения

Сервер 1

Хранилище конфигураций Сервер 2

Сервер 3

Команды

Page 17: Управление облачной инфраструктурой

Две SCM-системы

Puppet• Имеет долгую историю, вырос

из cfengine• Декларативный, более

подходит для администратора• В «рецептах» используется DSL

(«птичий язык»), расширяемый на Ruby

• Коммерциализация – расширенная версия с web-интерфейсом

Chef• Более свежий проект, взял

многое из Puppet• Императивный, более подходит

для программиста• В «рецептах» используется Ruby• Коммерциализация – SaaS-

модель• Более удобен для

развертывания приложений из VCS-репозиториев

Page 18: Управление облачной инфраструктурой

Установка пакета “play-framework” и библиотеки “asterisk-java” в Puppet

# Install Play! Frameworkpackage { "play-framework": ensure => present}

# Install asterisk-java modulefile { "/opt/asterisk-java": ensure => "directory", owner => "root", group => "root", mode => 0755,}file { "/opt/asterisk-java/target": ensure => "directory", owner => "root", group => "root", mode => 0755,}file { "/opt/asterisk-java/target/asterisk-java.jar": source => "puppet:///modules/git-repo/asterisk-java.jar", owner => "root", group => "root", mode => 0644,}

Page 19: Управление облачной инфраструктурой

Установка пакета “play-framework” и библиотеки “asterisk-java” в Chef

package "play-framework"

# Install asterisk-java module%w{/opt/asterisk-java /opt/asterisk-java/target}.each do |dir| directory "#{dir}" do owner "root" group "root" mode 0755 action :create endendcookbook_file "/opt/asterisk-java/target/asterisk-java.jar" do source "asterisk-java.jar" owner "root" group "root" mode 0644end