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

CircleCI 2.0を支える2つの コンテナクラスターとSRE

CircleCI 2.0を支える2つの コンテナクラスターとSRE

CNDT 2019の登壇資料

Kim, Hirokuni

July 22, 2019
Tweet

More Decks by Kim, Hirokuni

Other Decks in Technology

Transcript

  1. 1
    を支える つの
    コンテナクラスターと

    View full-size slide

  2. 2
    について
    ● クラウド型のCI/CDのリーダー
    ● 2019年最大規模のCI/CDプラットフォームの一つ
    ● 日本にもたくさんのお客様にご利用いただいています

    View full-size slide

  3. 3
    のご紹介
    ● 日本語サポート
    ● ドキュメントの日本語化
    ● ユーザーコミュニティー
    CircleCI初の海外支社
    @CircleCIJapan
    FB Community Group

    View full-size slide

  4. 4
    日本のコミュニティとマーケットをサポート
    日本語
    サポート
    日本語
    ドキュメント
    日本語
    製品紹介
    ユーザー
    コミュニティ

    View full-size slide

  5. 5
    ただいまチャットサポートトライアル実施中
    APIで特定のworkflowを実行し
    たいが、起動しません。
    Beta版ですが、API v2を利
    用するのはいかがでしょう
    か?
    こんにちは
    CircleCIにログインし、右下に
    チャットボタンが表示されます →
    期間限定で平日の14時から17時で実施中!
    ⭐最近CircleCIを使い始めた方や最新機能についてもっと知りたい方ご質問大歓迎です ⭐

    View full-size slide

  6. 6
    自己紹介
    Kim, Hirokuni (金 洋国)
    ● CircleCI SRE
    ● CircleCI Japan Tech Lead
    ● CircleCI検定2級 (注: 妄想です。実在しません。 )
    ● 日本支社の立ち上げ
    ● カンファレンス登壇
    ● 採用活動
    ● 記事執筆
    ● コミュニティー運営
    Twitter: https://twitter.com/kimhirokuni

    View full-size slide

  7. 7
    宣伝 個人
    電動キックボードを公道で体験できるサービス Hop-on! を運営
    ● みなとみらい・渋谷で体験できます
    ● 続きは https://hop-on.jp で!

    View full-size slide

  8. 8
    完全コンテナベースの
    ● Dockerコンテナ上でビルド可能
    ● 好きなコンテナイメージを使うことができる
    ● 複数のサービスコンテナを追加可能
    ● 2016年の夏にBeta版運用開始

    View full-size slide

  9. 9
    について
    1日120万ビルドのCI/CDプラットフォーム

    View full-size slide

  10. 10
    について

    5万ビルド / 1hr

    ~8000ビルド / 1min

    ~130ビルド / 1 sec
    1日120万
    どのようにしてこれらのビルドをハンドリングしているか

    View full-size slide

  11. 11
    技術編 つのクラスター
    組織編 チームの紹介

    View full-size slide

  12. 12
    技術編 つのクラスター
    組織編 チームの紹介

    View full-size slide

  13. 13
    つのコンテナクラスター
    ● Kubernetes
    ○ マイクロサービス用のコンテナを管理
    ● Nomad
    ○ ビルド用のコンテナを管理

    View full-size slide

  14. 14
    つのコンテナクラスター
    Services
    - フロントエンド
    - 課金
    - ユーザー管理
    - WebHook処理
    - etc,
    Executions
    - Docker ImageのPull
    - コードのcheckout
    - ビルドコマンドの実行
    - Artifactsの保存
    二つを分けることでセキュリティーを担保している

    View full-size slide

  15. 15
    のマイクロサービスを支えるクラスター

    View full-size slide

  16. 16
    ● 全てのマイクロサービスが動いている (約60サービス)
    ● 自前でEC2上で管理 (後述)
    ● サービス間通信にはgRPCとRabbitMQを使用

    View full-size slide

  17. 17
    マイクロサービス間の通信 非同期
    ● RabbitMQを使用
    ● 非同期通信が推奨
    ● 可能限りこちらを使う
    ● 分散システムでは非同期のほうがよい
    ● 毎秒何千ものリクエストを処理

    View full-size slide

  18. 18
    ● Kubernetes for everything!!
    ● RabbitMQのスケーラビリティーの向上
    ● StatefulSetsの使用
    ○ 同じVolume, Pod名などを使える
    ● 現在テスト中

    View full-size slide

  19. 19
    マイクロサービス間の通信 同期
    ● gRPCを使用
    ● 元々はビルドログをストリーミングするのに使用
    ● 現在、サービス間通信のデフォルト
    ● スケールするには一工夫必要 (次スライド)

    View full-size slide

  20. 20
    の問題点
    ● Master nodeのマネージメント
    ○ Etcd
    ○ OSの管理: CoreOS
    ● 認証・セキュリティー
    ○ Public API endpointの安全性
    ○ ユーザーの管理
    ● アップグレード問題

    View full-size slide

  21. 21
    今後の課題 への移行検討中
    ● Master nodeのマネージメント
    ○ Etcd ✔
    ○ 証明書の管理 ✔
    ● 認証・セキュリティー
    ○ Public API endpointの安全性✔
    ○ ユーザーの管理 ✔
    ● アップグレード問題 △ 

    View full-size slide

  22. 22
    の を支えるクラスター

    View full-size slide

  23. 23
    について

    View full-size slide

  24. 24
    アーキテクチャー
    Servers
    ● K8sのマスターに相当
    ● コーディネーション
    ● マルチリージョン対応
    ● Consulを使用
    ● K8s上で運用 (後述)
    Clients
    ● K8sのワーカーに相当
    ● ジョブを実際に実行

    View full-size slide

  25. 25
    の使い方
    Nomad Client
    Build 1
    Build 2
    Build 3
    ● Dockerドライバー
    ● 各クライアントでビルドが実行
    される
    ● バッチジョブを使用

    View full-size slide

  26. 26
    ビルド ジョブ
    Nomad Job1 Nomad Job2 Nomad Job3
    CircleCIのビルドは最終的にNomadのジョブの単位で実行される
    * 実際はもう少し複雑

    View full-size slide

  27. 27
    人間の手 職人の感
    注:イメージです

    View full-size slide

  28. 28
    ● Datadogモニタリング
    ● Autoscalerサービス
    ● AWS ASG
    スケーリング
    AutoScaler
    1.0時代に比べてAWSコストの大幅な削減

    View full-size slide

  29. 29
    なぜ か?
    ● Nomadはバッチ処理がk8sより得意だった (2016年の時点)
    ● 現時点ではk8sもよくなっている (らしい)
    ● シンプルなアーキテクチャー (単一Goバイナリ)
    ● Hashicorp Toolとの親和性 (ConsulやVaultなど)
    ● Mesosも検討したが複雑で断念
    詳しくは https://speakerdeck.com/kimh/cdpuratutohuomu

    View full-size slide

  30. 30
    運用してわかったこと1
    シングルバイナリは正義!
    ● 簡単に開発環境で使える
    ● スケールしやすい
    ● オンプレでも管理が簡単

    View full-size slide

  31. 31
    運用してわかったこと
    効率のよいスケジューリング
    ● 1.0時代よりも少ないマシンでより多く
    のビルドをできる
    ● Resource ClassはNomad単体の機
    能で実装することができた

    View full-size slide

  32. 32
    運用してわかったこと
    とても安定している
    ● CircleCIでは0.6くらいから使用
    ● Nomad自身のバグが少ない
    ● 安定版目の前? (現在0.9.3)

    View full-size slide

  33. 33
    運用してわかったこと
    Nomad on k8s Works!
    ● NomadのServer NodeをK8sで運用
    ● Nomadとk8sのいいとこどり
    ● Liveness Probes
    ● ローリングアップデート
    詳しくは https://circleci.com/blog/write-less-code-use-more-tools/

    View full-size slide

  34. 34
    ビルドが実行されるまで
    GitHub
    $ Git Push

    View full-size slide

  35. 35
    ビルドが実行されるまで
    k8s
    GitHub
    $ Git Push
    webhook
    Service
    Service
    Service
    Service
    Service

    View full-size slide

  36. 36
    ビルドが実行されるまで
    k8s
    GitHub Service
    Service
    Service
    Service
    Service
    To Nomad
    $ Git Push
    webhook

    View full-size slide

  37. 37
    ビルドが実行されるまで
    Nomad
    Server
    Nomad
    Server
    Nomad
    Server

    View full-size slide

  38. 38
    ビルドが実行されるまで
    Nomad
    Server
    Nomad
    Server
    Nomad
    Server
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client

    View full-size slide

  39. 39
    ビルドが実行されるまで
    Docker
    Nomad
    Server
    Nomad
    Server
    Nomad
    Server
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client

    View full-size slide

  40. 40
    ビルドが実行されるまで
    Docker
    Nomad
    Server
    Nomad
    Server
    Nomad
    Server
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Output
    processor

    View full-size slide

  41. 41
    ビルドが実行されるまで
    Docker
    Nomad
    Server
    Nomad
    Server
    Nomad
    Server
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Nomad Client
    Output
    processor

    View full-size slide

  42. 42
    コンテナクラスター組織編 まとめ
    ● K8sとnomadの二つを用途により使い分け
    ● K8sはサービス運用
    ● Nomadはビルドインフラに
    ● もっとみんなNomad使ってくれ!!

    View full-size slide

  43. 43
    技術編 つのクラスター
    組織編 チームの紹介

    View full-size slide

  44. 44
    の役割
    ● 安定したインフラの運用
    ● プロダクトの開発に集中できるようにサポート
    ● プロダクトエンジニアとのペアリング・コードレビュー
    ● 問題調査・障害対応

    View full-size slide

  45. 45
    分散したエンジニアリングチーム

    View full-size slide

  46. 47
    チーム構成
    ● 現在10人弱のチーム
    ● 4カ国にまたがる

    View full-size slide

  47. 48
    ボーイング方式
    ● ワーキング・トュギャザー
    ● 時差の有効活用
    ● 継続的なペアリング
    ● 無理のないアラート対応
    ● 障害時対応

    View full-size slide

  48. 49
    障害対応フロー
    #investigation
    故障かな?と思ったら

    View full-size slide

  49. 50
    障害対応フロー
    #investigation #incident
    故障かな?と思ったら - ユーザー影響あり
    - 障害用のZoom開始
    - @メンションされる

    View full-size slide

  50. 51
    障害対応フロー
    #investigation #incident https://status.circleci.com
    故障かな?と思ったら - ユーザー影響あり
    - 障害用のZoom開始
    - @メンションされる

    View full-size slide

  51. 52
    障害対応フロー
    #investigation #incident https://status.circleci.com
    Incident Commander
    Communication Commander
    Note Taker
    故障かな?と思ったら - ユーザー影響あり
    - 障害用のZoom開始
    - @メンションされる
    役割分担 (後述)

    View full-size slide

  52. 53
    障害対応フロー
    #investigation #incident https://status.circleci.com
    Incident Commander
    Communication Commander
    Note Taker
    20分ごとにアップデート
    故障かな?と思ったら - ユーザー影響あり
    - 障害用のZoom開始
    - @メンションされる
    役割分担 (後述)
    - できるだけリアルタイム情報
    - バナーに表示される

    View full-size slide

  53. 54
    障害対応フロー
    #investigation #incident https://status.circleci.com
    Incident Commander
    Communication Commander
    Note Taker
    20分ごとにアップデート
    故障かな?と思ったら - ユーザー影響あり
    - 障害用のZoom開始
    - @メンションされる
    役割分担 (後述)
    - できるだけリアルタイム情報
    - バナーに表示される
    - 30分様子見
    - 問題なければクローズ

    View full-size slide

  54. 55
    障害対応チーム構成
    Incident
    Commander
    Communication
    Commander Note Taker
    Incident
    Response Team
    障害復旧の責任者
    広報係 障害復旧チーム 書記係

    View full-size slide

  55. 56
    役割分担
    ● 障害復旧の責任者
    ● 問題解決に必要なリソースを確保
    ● SREである必要はない

    View full-size slide

  56. 57
    役割分担
    ● ユーザーへ現状を伝える
    ● ユーザーから障害範囲を聞く
    ● Status Pageをアップデートする
    ● Customer Success Engineersが担当

    View full-size slide

  57. 58
    役割分担
    ● 時系列をまとめる
    ● What/Who/When/How を記録する

    View full-size slide

  58. 59
    役割分担
    ● 問題に詳しいエンジニアで構成
    ● IC, CCと連携して最善の解決策を探す

    View full-size slide

  59. 60
    はじめました
    ● 週ごとのローテーションでToilを集中して潰す
    ● Toil以外の仕事に集中できるようにする
    ● Clinic -> 病院や駆け込み寺のイメージ
    ● 例: アカウントの削除、DNSレコードの追加, etc

    View full-size slide

  60. 61
    のイメージ
    どうしても今日中に
    DNSのTXTレコード追
    加したいんだよ〜
    SRE Clinicで対応
    しますよ
    これでSEOの設定
    できる!
    マーケティング担当A Clinic当番のSRE

    View full-size slide

  61. 62
    やってどうだったか?
    Good:
    ● 他のエンジニアがタスクに集中できるようになった
    ● 何がToilかの分類ができるようになった
    Bad:
    ● 何がClinicの仕事かの分類があいまい
    ● タスクからClinicへ移る時のタイミングが難しい
    ● Toil自体が減るわけではない

    View full-size slide

  62. 63
    組織編 まとめ
    ● フルリモート
    ● ボーイング方式で24時間体制
    ● SRE Clinicという新しい試み

    View full-size slide

  63. 64
    ワーキングトュギャザー

    View full-size slide

  64. 65
    こんな人募集
    ● CircleCIに興味がある
    ● 大規模インフラを面倒みたい
    ● コンテナをガチでやりたい
    ● 海外のチームと働きたい

    View full-size slide

  65. 66
    こんな人募集
    ● CircleCIに興味がある
    ● Clojureを書きたい
    ● 海外のチームと働きたい

    View full-size slide

  66. 67
    のイベント

    View full-size slide

  67. Thank you.
    68
    Optional Name

    View full-size slide