CNDT 2019の登壇資料
1を支える つのコンテナクラスターと
View Slide
2について● クラウド型のCI/CDのリーダー● 2019年最大規模のCI/CDプラットフォームの一つ● 日本にもたくさんのお客様にご利用いただいています
3のご紹介● 日本語サポート● ドキュメントの日本語化● ユーザーコミュニティーCircleCI初の海外支社@CircleCIJapanFB Community Group
4日本のコミュニティとマーケットをサポート日本語サポート日本語ドキュメント日本語製品紹介ユーザーコミュニティ
5ただいまチャットサポートトライアル実施中APIで特定のworkflowを実行したいが、起動しません。Beta版ですが、API v2を利用するのはいかがでしょうか?こんにちはCircleCIにログインし、右下にチャットボタンが表示されます →期間限定で平日の14時から17時で実施中!⭐最近CircleCIを使い始めた方や最新機能についてもっと知りたい方ご質問大歓迎です ⭐
6自己紹介Kim, Hirokuni (金 洋国)● CircleCI SRE● CircleCI Japan Tech Lead● CircleCI検定2級 (注: 妄想です。実在しません。 )● 日本支社の立ち上げ● カンファレンス登壇● 採用活動● 記事執筆● コミュニティー運営Twitter: https://twitter.com/kimhirokuni
7宣伝 個人電動キックボードを公道で体験できるサービス Hop-on! を運営● みなとみらい・渋谷で体験できます● 続きは https://hop-on.jp で!
8完全コンテナベースの● Dockerコンテナ上でビルド可能● 好きなコンテナイメージを使うことができる● 複数のサービスコンテナを追加可能● 2016年の夏にBeta版運用開始
9について1日120万ビルドのCI/CDプラットフォーム
10について●5万ビルド / 1hr●~8000ビルド / 1min●~130ビルド / 1 sec1日120万どのようにしてこれらのビルドをハンドリングしているか
11技術編 つのクラスター組織編 チームの紹介
12技術編 つのクラスター組織編 チームの紹介
13つのコンテナクラスター● Kubernetes○ マイクロサービス用のコンテナを管理● Nomad○ ビルド用のコンテナを管理
14つのコンテナクラスターServices- フロントエンド- 課金- ユーザー管理- WebHook処理- etc,Executions- Docker ImageのPull- コードのcheckout- ビルドコマンドの実行- Artifactsの保存二つを分けることでセキュリティーを担保している
15のマイクロサービスを支えるクラスター
16● 全てのマイクロサービスが動いている (約60サービス)● 自前でEC2上で管理 (後述)● サービス間通信にはgRPCとRabbitMQを使用
17マイクロサービス間の通信 非同期● RabbitMQを使用● 非同期通信が推奨● 可能限りこちらを使う● 分散システムでは非同期のほうがよい● 毎秒何千ものリクエストを処理
18● Kubernetes for everything!!● RabbitMQのスケーラビリティーの向上● StatefulSetsの使用○ 同じVolume, Pod名などを使える● 現在テスト中
19マイクロサービス間の通信 同期● gRPCを使用● 元々はビルドログをストリーミングするのに使用● 現在、サービス間通信のデフォルト● スケールするには一工夫必要 (次スライド)
20の問題点● Master nodeのマネージメント○ Etcd○ OSの管理: CoreOS● 認証・セキュリティー○ Public API endpointの安全性○ ユーザーの管理● アップグレード問題
21今後の課題 への移行検討中● Master nodeのマネージメント○ Etcd ✔○ 証明書の管理 ✔● 認証・セキュリティー○ Public API endpointの安全性✔○ ユーザーの管理 ✔● アップグレード問題 △
22の を支えるクラスター
23について
24アーキテクチャーServers● K8sのマスターに相当● コーディネーション● マルチリージョン対応● Consulを使用● K8s上で運用 (後述)Clients● K8sのワーカーに相当● ジョブを実際に実行
25の使い方Nomad ClientBuild 1Build 2Build 3● Dockerドライバー● 各クライアントでビルドが実行される● バッチジョブを使用
26ビルド ジョブNomad Job1 Nomad Job2 Nomad Job3CircleCIのビルドは最終的にNomadのジョブの単位で実行される* 実際はもう少し複雑
27人間の手 職人の感注:イメージです
28● Datadogモニタリング● Autoscalerサービス● AWS ASGスケーリングAutoScaler1.0時代に比べてAWSコストの大幅な削減
29なぜ か?● Nomadはバッチ処理がk8sより得意だった (2016年の時点)● 現時点ではk8sもよくなっている (らしい)● シンプルなアーキテクチャー (単一Goバイナリ)● Hashicorp Toolとの親和性 (ConsulやVaultなど)● Mesosも検討したが複雑で断念詳しくは https://speakerdeck.com/kimh/cdpuratutohuomu
30運用してわかったこと1シングルバイナリは正義!● 簡単に開発環境で使える● スケールしやすい● オンプレでも管理が簡単
31運用してわかったこと効率のよいスケジューリング● 1.0時代よりも少ないマシンでより多くのビルドをできる● Resource ClassはNomad単体の機能で実装することができた
32運用してわかったこととても安定している● CircleCIでは0.6くらいから使用● Nomad自身のバグが少ない● 安定版目の前? (現在0.9.3)
33運用してわかったことNomad on k8s Works!● NomadのServer NodeをK8sで運用● Nomadとk8sのいいとこどり● Liveness Probes● ローリングアップデート詳しくは https://circleci.com/blog/write-less-code-use-more-tools/
34ビルドが実行されるまでGitHub$ Git Push
35ビルドが実行されるまでk8sGitHub$ Git PushwebhookServiceServiceServiceServiceService
36ビルドが実行されるまでk8sGitHub ServiceServiceServiceServiceServiceTo Nomad$ Git Pushwebhook
37ビルドが実行されるまでNomadServerNomadServerNomadServer
38ビルドが実行されるまでNomadServerNomadServerNomadServerNomad ClientNomad ClientNomad ClientNomad ClientNomad Client
39ビルドが実行されるまでDockerNomadServerNomadServerNomadServerNomad ClientNomad ClientNomad ClientNomad ClientNomad Client
40ビルドが実行されるまでDockerNomadServerNomadServerNomadServerNomad ClientNomad ClientNomad ClientNomad ClientNomad ClientOutputprocessor
41ビルドが実行されるまでDockerNomadServerNomadServerNomadServerNomad ClientNomad ClientNomad ClientNomad ClientNomad ClientOutputprocessor
42コンテナクラスター組織編 まとめ● K8sとnomadの二つを用途により使い分け● K8sはサービス運用● Nomadはビルドインフラに● もっとみんなNomad使ってくれ!!
43技術編 つのクラスター組織編 チームの紹介
44の役割● 安定したインフラの運用● プロダクトの開発に集中できるようにサポート● プロダクトエンジニアとのペアリング・コードレビュー● 問題調査・障害対応
45分散したエンジニアリングチーム
46
47チーム構成● 現在10人弱のチーム● 4カ国にまたがる
48ボーイング方式● ワーキング・トュギャザー● 時差の有効活用● 継続的なペアリング● 無理のないアラート対応● 障害時対応
49障害対応フロー#investigation故障かな?と思ったら
50障害対応フロー#investigation #incident故障かな?と思ったら - ユーザー影響あり- 障害用のZoom開始- @メンションされる
51障害対応フロー#investigation #incident https://status.circleci.com故障かな?と思ったら - ユーザー影響あり- 障害用のZoom開始- @メンションされる
52障害対応フロー#investigation #incident https://status.circleci.comIncident CommanderCommunication CommanderNote Taker故障かな?と思ったら - ユーザー影響あり- 障害用のZoom開始- @メンションされる役割分担 (後述)
53障害対応フロー#investigation #incident https://status.circleci.comIncident CommanderCommunication CommanderNote Taker20分ごとにアップデート故障かな?と思ったら - ユーザー影響あり- 障害用のZoom開始- @メンションされる役割分担 (後述)- できるだけリアルタイム情報- バナーに表示される
54障害対応フロー#investigation #incident https://status.circleci.comIncident CommanderCommunication CommanderNote Taker20分ごとにアップデート故障かな?と思ったら - ユーザー影響あり- 障害用のZoom開始- @メンションされる役割分担 (後述)- できるだけリアルタイム情報- バナーに表示される- 30分様子見- 問題なければクローズ
55障害対応チーム構成IncidentCommanderCommunicationCommander Note TakerIncidentResponse Team障害復旧の責任者広報係 障害復旧チーム 書記係
56役割分担● 障害復旧の責任者● 問題解決に必要なリソースを確保● SREである必要はない
57役割分担● ユーザーへ現状を伝える● ユーザーから障害範囲を聞く● Status Pageをアップデートする● Customer Success Engineersが担当
58役割分担● 時系列をまとめる● What/Who/When/How を記録する
59役割分担● 問題に詳しいエンジニアで構成● IC, CCと連携して最善の解決策を探す
60はじめました● 週ごとのローテーションでToilを集中して潰す● Toil以外の仕事に集中できるようにする● Clinic -> 病院や駆け込み寺のイメージ● 例: アカウントの削除、DNSレコードの追加, etc
61のイメージどうしても今日中にDNSのTXTレコード追加したいんだよ〜SRE Clinicで対応しますよこれでSEOの設定できる!マーケティング担当A Clinic当番のSRE
62やってどうだったか?Good:● 他のエンジニアがタスクに集中できるようになった● 何がToilかの分類ができるようになったBad:● 何がClinicの仕事かの分類があいまい● タスクからClinicへ移る時のタイミングが難しい● Toil自体が減るわけではない
63組織編 まとめ● フルリモート● ボーイング方式で24時間体制● SRE Clinicという新しい試み
64ワーキングトュギャザー
65こんな人募集● CircleCIに興味がある● 大規模インフラを面倒みたい● コンテナをガチでやりたい● 海外のチームと働きたい
66こんな人募集● CircleCIに興味がある● Clojureを書きたい● 海外のチームと働きたい
67のイベント
Thank you.68Optional Name