Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

"Kubernetes is the future!" by GitLab

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

That's crazy!!

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

NomadとDockerが支える2.0

Slide 15

Slide 15 text

NomadとDockerにズームした図

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

ちょっと寄り道

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

スケールアップ 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

Slide 34

Slide 34 text

スケールダウン 問題点 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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Thank You