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

1日約70万ビルド: DockerとNomadが支えるCI/CDプラットフォーム

Kim, Hirokuni
September 08, 2018
4.9k

1日約70万ビルド: DockerとNomadが支えるCI/CDプラットフォーム

builderscon 2018 9/8 15:30 多目的教室1でのセッション

Kim, Hirokuni

September 08, 2018
Tweet

More Decks by Kim, Hirokuni

Transcript

  1. 1日70万ビルド: DockerとNomadが支える
    CI/CDプラットフォーム

    View Slide

  2. フィードバックのお願い
    内容だけではなく、テクニカルな部分もお願いします
    傷つかないようオブラートに包んでね

    View Slide

  3. 本日のコンディションについて

    View Slide

  4. なぜこれを話そうと思ったか
    背景
    Kubernetesがそろそろ世界制覇しそう
    Nomadだれも使ってない
    CircleCI 2.0でNomadをフル活用しているので

    View Slide

  5. "Kubernetes is the future!" by GitLab

    View Slide

  6. BuildersConn 2018だけでも4セッションがk8s...

    View Slide

  7. That's crazy!!

    View Slide

  8. ちょっと待ってくれ
    確かにKubernetesは素晴らしいがデメリットもある
    構造が複雑
    Dockerしかサポートしてない
    小規模サービスにはToo muchでは?

    View Slide

  9. ご存知HashiCorpなので信頼性は抜群
    が、なぜかあんまり世の中に知られていない、、、

    View Slide

  10. プレゼンの構成
    1. HashiCorp Nomadについて
    2. Nomad @ CirclecI 2.0

    View Slide

  11. 自己紹介
    Kim, Hirokuni (金 洋国)
    + kimh
    CircleCI (Japan)
    電動キックボード

    View Slide

  12. View Slide

  13. 公道で走れるようにするためにごにょごにょ...

    View Slide

  14. NomadとDockerが支える2.0

    View Slide

  15. NomadとDockerにズームした図

    View Slide

  16. 3分で学ぶスケジューラー (1)
    タスクをスケジューリングするからScheduler
    Cluster Managerとかとも言わる
    分散するマシンをまとめてタスクを割り振る

    View Slide

  17. 3分で学ぶスケジューラー (2)
    2つの側面: SchedulerとCluster Manager
    Dockerのクラスタ
    バッチスケジューラー

    View Slide

  18. Nomadのアーキテクチャ (1)
    概要
    Server/Clientモデル
    Goで書かれている
    Server間の通信にConsul

    View Slide

  19. Nomadのアーキテクチャ (2)

    View Slide

  20. なぜNomadを選んだか (1)
    背景
    LXC + 自前ツールの限界 (CircleCI 1.0)
    LXCつらい。Docker使いたい。
    Clojureで作ったschedulerを捨てたい
    PostgreSQLをキューとして使うってどうなん?

    View Slide

  21. なぜNomadを選んだか (2)
    主な理由
    サービスの特性とマッチ
    Batch Jobにフォーカス
    CircleCIでは単発のジョブ(ビルド)が沢山ある
    1 ビルド = 1 Nomad Job
    K8sはサービス管理にフォーカス

    View Slide

  22. なぜNomad以外を選ばなかったのか
    Kubernetes: Long running job (サービス)に特化していた
    Mesos: 長年使われているのに情報が少ない。複雑。
    Docker Swarm: まだまだ出たばかり

    View Slide

  23. 1年間Nomadやってみた結果
    順調に2.0ビルドは伸びている

    View Slide

  24. ちょっと寄り道

    View Slide

  25. CircleCI 2.0が爆速になった話
    1.0
    2.0

    View Slide

  26. 1.0ではSSHでリモートコマンドを実行 (同期的)

    View Slide

  27. 2.0ではgRPCに置き換えた (非同期)

    View Slide

  28. 運用してわかったこと (1)
    Single Binaryファイル
    $ nomad agent -dev
    ==> Starting Nomad agent...
    ==> Nomad agent configuration:
    Client: true
    Log Level: DEBUG
    Region: global (DC: dc1)
    Server: true
    ....
    メリット:
    開発環境でも簡単にテストができる!
    運用が楽
    スケールが簡単

    View Slide

  29. 運用してわかったこと (2)
    まだβだけどとても安定している
    だけど、たまにクラスタが壊れる (Bankurpuctyについては後述)

    View Slide

  30. 効率よくスケジューリングしてくれる (3)
    より少ないマシンでインフラを運用できる
    2.0の resource_class
    はNomadの機能で実現

    View Slide

  31. 運用してわかったこと (4)
    みんなもっと使ってくれ、、、

    View Slide

  32. 運用ノウハウ
    参考にしてください
    スケールアップ/ダウン
    Bankurpucty

    View Slide

  33. スケールアップ
    Consul AgentとNomad Clientが入ったマシンを起動するだけ
    # /etc/nomad.d/client.hcl
    datacenter = "dc1"
    data_dir = "/etc/nomad.d"
    client {
    enabled = true
    }
    $ nomad agent -config=/etc/nomad.d/client.hcl

    View Slide

  34. スケールダウン
    問題点
    Drainモードにするとジョブを他のNodeに移そうとする
    CircleCIではMigrationしないで欲しい
    パッチで回避
    $ nomad node drain -enable f4e8a9e5
    Are you sure you want to enable drain mode for node "f4e8a9e5
    2018-03-30T23:13:16Z: Ctrl-C to stop monitoring: will not cance
    2018-03-30T23:13:16Z: Node "f4e8a9e5-30d8-3536-1e6f-cda5c869c35
    2018-03-30T23:13:17Z: Alloc "1877230b-64d3-a7dd-9c31-dc5ad3c93e
    2018-03-30T23:13:17Z: Alloc "1877230b-64d3-a7dd-9c31-dc5ad3c93e
    2018-03-30T23:13:17Z: Alloc "1877230b-64d3-a7dd-9c31-dc5ad3c93e
    ...
    2018-03-30T23:13:42Z: All allocations on node "f4e8a9e5-30

    View Slide

  35. Declaring Bankruptcy (1)
    GCのせいで時々クラスターが壊れる。その結果、、、

    View Slide

  36. Declaring Bankruptcy (2)
    Nomad Garbage Collection
    Server GC: 古いスケジューリングに関するデータを削除
    Client GC: ジョブが作ったファイルなどを削除
    5分ごとに自動で起動される
    問題
    並列でGCが走る
    Raftのトランザクションが走る
    クラスタが高負荷
    CircleCIでジョブが処理できなくなる
    Declaring Bankruptcy

    View Slide

  37. Declaring Bankruptcy (3)
    解決方法
    rm -rf /opt/nomad/server/raft
    スケジュールされていたジョブが失われる...

    View Slide

  38. Declaring Bankruptcy (4)
    解決方法:
    CircleCIでジョブが終わった直後にGCをトリガー
    結果:
    並列GCを抑制
    Bankruptしなくなった

    View Slide

  39. 運用ノウハウ (2)
    Nomad Server on k8s
    Nomad Serverを運用しないといけない
    Kubernetesのサービス運用機能はすごい
    K8sの上でNomadを動かそう!
    詳しくは https://circleci.com/blog/write‑less‑code‑use‑more‑tools/

    View Slide

  40. Thank You HashiCorp
    CircleCIではHashiCorpのプロダクトはだいたい使っています
    Vault
    Terraform
    Packer
    Consul
    Nomad
    だいたい使ってます

    View Slide

  41. 来週の火曜日にミートアップもありますよ!

    View Slide

  42. View Slide

  43. Thank You

    View Slide