Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2018. Игорь Яцевич (2ГИС) — PHP прилож...

CodeFest
April 05, 2018

CodeFest 2018. Игорь Яцевич (2ГИС) — PHP приложение в Kubernetes

Посмотрите выступление Игоря: https://2018.codefest.ru/lecture/1260/

В наше время облачная инфраструктура перестала быть чем-то экзотическим и используется всё чаще вне зависимости от уровня проекта. Тем не менее, имея рабочую версию приложения в привычной среде, не всегда понятно, стоит ли браться за «переезд» ради всех благ новых облачных технологий. Я поделюсь опытом переноса PHP приложений 2ГИС в Kubernetes и расскажу: - Почему мы перешли с инфраструктуры в виде OpenStack/Ansible на Kubernetes. - Как у нас получилось сделать максимально близкими окружения dev, stage и production. - Об особенностях конфигурации Kubernetes-манифеста для PHP приложения. - Как мы проверяем работоспособность решения в Kubernetes. - С какими проблемами при переносе мы столкнулись и как их решали.

CodeFest

April 05, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. Обо мне — 10 лет в разработке бекендов — 4

    года в 2ГИС — 2 года в роли тимлида
  2. Что не так? — Унификация эксплуатации — Отказоустойчивость — Не

    заметные для пользователей релизы — Простая возможность отката релиза
  3. Что не так? — Унификация эксплуатации — Отказоустойчивость — Не

    заметные для пользователей релизы — Простая возможность отката релиза — Медленная скорость деплоя
  4. Что не так? — Унификация эксплуатации — Отказоустойчивость — Не

    заметные для пользователей релизы — Простая возможность отката релиза — Медленная скорость деплоя — Потребность в автоматизации деплоя
  5. Что не так? — Унификация эксплуатации — Отказоустойчивость — Не

    заметные для пользователей релизы — Простая возможность отката релиза — Медленная скорость деплоя — Потребность в автоматизации деплоя — Сложность автоматизации автотестов
  6. Почему это плохо? — не docker way — тяжело эксплуатировать

    — проблемы масштабируемости останутся
  7. Проверяем полной нагрузкой — зеркалируем весь трафик с боя —

    следим за потреблением ресурсов — следим за логом ошибок
  8. Проверяем полной нагрузкой — зеркалируем весь трафик с боя —

    следим за потреблением ресурсов — следим за логом ошибок — следим за метриками приложения
  9. Все упало — начали 500 приложения в кластере — забита

    сеть — DNS не вывозит — виновато наше приложение
  10. Background process - scheduler $worker = new KohkimakimotoWorkerWorker(); $worker->job( "cleanup_old_tokens",

    [ 'cron_time' => '0 3 * * *', 'max_processes' => 1, 'command' => 'php yii cleanup' ] ); $worker->start();
  11. Background process. Cron-job? — только недавно вышла из alpha —

    не было автоудаления отработавших pods
  12. Background process. Cron-job? — только недавно вышла из alpha —

    не было автоудаления отработавших pods — тяжеловесный механизм
  13. Logs => stdout/stderr [pool www] child 12 said into stdout:

    {“message”: "2017-09-21 14:10:02 [x.x.x.x][-][-][trace][yii\base\Application::bootstrap] Bootstrap with yii\debug\Module::bootstrap()...
  14. Config ... 'logstash' => [ 'class' => 'app\components\GelfLogger\GraylogTarget', 'enabled' =>

    getenv('APP_LOG_TARGET') == 'logstash', 'host' => getenv('APP_GELF_HOST') , 'port' => getenv('APP_GELF_PORT') , ] ...
  15. Host platforms Dev, QA, CI Docker-compose Env files Stage, Performance,

    Production Kubernetes/K8s-handle Gitlab Variables/K8s-handle
  16. Почему не Minikube? — сложнее использовать в CI — все

    равно будет != production — сложнее разворачивать внешние backend service
  17. Почему Docker-Compose? — простой и популярный инструмент — можно поднять

    набор любых контейнеров — достаточная похожесть на Kubernetes
  18. Gitlab CI Variables — храним только секретные данные (ключи доступа

    к сервисам, пароли) — доступно только команде проекта