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

RocroにおけるGCP活用事例

 RocroにおけるGCP活用事例

GCPUG Tokyo DevOps Day September 2017

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