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

从零开始,打造 Ruby 项目的容器化集成工具

2ad2ef82b03154f835645e08399b3082?s=47 Ivan Chou
September 19, 2017

从零开始,打造 Ruby 项目的容器化集成工具

2ad2ef82b03154f835645e08399b3082?s=128

Ivan Chou

September 19, 2017
Tweet

Other Decks in Programming

Transcript

  1. 从零开始 为 Ruby 项⽬目容器器化打造集成⼯工具

  2. ⽤用 docker 来部署 Rails 项⽬目 这个有什什么好讲的?

  3. Rubyist 周艺 铲屎官 曾就职于「速递易易」 现在在「知⼈人」in「彩程」 @IChou 沉浸在 Review 中的「⼀一只猫2」

  4. 全国最⼤大的智能快递柜公司 ⾄至少…暂时…应该是

  5. 快递柜01 快递柜02 快递柜03 快递柜04 快递柜05 快递柜06 快递柜6w …… Business
 Center

    (Rails) Sidekiq Queue01 Queue02 Queue03 Queue04 Queue05 Queue14 …… RubyApp01 RubyApp02 RubyApp03 RubyApp04 RubyAppX …… OtherApp 若⼲干 ⾃自建DDOS ⽆无脑 Retry
  6. 上线⼀一不不⼩小⼼心就 解锁了了成就 不不过没关系 反正都是「阿⾥里里云的锅」

  7. Microservices 应⽤用数量量爆炸、请求链路路复杂、雪崩⻛风险 Capistrano 服务器器资源分配不不均、回滚不不总是可靠、单次部署数量量受限 OneAPM ⼀一个⽉月总有那么⼏几天报警有问题或者不不及时 Staff 只有⼀一名运维⼯工程师

  8. ▸ 榨⼲干服务器器资源,控制⽀支出(主要原因) ▸ 秒级扩容 ▸ 真正实时的监控和告警 ▸ 快速可靠的回滚 ▸ 熔断机制

    ▸ 简化运维操作(图形化产品) 亟待解决的问题:
  9. None
  10. 搞事情~ 搞事情~ ⼀一个实习⼀一对基 吴天亮 速递易易第⼀一运维 ⾦金金海海洋
 娶了了成都妹⼉儿的江苏⼈人 胡鸿达 基础平台⽼老老⼤大

  11. GoCD https://www.gocd.org Open source continuous delivery server to model and

    visualize complex workflows with ease
  12. Rancher an open source project that provides a complete platform

    for operating Docker in production https://github.com/rancher/rancher
  13. GoCD Rancher IMAGE How to build? How to deploy?

  14. docker_compose https://github.com/docker/compose discourse_docker https://github.com/discourse/discourse_docker

  15. base_image ubuntu_image GoCD Ruby APP + work_image Docker Registry Rancher

    build deploy Rancher cli discourse_docker
  16. OpenResty Kafka Kibana Ruby APP Rancher balancer work_image 钉钉机器⼈

  17. 理理想中 事实上

  18. ▸ 部署更更慢了了(20min 以上很正常) ▸ 配置更更复杂了了 ▸ 迁移进度慢、成本⾼高 ▸ 不不稳定因素增加了了 容器器化带来的新问题

  19. 来,我们商量量个事⼉儿 不不难吧 相信你 ⼀一周可以搞定么? 你抽点时间把容器器化这块重构了了

  20. 因地制宜 1 Maybe you think this is the translation of

    the title, but it’s not. hahaha ~ 重新设计镜像,规划打包流程
  21. base_image ubuntu_image Ruby APP + work_image 10 mins at least

    ruby:2.3.1 base_image Gemfile + App_base_image Ruby APP + work_image about 30sec install deps & bundle Before After
  22. 100 200 300 400 500 600 700 800 900 (MB)

    Before After 镜像减肥 镜像设计的核⼼心思想:是简,不不是⼩小
  23. Base_Image 打包内容⼀一览 ▸ 本地化
 (语⾔言、时区、apt 源、gem 源) ▸ 必需的依赖
 (libmysqlclient-dev

    etc.) ▸ 被认为必要的⼯工具
 (sudo curl cron vim htop runit nscd) ▸ OpenResty ▸ live 账户初始化 ▸ pups
  24. ⼀一劳永逸 2 Maybe you think this is the translation of

    the title, but it’s not. hahaha ~ 功能模块化,建项⽬目如搭积⽊木
  25. PUPS Simple yaml based bootstrapper for Linux machines
 https://github.com/SamSaffron/pups
 Powered

    by Ruby
  26. web.puma.template.yml Merge yaml files Run shell command Create/replace files Hook

    support Params
  27. container.yml templates

  28. docker run templates content of all templates pups content run

    cmd docker commit docker tag PUPS from base_image push image 这是个⿊黑箱镜像啊~ 镜像打包⼯工具 packer
  29. None
  30. Template 编写原则 ▸ Convention Over Configuration
 ▸ DRY
 ▸ Flexible

    enough
  31. 化繁为简 3 Maybe you think this is the translation of

    the title, but it’s not. hahaha ~ 配置要够简单,也要够灵活
  32. 之前的配置⽂文件 container.yml rancher-compose.yml docker-compose.yml X 2 X 40 = 240

  33. 之前的部署命令

  34. ⽬目标:⼀一个⽉月内完成 20+ 项⽬目的容器器化迁移 限定:不不能影响新需求开发进度,⾃自⼰己抽时间

  35. 镜像部署⼯工具 deployer container.yml rancher-compose.yml docker-compose.yml path/to/deployer #{PROJECT_NAME} production $GO_PIPELINE_LABEL

  36. So easy! ⼀一个⽉月 “所有”⽼老老项⽬目全部迁移到容器器

  37. runit + entrypoint.sh etc/ !"" runit/ # !"" 1.d #

    # %"" 00-commands-for-launch # %"" 3.d # %"" 01-commands-for-halt !"" service/ # !"" cron # # !"" run # # %"" supervise # !"" nginx -> /etc/service-available/nginx # !"" nscd # # !"" run # # %"" supervise # %"" puma -> /etc/service-available/puma %"" service-available/ !"" nginx # !"" run # %"" supervise %"" puma !"" run %"" supervise
  38. 授⼈人以⻥鱼 4 Maybe you think this is the translation of

    the title, but it’s not. hahaha ~ 管理理界⾯面化,降低使⽤用成本
  39. 配置管理理界⾯面化 ▸ 偷懒 ▸ 新功能快速推⾏行行 ▸ 可复⽤用的系统 ▸ 权限控制

  40. ROCKETS BASE IMAGE PACKER DEPLOYER ? WEB

  41. 总结 5 因地制宜 注重⾃自身特点,设计镜像层次及打包流程 ⼀一劳永逸 打包流程按功能模块化,建项⽬目如搭积⽊木 化繁为简 配置要尽可能简单,避免低效的重复劳动 授⼈人以⻥鱼 简单易易⽤用,体验友好,才是⼀一款合格的⼯工具

  42. 反思

  43. 搅基或内推 请关注

  44. 谢谢⼤大家 祝各位码运昌隆隆