Findify
- Поиск и рекомендации
- 15M уников в месяц, 100 rps
AWS everywhere!
- CloudFormation, Beanstalk
- в начале - хорошо
- потом - ад копипасты
- счет - 10k$/месяц
AWS подкинула проблем
- dev / staging / prod - АААА!
- colocating apps - нельзя
- spot instances - через жопу
Любое телодвижение увеличивает счёт
Я твой куратор в игре синий кит
- AWS ECS
- Mesos + Marathon
- Nomad
- Kubernetes
Оркестраторы
|
ECS |
Mesos |
K8s |
порог вхождения |
ок |
высокий |
высокий |
фичи |
мало |
средне |
много |
расширяемость |
нет |
высокая |
средне |
сеть |
нет |
есть |
есть |
А чё не <swarm/rancher/dcos/etc>?
Kubernetes
- Написан гуглом
- у нас - 1.5, недавно вышел 1.6
- безумное количество фич
- большое комьюнити, есть GСE
Как поставить?
- kubeadm / minikube - для утех
- kops / kubernetes-ansible - в прод
- GCE - анальный зонд от гугла
Поды
- группа докер-контейнеров
- запускается в одном месте
Гвозди микроскопом
Поды слишком низкоуровневы:
Deployment
декларативное описание операций над подами:
- deploy-rollback
- scale up-down
- rolling update
Service
логическая группа подов
- динамически добавляются новые поды
- удаляются дохлые поды
- единая точка контакта
Типы сервисов
- ClusterIP: только внутри
- NodePort: привет, HAproxy
- LoadBalancer: интеграция с ELB
- ExternalName: маппинг для внешних сервисов
Да я то же самое могу!
- На баш скриптах!
- Я знаю ansible/chef/salt/etc!
- Это умеет swarm/mesos/etc.!
k8s это не только ценный мех
- stateful-приложения
- cluster network
- autoscaling
- service discovery
- multi-DC
Как запустить mysql в k8s?
StatefulSet:
- network identity
- persistent storage
- порядок операций
StatefulSet
- PersistentVolumeClaim: хочу 100Гб, дай!
- PersistentVolume: на, тут уже было!
- PV Provisioning: на, я создал!
Где хранить?
- Provisioning: GCE-PD, AWS EBS
- GlusterFS, Ceph, Cinder, vSphere, Quobyte, Azure disk
Негатив: Cassandra
- AWS: EBS привязан к AZ
- соединения снаружи
- OOM
результат: вынесли её на отдельные ноды
Негатив: сеть
- Используем weave-cni [flannel/calico]
- дважды вынесло весь кластер
Jenkins: до
- Scala: билды по пол-часа
- Несколько билдов мешают друг другу
- на сервере зоопарк
- overprovisioning
Jenkins: после
- jenkins-k8s: воркеры по запросу
- отдельные контейнеры для разных приложений
- быстрые билды, не мешающие друг другу
Деньги: до
- каждый сервис: отдельный инстанс в разных AZ
- низкая утилизация
- велосипеды для деплоя
Деньги: после
- slave-ноды на spot-инстансах (через spotinst.com)
- автоскейлинг: в зависимости от утилизации
- разные окружения на одном кластере
- счет в 3 раза меньше
Use case: сборка индекса
Сервис по периодической сборке индекса для ES
- очередь сообщений
- собирает несколько индексов одновременно
- проблема: индексы разные
Use case: сборка индекса, после
- Один индекс - один CronJob
- разные ресурсы для больших индексов
А надо ли оно вам?
нет*
* - скорее всего
Что вас ждет
- Запутанная документация
- Баги
- Седые волосы из-за деплоя
- Инфаркт при обновлении
- Осознание собственной тупизны
Что вас еще ждёт
- Декларативное описание инфраструктуры
- Ровная утилизация кластера
- Спокойный деплой
Вопросы?
оскорбления | 100 | 200 | 300 | 400 | 500 |
холивар | 100 | 200 | 300 | 400 | 500 |
алгоритмы | 100 | 200 | 300 | 400 | 500 |
карго-культ | 100 | 200 | 300 | 400 | 500 |
эмоциональное выгорание | 100 | 200 | 300 | 400 | 500 |
языки программирования | 100 | 200 | 300 | 400 | 500 |