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

RocroにおけるGCP活用事例

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 RocroにおけるGCP活用事例

GCPUG Tokyo DevOps Day September 2017

Avatar for Yoshiyuki Mineo

Yoshiyuki Mineo

September 27, 2017
Tweet

More Decks by Yoshiyuki Mineo

Other Decks in Technology

Transcript

  1. 自己紹介 ▪ 峯尾 嘉征 @ Rocro & Sony ▪ ハードウェア→組み込み→Web

    – CPU、コンパイラ、Webブラウザ、Webサービスなどの開発に従事 ▪ OSS – github.com/sony ▪ 管理人、sonyflake/gobreaker/v8evalを公開 – github.com/plenluno ▪ 個人アカウント、libnode(Node.jsのC++実装)などを公開 © Rocro Inc. 2
  2. ▪ 開発者向けサービス群 – https://rocro.com – GitHub / Bitbucketと連携 ▪ 9/14

    public beta開始 – 現在、プライベートレポジトリのみサポート – 10月中にパブリックレポジトリもサポート予定 ▪ 名前の由来 – アジャイル開発:イテレーションを回しながらソフトウェアをつくる – 回転させながらものをつくる道具 → ろくろ © Rocro Inc. 5
  3. ▪ 静的解析の結果を分かりやすくレポート – A, B, C, D, Fの5段階評価 – Issueを様々な分類でチェック

    ▪ ファイル ▪ ツール ▪ 言語 ▪ 重要度 ▪ 新規/既存 – トレンド ▪ 5段階評価 ▪ Issue数 © Rocro Inc. 7 Inspecode
  4. ▪ Continuous Integration – Git Push/Pull Requestの自動チェック ▪ ツールごとにIssue数の閾値を設定可能 閾値を超えたらFail

    – Email/Slack/HipChat通知 ▪ 失敗・回復時だけ通知も可能 – Badge(READMEに貼るアイコン) © Rocro Inc. 8 Inspecode
  5. ▪ APIドキュメント生成&ホスティングサービス – https://docstand.rocro.com ▪ 各言語の代表的なAPIドキュメントツールをサポート – Javadoc, GoDoc, Sphinxなど

    ▪ サポート言語: C, C++, Clojure, CoffeeScript, Go, Java, JavaScript, PHP, Python, Ruby, Scala, TypeScriptなど ▪ Public Beta © Rocro Inc. 9 Docstand
  6. 自動セットアップ ▪ 強力なデフォルト設定(Inspecode/Docstand) – レポジトリ内の使用言語を検出して、適切なツールを自動実行 例:Go言語を検出 → Go言語向けツールgofmt, golintなどを適用 –

    各ツールの設定ファイルを検出して自動適用 例:Checkstyleの場合、checkstyle.xml を検出して適用 ▪ 依存ライブラリを自動でダウンロード(Inspecode/Docstand) – 例:npm install, go get, git submoduleなど ▪ 負荷テストのサーバクラスタを自動構築(Loadroid) – ユーザはテストシナリオを書くだけ エンジニアの各種セットアップの時間を⼤幅に削減 © Rocro Inc. 14
  7. 入力分割による並列化 A B C A C B A C B1

    B2 実⾏時間削減 特定のツールの実行時間が支配的な場合 ツールの並列化だけでは不十分… inspecode: go-test: input: frontend/ input: backend/ rocro.yml 設定ファイルで入力を簡単に分割可能 各入力ごとに並列実行(Inspecode) © Rocro Inc. 18 並列実行
  8. GAEのバージョン管理&デプロイ ▪ Semantic Versioning – MAJOR.MINOR.PATCHの3つの数字(x.y.z -> x-y-z) ▪ GAE

    Serviceのバージョンは全部同じ ▪ 同じバージョンのService間でしか通信しない Immutable Infrastructure in GAE Application: 1-2-3 Service Std: 1-2-3 Service Flex: 1-2-3 Application: 1-2-4 Service Std: 1-2-4 Service Flex: 1-2-4 © Rocro Inc. 21
  9. GKEのバージョン管理&デプロイ ▪ ローリングアップデートではなく、バージョンごとにクラスタを作成 – クラスタ名:x.y.z -> cluster-x-y-z ▪ 同じバージョンのGAE Serviceとしか通信しない

    Application: 1-2-3 Service Std: 1-2-3 Service Flex: 1-2-3 Application: 1-2-4 Service Std: 1-2-4 Service Flex: 1-2-4 cluster-1-2-3 cluster-1-2-4 Immutable Infrastructure in GAE/GKE © Rocro Inc. 22
  10. メリット&デメリット ▪ メリット – GAEのバージョン切り替えにGKEも自動で追従 – 問題があったときに元のバージョンにすぐに戻せる – 内部Web APIの互換性を保つ必要がない

    ▪ デメリット – バージョン切り替え時に複数バージョンが同時に存在→コスト増 ▪ ただし、コスト増を最小限にすることは可能 – 前バージョンのクラスタはオートスケールで縮退 – GAE Cronにより不要なクラスタを自動で削除 © Rocro Inc. 23
  11. Dockerイメージの管理 ▪ Container Registroyを利用 – GCPネットワーク内で高速にpull可能 ▪ DockerイメージのバージョンもGAE/GKEのバージョンと同じ – Dockerイメージにバージョンタグを打つ

    – cluster-x-y-zは[image-name]:x-y-zだけをpull ▪ RocroでサポートするツールごとにDockerイメージを作成 →現在、70超のDockerイメージを管理 →対策しないとDockerイメージのbuild/pushだけで大変... © Rocro Inc. 24
  12. Dockerイメージのbuild/push高速化 ▪ build/pushの並列化 ▪ git revisionが同じ場合、build/pushをスキップ、タグを打つだけ – ローカルにイメージキャッシュが無くてもスキップ可能 – 実際には前バージョンとrevisionが変わらないことが多いので有効

    LABEL revision=b451898… [image-name]:1-2-3, latest revision: b451898… tag: 1.2.3 Git LABEL revision=b451898… [image-name]:1-2-3, 1.2.4, latest revision: b451898… tag: 1.2.3, 1.2.4 Git GCRからLABEL取得 revisionを比較 revisionが同じなら タグだけ打つ © Rocro Inc. 25
  13. 自己紹介 ▪ 八神 貴心(やがみ きしん) – ソフトウェアエンジニア@Rocro – GitHub: @ks888

    – Twitter: @ks888sk ▪ Rocroではインフラ・監視関連から開発まで色々やってます ▪ 最近のOSS活動 – LambStatus (https://github.com/ks888/LambStatus) ▪ サービスのステータスページを簡単に構築・運用できるOSS – PyCon JPスタッフ © Rocro Inc. 27
  14. 利用中のStackdriverの機能 ▪ Stackdriver Monitoring – GAE・GKE関連メトリクスの収集・監視 – ダッシュボード ▪ Stackdriver

    Logging – GAE・GKEのログを集約 – ログからのメトリクスデータ生成 ▪ Stackdriver Trace – APIのボトルネック発見 – デバッグ時の情報源 © Rocro Inc. 28
  15. デフォルトでオートスケーリング対応 ⚒ ▪ 作成Resourceは「resource type」ごとにグループ化される ▪ メトリクスの可視化・監視は、 resource typeが基本単位になる ▪

    デフォルト設定のままで、インスタンス増減に追従した監視ができる! “gce_instance” resource type GCEインスタンス GCEインスタンス GCEインスタンス GCEインスタンス GCEインスタンス New © Rocro Inc. 33
  16. Resource groupに関する混乱 ▪ なぜこうなってしまったか? – 「Resource type」が鍵になる ▪ gce_instance、gke_containerなどのタイプがある ▪

    Metricsは、resource typeに紐づく gke_container Resource type CPU Usage / Container Metrics Used Memory gce_instance CPU Usage / Instance Disk Read I/O © Rocro Inc. 38
  17. 作成したgroup Resource groupに関する混乱 ▪ なぜこうなってしまったか?(続き) – 作成したグループは、gce_instanceタイプのリソースしか含んでい なかった gke_container Resource

    type CPU Usage / Container Metrics Used Memory gce_instance CPU Usage / Instance Disk Read I/O 指定した メトリクス 指定した グループ グラフ作成画⾯ © Rocro Inc. 39
  18. Resource groupに関する混乱 ▪ Group作成がうまく行かないときは、resource typeに注目してみ る – 一部のresource typeしか含まれていないかも。。 –

    Groupに含まれるresourceは、以下APIから確認できる ▪ Method: projects.groups.members.list ▪ 結局、どうすればGKE clusterのresource groupを作れるのか? – Stackdriver UIから作る方法はわからず。。 – 以下APIでできたけど。。 ▪ Method: projects.groups.create ▪ Filterを resource.type=gke_container に指定 © Rocro Inc. 40
  19. 監視agentがGKE、GAE flex envを未サポート ▪ 監視agent – GCEインスタンスのメモリ使用率、ディスク使用率などを収集 – GKE、GAE flex

    envのGCEインスタンスは未サポート ▪ https://cloud.google.com/monitoring/agent/#supported_vms ▪ Custom Metricsである程度対応中。。 – 課題:複数インスタンスでクラスタを作っている場合、cronに呼ばれた1 インスタンスのデータしか収集されない ▪ Cronに呼ばれたインスタンスが他のインスタンスのデータを収集する形な らできそうだけど複雑。。 Cron GAE flex env Stackdriver APIを叩く 収集した データを送信 © Rocro Inc. 41
  20. GKEのデフォルトメトリクスが少ない ▪ 現在のデフォルトメトリクス – コンテナごとのCPU使用率、メモリ使用量、ディスク使用量 ▪ k8s特有のメトリクスもあると助かる – ジョブ数 –

    失敗したジョブ数 – 実行待ち状態のジョブ数 ▪ こちらも、Custom metricsで対応中 Cron GAE flex env Stackdriver APIを叩く 収集した データを送信 GKE K8s APIで データ収集 © Rocro Inc. 42
  21. Infra as codeの実践が難しい ▪ 主なサポート済みAPI ☀ – Resource groupsの作成、取得 –

    Custom metricsの作成、取得 – Time seriesの作成、取得 ▪ 足りないAPI – Resourcesの取得 ▪ Method: projects.groups.members.list を使えば間接的に取得可 ▪ Resourceのmetadataを取る方法は不明 – Alerting policyの作成、取得 – Dashboardの作成、取得 © Rocro Inc. 43
  22. Stackdriverによる監視のまとめ ▪ デフォルト設定が充実していて助かる – メトリクス – リクエストのトレース – オートスケーリング対応 ▪

    ドキュメントの充実、GKE対応はもっと進んでほしい – 使い始め当初(一年前)と比べると良くなってきた印象 © Rocro Inc. 44