$30 off During Our Annual Pro Sale. View Details »

Microservices 時代の開発環境 / Development env in the microservices age

Microservices 時代の開発環境 / Development env in the microservices age

Microservices Meetup vol.8 Lightning Talks Battle!

https://microservices-meetup.connpass.com/event/99190/

Fumiaki MATSUSHIMA

August 30, 2018
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

  1. #microserv Microservices 時代の開発環境
    Microservices 時代の開発環境
    @mtsmfm
    Fumiaki Matsushima
    Microservices Meetup vol.8 Lightning Talks Battle!

    View Slide

  2. #microserv Microservices 時代の開発環境
    ➔ Web Dev at Quipper
    ➔ Ruby と麻雀と DbD が好き
    ➔ 西日暮里.rb、
    GraphQL Tokyo 主催
    @mtsmfm.inspect

    View Slide

  3. #microserv Microservices 時代の開発環境
    https://studysapuri.jp/

    View Slide

  4. #microserv Microservices 時代の開発環境

    View Slide

  5. #microserv Microservices 時代の開発環境
    https://nishinipporirb.doorkeeper.jp/

    View Slide

  6. #microserv Microservices 時代の開発環境
    https://www.meetup.com/ja-JP/GraphQL-Tokyo/

    View Slide

  7. #microserv Microservices 時代の開発環境
    Microservices 時代の開発環境
    @mtsmfm
    Fumiaki Matsushima
    Microservices Meetup vol.8 Lightning Talks Battle!

    View Slide

  8. #microserv Microservices 時代の開発環境
    ※ まだ Microservices してないです

    View Slide

  9. #microserv Microservices 時代の開発環境
    複数アプリ DB 共有

    View Slide

  10. #microserv Microservices 時代の開発環境
    複数アプリ DB 共有
    a.k.a
    分断されたモノリス

    View Slide

  11. #microserv Microservices 時代の開発環境
    本番となるべく同じで
    らくちんな開発環境を

    View Slide

  12. #microserv Microservices 時代の開発環境
    https://speakerdeck.com/mtsmfm/qall-development-env-on-docker-for-quipper

    View Slide

  13. #microserv Microservices 時代の開発環境
    現状専ら
    docker-compose

    View Slide

  14. #microserv Microservices 時代の開発環境
    本番は k8s
    開発は docker-compose
    それでいいのか?

    View Slide

  15. #microserv Microservices 時代の開発環境
    https://speakerdeck.com/mtsmfm/rails-development-environment-built-on-draft

    View Slide

  16. #microserv Microservices 時代の開発環境
    Draft というか
    Helm がツラそう

    View Slide

  17. #microserv Microservices 時代の開発環境
    Helm の難点
    ➔ テンプレートに引数をひたすら与えて分岐しまく
    るとツラミがある
    ◆ 全部 Values としてカスタマイズ可能になっていないとい
    けない
    ◆ 他人の書いた分岐とか読めたもんじゃなくなっていきそう
    ◆ インデントの考慮がだるい

    View Slide

  18. #microserv Microservices 時代の開発環境
    Kustomize

    View Slide

  19. #microserv Microservices 時代の開発環境
    https://github.com/kubernetes-sigs/kustomize

    View Slide

  20. #microserv Microservices 時代の開発環境
    個人の
    遊びプロジェクトで
    試した

    View Slide

  21. #microserv Microservices 時代の開発環境
    https://github.com/mtsmfm/gh-deck/commit/58478b0ca5266ebe723c9082418ad74a7ef5e76e?diff=unified

    View Slide

  22. #microserv Microservices 時代の開発環境
    ➔ /Dockerfile
    ➔ /k8s
    ◆ /base
    ● kustomization.yaml
    ● deployment.yaml
    ● ...
    ◆ /overlays
    ● /development
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ …
    ● /production
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ ...

    View Slide

  23. #microserv Microservices 時代の開発環境
    ➔ /Dockerfile
    ➔ /k8s
    ◆ /base
    ● kustomization.yaml
    ● deployment.yaml
    ● ...
    ◆ /overlays
    ● /development
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ …
    ● /production
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ ...
    Kustomize 用の
    設定ファイル

    View Slide

  24. #microserv Microservices 時代の開発環境
    ➔ /Dockerfile
    ➔ /k8s
    ◆ /base
    ● kustomization.yaml
    ● deployment.yaml
    ● ...
    ◆ /overlays
    ● /development
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ …
    ● /production
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ ...
    k8s の普通の
    YAML 郡

    View Slide

  25. #microserv Microservices 時代の開発環境
    ➔ /Dockerfile
    ➔ /k8s
    ◆ /base
    ● kustomization.yaml
    ● deployment.yaml
    ● ...
    ◆ /overlays
    ● /development
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ …
    ● /production
    ○ kustomization.yaml
    ○ deployment.yaml
    ○ ...
    base の YAML に
    merge される
    環境毎の定義

    View Slide

  26. #microserv Microservices 時代の開発環境

    View Slide

  27. #microserv Microservices 時代の開発環境

    View Slide

  28. #microserv Microservices 時代の開発環境
    新しい定義たち
    Merge される定義たち

    View Slide

  29. #microserv Microservices 時代の開発環境
    コマンドの結果を secret へ

    View Slide

  30. #microserv Microservices 時代の開発環境

    View Slide

  31. #microserv Microservices 時代の開発環境

    View Slide

  32. #microserv Microservices 時代の開発環境
    開発に欲しい
    プロセスを足す

    View Slide

  33. #microserv Microservices 時代の開発環境
    Pry 用に
    stdin と tty

    View Slide

  34. #microserv Microservices 時代の開発環境
    この辺をキーに
    merge

    View Slide

  35. #microserv Microservices 時代の開発環境
    Draft にあって Kustomize にないもの
    ➔ docker build した結果を k8s に展開する楽な
    方法がない
    ◆ docker build -t して新しいタグ付け
    ◆ kubectl patch なりで Deployment の更新
    ◆ Draft なら draft up で済む

    View Slide

  36. #microserv Microservices 時代の開発環境
    ➔ /bin
    ◆ docker-build
    ◆ deploy-dev
    ◆ deploy-prd

    View Slide

  37. #microserv Microservices 時代の開発環境
    ➔ /bin
    ◆ docker-build
    ◆ deploy-dev
    ◆ deploy-prd
    開発用のイメージを Build

    View Slide

  38. #microserv Microservices 時代の開発環境

    View Slide

  39. #microserv Microservices 時代の開発環境
    開発用に build 高速化でき
    る arg を追加

    View Slide

  40. #microserv Microservices 時代の開発環境
    (概ね) 一意になりつつソート
    可能なタグづけ

    View Slide

  41. #microserv Microservices 時代の開発環境
    ➔ /bin
    ◆ docker-build
    ◆ deploy-dev
    ◆ deploy-prd
    手元の k8s に展開
    本番の k8s に展開

    View Slide

  42. #microserv Microservices 時代の開発環境

    View Slide

  43. #microserv Microservices 時代の開発環境
    hostPath のマウント用
    最新の image の tag

    View Slide

  44. #microserv Microservices 時代の開発環境
    _人人人人人人人_
    > sed で十分 <
     ̄Y^Y^Y^Y^Y^Y ̄

    View Slide

  45. #microserv Microservices 時代の開発環境
    やってみての感想
    ➔ テンプレートなんか要らなかったんや...
    ◆ 素の YAML 同士だから書きやすい、読みやすい
    ➔ docker build && deploy 機構なんか要らなかっ
    たんや...
    ◆ それ sed で ry

    View Slide

  46. #microserv Microservices 時代の開発環境
    やってみての感想
    ➔ 個人ごとに違う Secrets を .env 的に1ファイル
    にまとめたい気もする
    ◆ 新しいのが増えたときに設定していなければ死ぬような
    工夫も欲しい
    ➔ 開発用 Docker image はどこで build するべき
    なのか未だにわからん
    ◆ デフォは CI で build したものを参照?

    View Slide