Linux namespaces. Linux control groups

Содержание

Слайд 2

Для кого данный доклад?

Вы уже знакомы с докером и используете его.
Вы уже

Для кого данный доклад? Вы уже знакомы с докером и используете его.
знакомы с Linux и желательно с LXC (для более глубокого понимания).

Слайд 3

Docker под капотом
Сложности CI/CD

Docker под капотом Сложности CI/CD

Слайд 4


Docker daemon (Автоматизация управления)

Как это работает?

Namespaces

Cgroups

Docker daemon (Автоматизация управления) Как это работает? Namespaces Cgroups

Слайд 5

Linux namespaces

Вначале было слово chroot! (1982 год!)

Linux namespaces Вначале было слово chroot! (1982 год!)

Слайд 8

Linux namespaces

Вначале было слово chroot! (1982 год!)
И создал админ Jail

Linux namespaces Вначале было слово chroot! (1982 год!) И создал админ Jail

Слайд 9

Linux namespaces

Вначале было слово chroot!
И создал админ Jail
И наконец в Linux появились

Linux namespaces Вначале было слово chroot! И создал админ Jail И наконец в Linux появились Namespace
Namespace

Слайд 10

Linux namespaces

UTC

IPC

PID

User

Mount

Network

Linux namespaces UTC IPC PID User Mount Network

Слайд 11

Linux namespaces - PID

Linux namespaces - PID

Слайд 12

Linux namespaces - User

Linux namespaces - User

Слайд 13

Linux namespaces – Mount

Linux namespaces – Mount

Слайд 14

Linux namespaces - Network

Eth0

Veth1

Veth0

Linux namespaces - Network Eth0 Veth1 Veth0

Слайд 15

Linux namespaces - Network

Eth0

Bridge

Veth0

Veth1

Veth0

Linux namespaces - Network Eth0 Bridge Veth0 Veth1 Veth0

Слайд 16

Linux namespaces - Network

Eth0

Bridge

Veth0

Veth0

Veth1

Veth0

Linux namespaces - Network Eth0 Bridge Veth0 Veth0 Veth1 Veth0

Слайд 17

Linux namespaces – Network + VXLAN

Linux namespaces – Network + VXLAN

Слайд 18

Linux namespaces – Network + VXLAN

VXLAN

Linux namespaces – Network + VXLAN VXLAN

Слайд 19

Linux namespaces – Network + VXLAN

VXLAN

Linux namespaces – Network + VXLAN VXLAN

Слайд 20

Linux namespaces

UTC

IPC

PID

User

Mount

Network

Linux namespaces UTC IPC PID User Mount Network

Слайд 21


Docker daemon (Автоматизация управления)

Как это работает?

Namespaces

Cgroups

Docker daemon (Автоматизация управления) Как это работает? Namespaces Cgroups

Слайд 22

App

DB

Cache

App DB Cache

Слайд 23

App

DB

Cache

App exporter

DB exporter

App DB Cache App exporter DB exporter

Слайд 24

App

DB

Cache

ELK

App exporter

DB exporter

App DB Cache ELK App exporter DB exporter

Слайд 25

App

DB

Cache

ELK

App exporter

DB exporter

App DB Cache ELK App exporter DB exporter

Слайд 26

App

DB

Cache

ELK

App exporter

DB exporter

App DB Cache ELK App exporter DB exporter

Слайд 27

App

DB

Cache

ELK

App exporter

DB exporter

4 GB Ram

App DB Cache ELK App exporter DB exporter 4 GB Ram

Слайд 28

App

DB

Cache

ELK

App exporter

DB exporter

App DB Cache ELK App exporter DB exporter

Слайд 29

Linux control groups

Block devices (IOPS)
CPU (Core, and CPU time access)
RAM + OOM

Linux control groups Block devices (IOPS) CPU (Core, and CPU time access)
Control
Devices
Network packets priority – QoS per network interface

Слайд 30

Docker limits и почему это важно?

CPU
Memory
GPU
Disk IO
Мы знаем сколько потребляет наше приложение!
Мы

Docker limits и почему это важно? CPU Memory GPU Disk IO Мы
можем выявить нагрузку ко времени!
Можем прогнозировать стоимость у облачного провайдера услуг!

Слайд 31

OOMy God!

Не доводить до OOM!
Выставить ограничения по потреблению RAM.
В крайнем случае запретить

OOMy God! Не доводить до OOM! Выставить ограничения по потреблению RAM. В
OOM убивать важный сервис.

Слайд 32

Overhead?

CPU – Нет
RAM – Нет
Network – зависит от конфигурации
Disk IO - Нет

Overhead? CPU – Нет RAM – Нет Network – зависит от конфигурации Disk IO - Нет

Слайд 33

Overhead: network

2016 год!

Overhead: network 2016 год!

Слайд 34

Docker expose port
Transactions: 465325 hits
Availability: 100.00 %
Elapsed time: 49.78 secs
Data transferred: 271.59

Docker expose port Transactions: 465325 hits Availability: 100.00 % Elapsed time: 49.78
MB
Response time: 0.00 secs
Transaction rate: 9347.63 trans/sec
Throughput: 5.46 MB/sec
Concurrency: 19.92
Successful transactions: 465325
Failed transactions: 0
Longest transaction: 0.04
Shortest transaction: 0.00

Docker network HOST
Transactions: 523481 hits
Availability: 100.00 %
Elapsed time: 49.62 secs
Data transferred: 305.53 MB
Response time: 0.00 secs
Transaction rate: 10549.80 trans/sec
Throughput: 6.16 MB/sec
Concurrency: 19.90
Successful transactions: 523481
Failed transactions: 0
Longest transaction: 0.06
Shortest transaction: 0.00

4.4.0-148-generic #174-Ubuntu; Docker 18.09

Разница ~ 20%

Слайд 35

Docker expose port
MYSQL Inserts
131498 за 20 секунд!

Docker network HOST
MYSQL Inserts
139550 за 20

Docker expose port MYSQL Inserts 131498 за 20 секунд! Docker network HOST
секунд!

4.4.0-148-generic #174-Ubuntu; Docker 18.09

Разница ~ 6%

Слайд 36

Docker expose port
MYSQL Inserts
348177 за 50 секунд!

Docker network HOST
MYSQL Inserts
359070 за 50

Docker expose port MYSQL Inserts 348177 за 50 секунд! Docker network HOST
секунд!

4.4.0-148-generic #174-Ubuntu; Docker 18.09

Разница ~ 1%

Слайд 37

CI/CD и возникающие сложности

CI/CD и возникающие сложности

Слайд 38

Когда нужны микросервисы?

Когда нужны микросервисы?

Слайд 39

Martin Fowler

Martin Fowler

Слайд 40

Если код изначально плохой, то..

Если код изначально плохой, то..

Слайд 42

Давайте CI/CDшить монолит!

Давайте CI/CDшить монолит!

Слайд 43

«Типичный» монолит (суровый пример)

Написан под Windows
Язык – Дельфи + VBS скрипты.
Куча legacy

«Типичный» монолит (суровый пример) Написан под Windows Язык – Дельфи + VBS
кода
Большое количество зависимостей
Долгое время старта
Много интеграций
Плохая отказоустойчивость
Плохое масштабирование

Слайд 44

И что, вот так и оставить?

Автоматизация задач, которые принесут пользу, а не

И что, вот так и оставить? Автоматизация задач, которые принесут пользу, а
вред.
По возможности и необходимости выносить отдельные части приложения в микросервисы.
Не переусердствовать.

Слайд 45

А как быть с паролями?

Хранить прямо в Git вместе с кодом проекта
Подкладывать

А как быть с паролями? Хранить прямо в Git вместе с кодом
из другого приватного репозитория при сборке
ENV переменные на средах
Использовать готовые решения, например – Docker Secret(Swarm), Vault от Hashicorp

Слайд 46

Docker registry, а оно нам надо?

Когда docker-save -- copy -- docker-load удобнее?

Docker registry, а оно нам надо? Когда docker-save -- copy -- docker-load
(BitBucket CI/CD)
Какие проблемы может привнести Docker-registry?

Слайд 47

Union File System

Union File System

Слайд 48

А когда нужен Swarm, K8S ?

Требуется обеспечить высокую отказоустойчивость
Требуется балансировка нагрузки
Нужно утилизировать

А когда нужен Swarm, K8S ? Требуется обеспечить высокую отказоустойчивость Требуется балансировка
имеющиеся мощности по максимуму

Нам необходимо разнести контейнеры по нодам (напр. Вынести ELK)
Нам необходимо иметь отказоустойчивость
Нам необходимо балансировать нагрузку
Хотим утилизировать имеющиеся мощности на полную