ポッケにおけるKubernetesへの挑戦
by
kanok
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ポッケにおける Kubernetesへの挑戦 @kano_k6a
Slide 2
Slide 2 text
about me twitter:@kano_k6a 職業:SRE的なことをやってます。
Slide 3
Slide 3 text
今日話すこと ポッケがどのようにKubernetesに挑戦したか
Slide 4
Slide 4 text
スタートは社内アプリの老朽化によるリプレースプロジェクト。
Slide 5
Slide 5 text
10年以上続いているシステムなので課題をたくさん抱えていた
Slide 6
Slide 6 text
- リファクタされないコード - 返されることのない技術的負債 - 肥大化し、増え続ける機能
Slide 7
Slide 7 text
新しく生まれ変わるシステムにこれらを継承したくない
Slide 8
Slide 8 text
monolithからの脱却
Slide 9
Slide 9 text
マイクロサービス化
Slide 10
Slide 10 text
マイクロサービス化で実現したいこと - デリバリーを容易にしたい - 変更に強いシステムにしたい - 障害に強い仕組みにしたい - 価値あるサービスに集中したい
Slide 11
Slide 11 text
そもそもこの時アプリケーションエンジニアだったし・・・ というのもあり、全部 javaでなんとかなるスタックでとりあえず MSA始め てみることにしました!
Slide 12
Slide 12 text
マイクロサービスを実現するために必要なパーツを少しづつ検証し た。 まずはnetflix oss - サービスディスカバリー → eureka - API Gateway → zuul - circuit breaker → Hystrix
Slide 13
Slide 13 text
やりたいことは実現できそう でも、コード書くのしんどい .... ビジネスロジックに集中したい!
Slide 14
Slide 14 text
なんかいい感じに実現できるミドルないの ....
Slide 15
Slide 15 text
Kubernetes
Slide 16
Slide 16 text
何故Kubernetesに挑戦したのか
Slide 17
Slide 17 text
マイクロサービス実行基盤って書いてあるし。 https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
Slide 18
Slide 18 text
マイクロサービス化されたアプリケーションを なんかいい感じでサポートしてくれそうだったから
Slide 19
Slide 19 text
最初のモチベーションはこんなもんでした!
Slide 20
Slide 20 text
あくまでマイクロサービス化が中心だったから
Slide 21
Slide 21 text
Kubernetesが提供してくれること - ローリングアップデート - ロードバランシング - セルフヒーリング - スケーリング&オートスケーリング
Slide 22
Slide 22 text
Kubernetesの特徴 - 宣言的な構成管理 - インフラ、ネットワークの抽象化 - ポータビリティ(諸説あり) - オープンである
Slide 23
Slide 23 text
Kubernetesに期待できること - 拡張性 - エコシステム
Slide 24
Slide 24 text
(再掲)マイクロサービス化で実現したいこと - デリバリーを容易にしたい - 変更に強いシステムにしたい - 障害に強い仕組みにしたい - 価値あるサービスに集中したい
Slide 25
Slide 25 text
(再掲)マイクロサービス化で実現したいこと - デリバリーを容易にしたい → 宣言的な構成管理 - 変更に強いシステムにしたい → 拡張性、エコシステム - 障害に強い仕組みにしたい → セルフヒーリング - 価値あるサービスに集中したい → 導入することにより、アプリケー ションのコードに集中できる!
Slide 26
Slide 26 text
Kubernetes環境の構築
Slide 27
Slide 27 text
Azure Container Serviceを利用した k8s環境自体はサクッと構築できたが、問 題あり Vnetがカスタム出来なかった ↓ k8s環境とセットでデフォルトのVnetがも れなく付いてきた
Slide 28
Slide 28 text
acs-engineによりtemplate file(json)を 作成 ↓ ARM templateをもとにk8s環境を構築 ↓ acsでは出来なかったVnetのカスタマイ ズが可能に
Slide 29
Slide 29 text
サービス開始時はユーザー数が少ない ため最小構成にしたかった ユーザー数は徐々に増えていくため、柔 軟にスケールできる仕組みに変える必要 があった - クラスタオートスケール - 水平Podオートスケール
Slide 30
Slide 30 text
昨年末、acs-engine開発中止のアナウンスが・・・ 時間軸的に移行するの無理・・・・ https://github.com/Azure/acs-engine
Slide 31
Slide 31 text
色々あったがk8s導入することにより マイクロサービス化も形になってきた!
Slide 32
Slide 32 text
ただ、マイクロサービス化を実現する上 で、 k8sが提供してくれないものも多くあった。 https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/
Slide 33
Slide 33 text
我々のマイクロサービス化で残った課題 - サービスの入り口(ingress) - サービス間通信のトレース - サービス間通信のロギング - 障害の切り出し - カナリア
Slide 34
Slide 34 text
課題を解決するためにサービスメッシュの導入を試みた
Slide 35
Slide 35 text
サービスメッシュとは? https://www.cncf.io/blog/2017/04/26/service-mesh-critical-component-cloud-native-stack/ サービスメッシュとは、サービス間のコミュニケーションをハンドルするための専用 インフラストラクチャー層です。 モダンなクラウドネイティブアプリケーションを構成する、複雑なトポロジを通して、信頼性の高い リクエストをデリバリする責任があります。
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
- ingress モチベーション k8sのingressを手軽に扱いたい ある程度のpath routingができれば良い ※istio version 0.8のingressを導入して いる version 0.8+のingress gatewayは未導 入 https://preliminary.istio.io/docs/tasks/telemetry/distributed-tracing/overview/
Slide 38
Slide 38 text
- 分散トレーシング モチベーション 分散環境の宿命でもある、複雑に絡み合 うトレース情報を楽に扱いたい https://preliminary.istio.io/docs/tasks/telemetry/distributed-tracing/jaeger/
Slide 39
Slide 39 text
- logging モチベーション 「x-request-id」などの分散トレースを識別 するidを特定したい 業務固有のhttp headerをログにはきた い https://preliminary.istio.io/docs/tasks/telemetry/logs/collecting-logs/
Slide 40
Slide 40 text
我々のマイクロサービス化で残った課題 - サービスの入り口(ingress) → 解決! - サービス間通信のトレース → 解決! - サービス間通信のロギング → 解決! - 障害の切り出し → 未解決 - カナリア → 未解決
Slide 41
Slide 41 text
課題 - カナリア - 機能をGAする前にメンテナーで触りたい - より安全にデプロイしたい - circuit breaking - まだ見ぬカスケード障害に備えたい - rate limitting - まだ見ぬカスケード障害に備えたい - スレッド過多問題を解決したい
Slide 42
Slide 42 text
まとめ マイクロサービス化を実現するために Kubernetesを選んだ。 Kubernetes単体だけでは機能が足りない。 だからサービスメッシュを導入した。
Slide 43
Slide 43 text
最後に所感的なやつ k8sに挑戦してよかった。 結構今でも幸せだけど、ユーザーが爆発的に増えても何か頑張らなく てもいける感がある。
Slide 44
Slide 44 text
ご清聴ありがとうございました!