Живая миграция контейнеров: плюсы, минусы, подводные...

Post on 12-Apr-2017

514 views 6 download

Transcript of Живая миграция контейнеров: плюсы, минусы, подводные...

Живая миграция контейнеров:

плюсы, минусы, подводные камни

Живая миграция контейнеров:

плюсы, минусы, подводные камни

Павел Емельянов

Яндекс, Москва, 2015

Про что докладПро что доклад

• Почему надо мигрировать контейнеры

• Почему не надо мигрировать контейнеры

• Насколько сложно мигрировать контейнеры

2

Миграция в общих чретахМиграция в общих чретах

• Сохранить состояние

• Скопировать состояние

• Восстановить состояние

3

Миграция контейнеровМиграция контейнеров

4

Почему надо мигрировать контейнерыПочему надо мигрировать контейнеры

• Эффектно

• Балансировка нагрузки

• Обновление ядра

– Можно не мигрировать на самом деле

• Замена оборудования

5

Почему не надо мигрировать контейнерыПочему не надо мигрировать контейнеры

6

Как не мигрировать контейнерыКак не мигрировать контейнеры

• Балансировка сетевого трафика

• Микросервисы

• Crash-driven обновления

• Плановые отключения горячей воды

7

На самом деле живая миграцияНа самом деле живая миграция

• Пересылку память необходимо исключить из состояния “заморожено”

• Пред-копирование памяти

• Пост-копирование памяти

8

Живая миграция в деталяхЖивая миграция в деталях

• Пред-копирование: сбор и пересылка памяти (несколько раз)

• Заморозка

• Сохранение состояния

• Копирование состояния

• Восстановление состояния

• Разморозка

• Пост-копирование: подкачка памяти по сети

9

Подводные камниПодводные камни

10

VS

Подводные камниПодводные камни

11

VS

Подводные камниПодводные камни

12

VS

Что мигрируемЧто мигрируем

• VM-ка

– Окружение (виртуальное железо, paravirt)

– CPU

– Память

• Контейнер

– Окружение (cgroups, namespaces)

– Процессы и другие животные

– Память

13

Сбор и пересылка памятиСбор и пересылка памяти

• VM-ка

– Вся память “в руках”

• Контейнер

– Память размазана по процессам, может быть разделена между ними

– Поэтому надо сначала собрать процессы (см. ниже)

● А потом собрать память

14

ЗаморозкаЗаморозка

• VM-ка

– Suspend всех процессоров

• Контейнер

– Пройти по дереву (/proc), переловить процессы и остановить их

– Freeze cgroup помогает, но надо отдельно восстанавливать иерархию

15

Сохранение состоянияСохранение состояния

• VM-ка

– Состояние железа

● Дерево, 300K, ~70 объектов

• Контейнер

– Состояние всех объектов

● Граф, 160K, ~1000 объектов

● Не для всех объектов есть адекватный API для чтения

16

Копирование состоянияКопирование состояния

• VM-ка

– Можно читать состояние и сразу передавать

• Контейнер

– Сложно читать и сразу передавать

17

Восстановление состоянияВосстановление состояния

• VM-ка

– Воссоздание памяти, запись состояния в устройства и CPU

• Контейнер

– В ядре: создание большого количества маленьких объектов

– В CRIU: то же самое, но с использованием не всегда удобного API

● Требуется вычисление нетривиальной последовательности действий

18

РазморозкаРазморозка

• VM-ка

– Resume

• Контейнер

– Синхронизация восстановления всех процессов, чтобы не разморозить кого не следует

раньше времени

– SIGCONT по дереву

– “Оттаять” cgroup

19

Подкачка памяти по сетиПодкачка памяти по сети

• UserfaultFD от Андреа Арканджели

• VM-ка

– Merged into 4.2

• Контейнер

– Несовместная работа монитора и процесса – надо доделывать uffd

20

РеализацияРеализация

• http://criu.org

• criu@openvz.org

• +CriuOrg

• @__criu__

• Github: xemul/criu

21

РеализацияРеализация

• P.Haul (Пихль)

– http://criu.org/P.Haul

– Миграция с помощью CRIU

22

Всё.

xemul@openvz.org

Всё.

xemul@openvz.org