Владимир Еремин. extending openstack. pycon belarus 2015

42

Upload: alina-dolgikh

Post on 16-Jul-2015

428 views

Category:

Technology


1 download

TRANSCRIPT

Подходы к расширению OpenStack

Владимир Еремин

1. Почему OpenStack

2. Как устроен OpenStack, батарейки

3. Как писать для OpenStack

4. Что мы пишем

3Подходы к расширению OpenStack

Оглавление

〉Масштабируемость

〉 Кастомизируемость

〉 Заменяемость

4Подходы к расширению OpenStack

Как мы выбирали облако

〉Он задуман как платформа для облаков любых типов и размеров

〉 Его компоненты взаимосвязаны на уровне API

〉 Построен на известных компонентах

5Подходы к расширению OpenStack

Почему OpenStack

Подходы к расширению OpenStack

Как устроен OpenStack

Веб-приложения

〉 HTTP API

〉 Backend

〉 RPC между ними

〉 События

7Как устроен OpenStack

Сервисы

〉 Приложения взаимодействуют между собой через разнообразные HTTP API

〉 Keystone предоставляет общее пространство имен и систему авторизации

8Как устроен OpenStack

Взаимодействие

〉 Приложения генерируют события, на которые можно реагировать

〉 Зависит от инсталляции

9Как устроен OpenStack

Взаимодействие

〉 Компоненты приложения можно переопределить

10Как устроен OpenStack

Взаимодействие

〉 Каталог проектов и пользователей и их ролей

〉 Концепция проектов

〉 Система аутентификации и авторизации

〉 Генерация и проверка токена

〉 Каталог сервисов

11Как устроен OpenStack

Keystone, the OpenStack Identity Service

Токен определяет пользователя

〉 авторизация и роли

〉 имперсонификация

12Как устроен OpenStack

Auth Token

Как устроен OpenStack

Сервис OpenStack — HTTP-API приложение на Python с авторизацией в Keystone и плагинами

〉WSGI, middleware и Paste Deploy

〉 Entry Points

14Как устроен OpenStack

Батарейки

def app(env, start_response): if env['REQUEST_METHOD'] == "POST": do(env['wsgi.input'].read()) ... start_response(status=200,...) return ...

15Как устроен OpenStack

WSGI, middleware и Paste Deploy

〉 PEP 0333, PEP 3333

〉WebOb, Flask, Python Paste

〉 Декларативный деплоймент

16Как устроен OpenStack

WSGI, middleware и Paste Deploy

from flask import Flaskapp = Flask()@app.route('/')def handler(): ... return ...

17Как устроен OpenStack

WSGI, middleware и Paste Deploy

from webob import Responsedef app(env, start_response): ... return Response( status=200, content_type="application/json", body=data)(env, start_response)

18Как устроен OpenStack

WSGI, middleware и Paste Deploy

class Middleware(object): def __init__(self, app, conf): self.app = app def __call__(self, env, start_response): return self.app(env, start_response)

19Как устроен OpenStack

WSGI, middleware и Paste Deploy

# your /usr/bin/appfrom yourapp import CacheMiddleware, AuthMiddlewareapp = App()app_with_cache = CacheMiddleware(app, conf)app_with_auth = AuthMiddleware(app, conf)WSGIServer(app_with_auth).serve()

20Как устроен OpenStack

WSGI, middleware и Paste Deploy

[app:app]paste.app_factory = yourapp:app_factory[filter:cache]paste.filter_factory = yourapp:cache_factory[filter:auth]paste.filter_factory = yourapp:auth_factory[pipeline:main]pipeline = auth cache app

21Как устроен OpenStack

WSGI, middleware и Paste Deploy

[composite:metaapp]use = egg:Paste#urlmap/:main [app:app]paste.app_factory = yourapp:app_factory[filter:cache]paste.filter_factory = yourapp:cache_factory[filter:auth]paste.filter_factory = yourapp:auth_factory[pipeline:main]pipeline = auth cache app

22Как устроен OpenStack

WSGI, middleware и Paste Deploy

[entry_points]nova.api.v3.extensions = yandexresponsibles = myext:MyMethod

23Как устроен OpenStack

Entry Points

from pkg_resources import iter_entry_pointsiter_entry_points( group='nova.api.v3.extensions', name=None)

24Как устроен OpenStack

Entry Points

〉 единый механизм логгирования через logging

〉 oslo.config

25

И еще

Подходы к расширению OpenStack

Как писать для OpenStack

〉 Использование API и событий

〉 Только поддержка токена

〉 Готовые библиотеки

〉 Полная свобода

27Как писать для OpenStack

Новое приложение

Вся реализация абстракций:

〉 методы аутентикации в Keystone

〉 драйверы виртуализации, образов, томов и т.д. в Nova

〉 драйверы сетевого оборудования в Neutron

28Как писать для OpenStack

Драйверы

〉 Атомарное API

〉Можно использовать для модификация поведения

29Как писать для OpenStack

Драйверы

〉 Сложно писать

〉 Внутренний API меняется

30Как писать для OpenStack

Драйверы

〉 Тот же драйвер, но запускается отдельно

〉 Доступен только через RPC

31Как писать для OpenStack

Агенты

Позволяет изменять запрос или ответ:

〉 в Swift всё — middleware

〉 ограничения и аудит

〉 вне контекста приложения

32Как писать для OpenStack

Middleware

Позволяют работать с API:

〉 новые вызовы

〉 обработка существующих вызовов после роутинга и до сериализации

〉 контекст приложения

33Как писать для OpenStack

Расширения

Механизм хуков:

〉 наилучший вариант при изменении внутреннего поведения

〉 требует апстрима

34Как писать для OpenStack

Хуки

35

Как писать для OpenStack

Новое приложение Драйверы Middleware Расширения Хуки

Возможности Любые Определены API Мало Любые Минимальны

Интеграция Сильная Сильная Сильная Сильная Не для этого

Интерфейс Легкий Сложный Легкий Несложный Легкий

Поддержка Не требуется

Как написание

Легко Легко Сложно

Модификация апстрима Нет Нет Нет Нет Да

〉Фреймворк для построения интерфейсов

〉 Переопределение через monkey patch

〉 Подключение новых интерфейсов

36Как писать для OpenStack

Веб-интерфейс Horizon

Подходы к расширению OpenStack

Что мы пишем

〉 Расширения Keystone для хранения маппингов и синхронизации пользователей

〉 Расширения системы авторизации для приема Cookies

〉 Переопределение модуля проверки пароля

〉 Переписанный Horizon для передачи Cookies

〉 Приложения Horizon для управления

38Что мы пишем

Аутентификация и Single Sign-On

〉 Новый backend-драйвер для nsupdate

〉 Новый драйвер обработки событий

〉 Расширения здесь и в Nova для проверки и синхронизации

39Что мы пишем

Designate

〉 Агент для получения LLDP

〉 API extension для заведения сетей

〉 API extension для настройки VLAN

40Что мы пишем

Neutron

〉 Регистрация во всяких системах через обработку событий

〉 Выдача информации внешним системам через API extensions

〉 Свои команды в клиенте через entry points

〉 Визуализации и автоматизации в отдельных приложениях

41Что мы пишем

Интеграция

Владимир Еремин

OpenStack DevOps

Контакты

@yottatsa

yottatsa

+7 (495) 739 70 00

[email protected]