Вы находитесь на странице: 1из 101

16.11.

2019
Kubernetes на минималках

DevOps
Привычные инструменты управления
контейнерами для небольших проектов

meetup
bit.ly/metakb @akirill0v Александр Кириллов
Александр Кириллов
технический директор Evrone

Kubernetes
на минималках
Привычные инструменты управления
контейнерами для небольших проектов
bit.ly/metakb @akirill0v Александр Кириллов
Что сейчас будет?
Рассказывает Александр Кириллов

Чем занимается СТО в Evrone

Опыт в IT 15 лет

Время выступления 30 минут

Вопросы В конце выступления, 10 минут

Слайды

3 bit.ly/metakb @akirill0v Александр Кириллов


Френдитесь,
фоткайте
и постите
в соцсети! kirillov@evrone.com

akirill0v

4 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в

5 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.

6 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.
● Ruby, Python, Go, JavaScript.

7 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.
● Ruby, Python, Go, JavaScript.
● PostgreSQL, Redis, RabbitMQ.

8 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.
● Ruby, Python, Go, JavaScript.
● PostgreSQL, Redis, RabbitMQ.
● AWS, GCE, DO, BareMetal.

9 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.
● Ruby, Python, Go, JavaScript.
● PostgreSQL, Redis, RabbitMQ.
● AWS, GCE, DO, BareMetal.
● GitLab CI/CD, CircleCI.

10 bit.ly/metakb @akirill0v Александр Кириллов


Что мы используем в Evrone
● Микросервисы и монолиты.
● Ruby, Python, Go, JavaScript.
● PostgreSQL, Redis, RabbitMQ.
● AWS, GCE, DO, BareMetal.
● GitLab CI/CD, CircleCI.
● hub.docker.com.

11 bit.ly/metakb @akirill0v Александр Кириллов


Как техдир,
я хочу IaC

12 bit.ly/metakb @akirill0v Александр Кириллов


Как техдир, я хочу IaC
● Автоматическое развертывание
инфраструктуры.

13 bit.ly/metakb @akirill0v Александр Кириллов


Как техдир, я хочу IaC
● Автоматическое развертывание
инфраструктуры.
● Автоматическая доставка релизов.

14 bit.ly/metakb @akirill0v Александр Кириллов


Как техдир, я хочу IaC
● Автоматическое развертывание
инфраструктуры.
● Автоматическая доставка релизов.
● Автоматическое масштабирование.

15 bit.ly/metakb @akirill0v Александр Кириллов


Как техдир, я хочу IaC
● Автоматическое развертывание
инфраструктуры.
● Автоматическая доставка релизов.
● Автоматическое масштабирование.
○ Ну и ручное, на крайний случай.

16 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War
между
разработчиками

17 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.

18 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker

19 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm

20 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm
○ Nomad

21 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm
○ Nomad
○ Cloud66

22 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm
○ Nomad
○ Cloud66
○ ... много чего еще.

23 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm
○ Nomad
○ Cloud66
○ ... много чего еще.
● Kubernetes сложный.

24 bit.ly/metakb @akirill0v Александр Кириллов


Большой Holy War между
разработчиками
● Разработчики привыкли к разному.
○ Docker
○ DockerCompose || Swarm
○ Nomad
○ Cloud66
○ ... много чего еще.
● Kubernetes сложный.
● Kubernetes тяжелый.

25 bit.ly/metakb @akirill0v Александр Кириллов


Но Kubernetes
НЕ сложный

26 bit.ly/metakb @akirill0v Александр Кириллов


Но Kubernetes НЕ сложный
● ... если переиспользовать наработки.

27 bit.ly/metakb @akirill0v Александр Кириллов


Но Kubernetes НЕ сложный
● ... если переиспользовать наработки.
● Переиспользование зависимостей с помощью
Helm.

28 bit.ly/metakb @akirill0v Александр Кириллов


Но Kubernetes НЕ сложный
● ... если переиспользовать наработки.
● Переиспользование зависимостей с помощью
Helm.
● Готовые open source charts для
зависимостей, например, kubeapps.

29 bit.ly/metakb @akirill0v Александр Кириллов


Но Kubernetes НЕ сложный
● ... если переиспользовать наработки.
● Переиспользование зависимостей с помощью
Helm.
● Готовые open source charts для
зависимостей, например, kubeapps.
● Deploy одной кнопкой.

30 bit.ly/metakb @akirill0v Александр Кириллов


… если есть Helm

31 bit.ly/metakb @akirill0v Александр Кириллов


… если есть Helm

32 bit.ly/metakb @akirill0v Александр Кириллов


Откуда возьмется
Kubernetes?

33 bit.ly/metakb @akirill0v Александр Кириллов


Откуда возьмется Kubernetes?
● Managed в облаке
○ Одной кнопкой в Amazon, Google, IBM, Digital Ocean.

34 bit.ly/metakb @akirill0v Александр Кириллов


Откуда возьмется Kubernetes?
● Managed в облаке
○ Одной кнопкой в Amazon, Google, IBM, Digital Ocean.
○ Другой кнопкой в Selectel, Яндекс, Mail.ru.

35 bit.ly/metakb @akirill0v Александр Кириллов


Откуда возьмется Kubernetes?
● Managed в облаке
○ Одной кнопкой в Amazon, Google, IBM, Digital Ocean.
○ Другой кнопкой в Selectel, Яндекс, Mail.ru.
● Полуавтоматически на bare metal:
○ Ansible, Rancher, Kubeadm, shell scripts, наконец.

36 bit.ly/metakb @akirill0v Александр Кириллов


С "тяжестью"
сложнее

37 bit.ly/metakb @akirill0v Александр Кириллов


С "тяжестью" сложнее
● Несколько нод

38 bit.ly/metakb @akirill0v Александр Кириллов


С "тяжестью" сложнее
● Несколько нод
● Множество компонентов

39 bit.ly/metakb @akirill0v Александр Кириллов


Kubernetes distributions

40 bit.ly/metakb @akirill0v Александр Кириллов


Kubernetes distributions

http://bit.ly/2J3AfvY

41 bit.ly/metakb @akirill0v Александр Кириллов


Kubernetes distributions

42 bit.ly/metakb @akirill0v Александр Кириллов


Kubernetes distributions

43 bit.ly/metakb @akirill0v Александр Кириллов


K3S
● “Облегченный” Kubernetes.

44 bit.ly/metakb @akirill0v Александр Кириллов


K3S
● “Облегченный” Kubernetes.
● Один “бинарник” чуть меньше 40 MB.

45 bit.ly/metakb @akirill0v Александр Кириллов


K3S
● “Облегченный” Kubernetes.
● Один “бинарник” чуть меньше 40 MB.
● Всего 512 MB RAM необходимо для запуска.

46 bit.ly/metakb @akirill0v Александр Кириллов


K3S
● “Облегченный” Kubernetes.
● Один “бинарник” чуть меньше 40 MB.
● Всего 512 MB RAM необходимо для запуска.
○ Около 75 мегабайт на ноде

47 bit.ly/metakb @akirill0v Александр Кириллов


Как у них это получилось?

48 bit.ly/metakb @akirill0v Александр Кириллов


Архитектура кубов, вид сверху

49 bit.ly/metakb @akirill0v Александр Кириллов


Архитектура кубов, вид сверху
● "master node"

50 bit.ly/metakb @akirill0v Александр Кириллов


Архитектура кубов, вид сверху
● "master node"
● "worker node"

51 bit.ly/metakb @akirill0v Александр Кириллов


Master node

52 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера

53 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера
● Kube-apiserver
○ Манипулирует сущностями, ходит в etcd

54 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера
● Kube-apiserver
○ Манипулирует сущностями, ходит в etcd
● Kube-controller-manager
○ Управляет подами, сервисами, деплойментом

55 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера
● Kube-apiserver
○ Манипулирует сущностями, ходит в etcd
● Kube-controller-manager
○ Управляет подами, сервисами, деплойментом
● Cloud-controller-manager
○ Интеграция с cloud-провайдерами

56 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера
● Kube-apiserver
○ Манипулирует сущностями, ходит в etcd
● Kube-controller-manager
○ Управляет подами, сервисами, деплойментом
● Cloud-controller-manager
○ Интеграция с cloud-провайдерами
● Kube-scheduler
○ Распределение сущностей по нодам

57 bit.ly/metakb @akirill0v Александр Кириллов


Master node
● Etcd
○ хранит все метаданные кластера
● Kube-apiserver
○ Манипулирует сущностями, ходит в etcd
● Kube-controller-manager
○ Управляет подами, сервисами, деплойментом
● Cloud-controller-manager
○ Интеграция с cloud-провайдерами
● Kube-scheduler
○ Распределение сущностей по нодам

58 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster

59 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster
● Хранилище метаданных.

60 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster
● Хранилище метаданных.
● Тяжелое, 1Gb минимум (рекомендуют 8Gb).

https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/hardware.md#memory

61 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster
● Хранилище метаданных.
● Тяжелое, 1Gb минимум (рекомендуют 8Gb).
● С каждой версией все тяжелее.

62 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster
● Хранилище метаданных.
● Тяжелое, 1Gb минимум (рекомендуют 8Gb).
● С каждой версией все тяжелее.
● Можно заменить на sqlite, потеряв HA
multimaster.

63 bit.ly/metakb @akirill0v Александр Кириллов


Master node: etcd cluster
● Хранилище метаданных.
● Тяжелое, 1Gb минимум (рекомендуют 8Gb).
● С каждой версией все тяжелее.
● Можно заменить на sqlite, потеряв HA
multimaster.
○ В K3S оставили возможность подключить внешний сторадж
(на выбор etcd, Mysql, Postgres...
...или Sqlite (из коробки))

64 bit.ly/metakb @akirill0v Александр Кириллов


Master node:
cloud-controller-manager
● Интеграция с cloud-провайдерами.

65 bit.ly/metakb @akirill0v Александр Кириллов


Master node:
cloud-controller-manager
● Интеграция с cloud-провайдерами.
● Тяжелый, потому что в нем ВСЕ интеграции.

66 bit.ly/metakb @akirill0v Александр Кириллов


Master node:
cloud-controller-manager
● Интеграция с cloud-провайдерами.
● Тяжелый, потому что в нем ВСЕ интеграции.
● Можно облегчить.

https://refactoring.guru/images/refactoring/content/smells/large-class-02.png

67 bit.ly/metakb @akirill0v Александр Кириллов


Worker node

68 bit.ly/metakb @akirill0v Александр Кириллов


Worker node
● Kubelet
○ Жизненный цикл подов на ноде.

69 bit.ly/metakb @akirill0v Александр Кириллов


Worker node
● Kubelet
○ Жизненный цикл подов на ноде.
● Kube_proxy
○ Управляет сетью, туннелирование.

70 bit.ly/metakb @akirill0v Александр Кириллов


Worker node
● Kubelet
○ Жизненный цикл подов на ноде.
● Kube_proxy
○ Управляет сетью, туннелирование.

71 bit.ly/metakb @akirill0v Александр Кириллов


Что будет, если отрезать
от кубов все

72 bit.ly/metakb @akirill0v Александр Кириллов


Отчет о набитых шишках

73 bit.ly/metakb @akirill0v Александр Кириллов


Балансировка
запросов

74 bit.ly/metakb @akirill0v Александр Кириллов


Балансировка запросов
● Обычно делается железом cloud-провайдера.

75 bit.ly/metakb @akirill0v Александр Кириллов


Балансировка запросов
● Обычно делается железом cloud-провайдера.
● А мы можем использовать Traefik, MetalLB.

76 bit.ly/metakb @akirill0v Александр Кириллов


Балансировка запросов
● Обычно делается железом cloud-провайдера.
● А мы можем использовать Traefik, MetalLB.
○ Автогенерация SSL-сертификата без CertManager.

77 bit.ly/metakb @akirill0v Александр Кириллов


Persistence
данных

78 bit.ly/metakb @akirill0v Александр Кириллов


Persistence данных
● Это я про базу.

79 bit.ly/metakb @akirill0v Александр Кириллов


Persistence данных
● Это я про базу.
● Обычно тоже делают cloud-провайдеры: EBS
и т.п.

80 bit.ly/metakb @akirill0v Александр Кириллов


Persistence данных
● Это я про базу.
● Обычно тоже делают cloud-провайдеры: EBS
и т.п.
● В простом случае можно использовать
StorageClass.

81 bit.ly/metakb @akirill0v Александр Кириллов


Persistence данных
● Это я про базу.
● Обычно тоже делают cloud-провайдеры: EBS
и т.п.
● В простом случае можно использовать
StorageClass.
○ LocalStorage от Rancher

82 bit.ly/metakb @akirill0v Александр Кириллов


Persistence данных
● Это я про базу.
● Обычно тоже делают cloud-провайдеры: EBS
и т.п.
● В простом случае можно использовать
StorageClass.
● В сложном случае — подключаемые сервисы.

83 bit.ly/metakb @akirill0v Александр Кириллов


Сбор логов

84 bit.ly/metakb @akirill0v Александр Кириллов


Сбор логов
● ELK/EFK и Graylog "тяжелые".

85 bit.ly/metakb @akirill0v Александр Кириллов


Сбор логов
● ELK/EFK и Graylog "тяжелые".
● Можно использовать Loki или SaaS.

86 bit.ly/metakb @akirill0v Александр Кириллов


Метрики

87 bit.ly/metakb @akirill0v Александр Кириллов


Метрики
● Prometheus

88 bit.ly/metakb @akirill0v Александр Кириллов


Метрики
● Prometheus
○ Написан на Go, легковесный.

89 bit.ly/metakb @akirill0v Александр Кириллов


Метрики
● Prometheus
○ Написан на Go, легковесный.
○ Модульный, можно оставить только core-модуль
"server".

90 bit.ly/metakb @akirill0v Александр Кириллов


Метрики
● Prometheus
○ Написан на Go, легковесный.
○ Модульный, можно оставить только core-модуль
"server".
○ ... и выставить ему лимиты, чтобы он не умер от oom
killer.

91 bit.ly/metakb @akirill0v Александр Кириллов


Метрики
● Prometheus
○ Написан на Go, легковесный.
○ Модульный, можно оставить только core-модуль
"server".
○ ... и выставить ему лимиты, чтобы он не умер от oom
killer.
● Или SaaS, например, Datadog.

92 bit.ly/metakb @akirill0v Александр Кириллов


Mesh
● ISTIO Не стоит даже и пробовать

93 bit.ly/metakb @akirill0v Александр Кириллов


Mesh
● ISTIO Не стоит даже и пробовать

...или посмотрите на Maesh (https://mae.sh/)

94 bit.ly/metakb @akirill0v Александр Кириллов


Custom Resources (Operators)
● Можно использовать операторы

95 bit.ly/metakb @akirill0v Александр Кириллов


Custom Resources (Operators)
● Можно использовать операторы

96 bit.ly/metakb @akirill0v Александр Кириллов


Custom Resources (Operators)
● Можно использовать операторы

97 bit.ly/metakb @akirill0v Александр Кириллов


Custom Resources (Operators)
● Можно использовать операторы
● Да и “вообще” кастомные ресурсы

98 bit.ly/metakb @akirill0v Александр Кириллов


В итоге...
● Легкий деплоймент “одной строкой”
● Минимальные затраты ресурсов на инстансах
● Балансировка запросов через Traefik
● Данные храним в локальном хранилище
● Есть “легкие” решения для хранения логов
● Метрики работают почти без изменений
● Есть поддержка Operators и CRD

● “K3s is a Certified Kubernetes distribution”

99 bit.ly/metakb @akirill0v Александр Кириллов


В итоге...
● Да, Kubernetes разный.
● Имеем единый подход к настройке окружения
● Спецификация и переиспользование наработок
● Углубление экспертных знаний вместо распыления внимания
● Готовность к масштабированию в “большой продакшн”

100 bit.ly/metakb @akirill0v Александр Кириллов


В итоге...
● Да, Kubernetes разный.
● Имеем единый подход к настройке окружения
● Спецификация и переиспользование наработок
● Углубление экспертных знаний вместо распыления внимания
● Готовность к масштабированию в “большой продакшн”

Обсудим?
101 bit.ly/metakb @akirill0v Александр Кириллов

Вам также может понравиться