Slides for Webエンジニアが使う身近な Kubernetes 2019/09 https://m3-engineer.connpass.com/event/143295/
AWSからGCP/GKEに移行してみたWebエンジニアが使う身近な Kubernetes - 2019/09@yukinagae
View Slide
早速ですが
今日の勉強会のテーマ覚えてますか?
Webエンジニアが使う身近なKubernetes
ふむ (`・ω・´)
と言いつつ難しいんでしょう?(/・ω・)/汗
ご安心ください今からゆるふわな話だけします
というか先々月からk8s触り始めたのでゆるふわな話しかできません( ˘ω˘)スヤァ
_人人人人人人人人人人_> 圧倒的な経験不足 < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
優しい世界でお願いします
ここから本題
本番環境でGKEを使い始めました!(今日)
登壇に間に合ってよかった登壇駆動開発(TDD)(/・ω・)/
TL;DR既存AWSシステムをGCP/GKE化した(まず一部)AIチームではGCP/GKE化を進めてるGCP/GKE化の理由可用性の向上リリースサイクルの高速化インフラコストの削減 (リソースの共有)「GKE使うぞ!」という熱い気持ち ← New!14
自己紹介永江悠紀 @yukinagaeエムスリー株式会社 ソフトウェアエンジニアデータエンジニア寄り元々Java/Scalaでサーバサイドの開発をやっていた最近はGo + Pythonを触ることが多いクラウド周りはGCPのみを担当 (※AWSはよくわかっていない)terraform + yamlを触る日々15
システム移行の背景M3では多くのシステムをオンプレ or AWSで構築AIチームではすでに複数の機械学習のサービスを開発・リリース(※基本的にAWS)※詳しくはこれを見てね:エムスリーにおける 機械学習活用事例と開発の効率化 - Speaker Deck16
多数のマイクロサービス短い1年半という間に7つのサービスがリリース現在も増加中すごいね!(´∀`)17
ポイント1.サービス数(API)が多い18
今回の移行対象のシステムCantor記事などのコンテンツの関連度(類似度)を計算するシステム(API)※おまけ: AIチームではシステムに数学者の名前をつける文化があり(中二病!)、実際に Georg Cantorというドイツの数学者がいます(`・ω・´)19
既存システム構成GCPBigQueryAWSECSS3DynamoDBLambdaAPI Gateway20
既存システム構成(図)21
ん? (`・ω・´)22
既存システムの課題①現状のシステム構成だと、GCP/BigQuery -> AWSというクラウドをまたいだ構成になってしまっている23
ポイント2. BigQueryとAWSの混在24
既存システムの課題②Cantorというシステム構成特有の課題:Lambdaでもろもろ問題があった15分に一度バックエンドのECSが停止されてしまう(確率的にタイムアウトが発生)25
既存システムの課題③(※改善点)簡単・頻繁にリリースしたいすぐリリースしたい(※カナリアリリース etc)バグなどの際すぐ以前のバージョンに戻したいマイクロサービスが増えているので各環境を用意するのは大変運用や管理が面倒インフラコストがかかる26
ポイント3.どんどんリリースしたい27
いろいろ選択肢あるよねAWSならEC2ECSEKSGCPならCloud RunGAE( ex)GCEGKE 28
技術選定のポイントいろいろインフラコスト運用の手間クラウドベンダーのサービスの成熟度やマイルストーンワークロードの特性必要なリソース要件チーム体制(ex.人数 /スキル /学習コスト)29
ポイントを振り返る1.サービス数(API)が多い2. BigQueryとAWSの混在3.どんどんリリースしたい30
もろもろありましたが結局、、、31
解決案: AWS/ECS → GCP/GKE32
GKEでいい感じに作れるのでは?(`・ω・´)33
想定するメリットコスト削減複数サービスをGKEで構築しリソース最適化メンテナンスコストも削減(されるはず)リリースの高速化オーダーメイドから量産体制へterraformk8s可用性も向上全部GCPにできてBigQueryもにっこり(´∀`) 34
それでは早速やっていきましょう35
移行方針:どうやって移行する?1.まずはAPI部分(システムの一部)からの移行2.段階的にすべてを移行していくまずはAPI部分からの移行を実施影響範囲を小さくしたいAPIだけなら最悪どうにでもなるもともとのAWSヘの切り戻しも容易機械学習部分をいきなり移行してデグレったら嫌だよね(/・ω・)/汗36
移行後の構成(API部分のみ)ここまでリリースできた37
移行後の理想(全部GCP/GKE化)38
今後の移行方針既存サービスのGCP/GKE化まずは今回のプロジェクトで導入実績を作り、運用経験を積む他サービスも徐々に移行していく(※移行すればするほど、インフラ・運用コストを削減できる)新規サービスは最初からGCP/GKEで構築現在 @katio2が開発中、年内にリリース予定39
移行してみての感想40
k8s難しいよk8s/GKEのノウハウが少ない(※特に運用面)そもそもk8s自体の学習コストが高いある日のtwitterのつぶやき41
つまり
Web engineer should be k8s itself!
まとめ良かったことterraform + yamlでk8s環境構築・リリースは楽とりあえず本番リリースはできた悪かったことノウハウや経験がないので手探りk8sの公式ドキュメントそのままだと動かないGKEはだいたいβ版本番運用でいろいろ問題起きると思うので怖い(ガクブル)44
ありがとうございました!(´∀`)45
F.Y.I.おまけ既存のAWSシステムではdatadogをdashboardで使ってたが、GCPで使うのは辛いPubSub経由でdatadogにpushする仕組みを毎回作らないといけないGCPプロジェクト毎に認証をしないといけないの大変datadog APMの導入はめちゃくちゃ楽しかし、もちろんcontainer周りの指標しか取得できない46
stackdriver monitoring使う理由datadog用に追加のintegration作業が不要複数プロジェクトを一つのworkspaceにまとめれば、GKEやCloud SQLのプロジェクトが別でも1つのdashboardで監視できるalert policyやuptime checkもそのまま作れる47
現状の運用・監視方法GCPの場合にはStackdriver使うことにしたStackdriver monitoringでの監視alert policyの作成 + slack通知dashboardの作成Stackdriver traceでのパフォーマンスチェックopencensus入れたStackdriver for pythonはα版。。。(`・ω・´)汗48
参考資料GCPGoogle Kubernetes EngineStackdriver MonitoringOpenCensusOpenCensusGitHub - census-instrumentation/opencensus-python49
Special Thanks! ( ˘ω˘)スヤァ@kaito2@saiya_moebius@SassaHero@yokomotod@chidakiyo50