【Ltech#20】LIFULLの全社アプリケーション実行基盤 KEEL について

2.1K Views

December 14, 21

スライド概要

Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み

LIFULLの全社アプリケーション実行基盤 KEEL について
私たちのチームでは、LIFULLグループ全体で利用することを目的としたKubernetesベースのアプリケーション実行基盤KEELを開発しています。

LIFULLの目指す「あらゆるLIFEを、FULLに。」という世界観の実現にスケーラブルに貢献するアプリケーション実行基盤の取り組みをご紹介します。

スピーカー:相原 魁

profile-image

LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2021.12.15 Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み LIFULLの全社アプリケーション実行基盤 KEELについて 株式会社LIFULL アプリケーション基盤 G 相原魁 Copyright© LIFULL Co.,Ltd. All Rights Reserved.

2.

Kubernetes上に構築したin-house PaaS - LIFULLのアプリケーションに必要な一切の機能を提供する 本番環境における3年以上の稼働実績 LIFULL HOME’Sの大部分が既にこの上で稼働中 KEELとは船の竜骨の意味で、LIFULLを支える屋台骨を目指す Copyright© LIFULL Co.,Ltd. All Rights Reserved.

3.

Kubernetesとは - CNCFにホスティングされているオープンソースのコンテナオーケストレーションツール - コンテナと呼ばれる論理的な仮想空間をスケールさせたり自己修復したりする - 宣言的な構成管理によるInfrastructure as a Codeの促進とオープンなAPIによる拡張性が特徴 - 巨大なコミュニティによって多くのエコシステムが開発されている - e.g. MySQLをKubernetes上に構築するoracle/mysql-operator - 望む状態を宣言的に定義し、APIを利用してその状態を保つようにプログラムを記述できる ため自動化がしやすい - e.g. MySQLクラスタは3台のRead Replicasを持つことを望む, 1時間に一度バックアップを 取得することを望む, e.t.c. - ソフトウェアエンジニアとしてやれることが多い Copyright© LIFULL Co.,Ltd. All Rights Reserved.

4.

Cloud Native, CNCFとは > クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近 代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための 能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサー ビス、イミュータブルインフラストラクチャ、および宣言型APIがあります。 > Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステ ムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパター ンを民主化し、これらのイノベーションを誰もが利用できるようにします。 引用: https://github.com/cncf/toc/blob/main/DEFINITION.md Copyright© LIFULL Co.,Ltd. All Rights Reserved.

5.

Motivation LIFULLでは開発効率向上のため7年前にmicroservicesを推進し始めましたが... - microservicesによって車輪の再発明が頻繁に発生した - 監視やデプロイなどをそれぞれのmicroservicesごとに作ることに - 開発効率は向上したがそれ以外の関心事が増えた - 多くのmicroservicesでハードウェアリソースを余らせていた - microservicesに限った問題ではないが数が増えたので起こりやすくなった これらを解決するためインフラストラクチャの中央集権化を決意 The pendulum in computing has swung between centralized and distributed... Copyright© LIFULL Co.,Ltd. All Rights Reserved.

6.

実際にKEELが何を提供しているか - フルマネージドなKubernetes Cluster - • Service Mesh • イベントドリブンなサーバレスワークロード対応 フルマネージドな監視基盤 フルマネージドなデリバリーパイプライン サイト信頼性や開発者体験を向上させるための多くのソフトウェア コードジェネレータによるPaaS体験 • コマンドを1発叩くだけで開発者はこれら全てを得ることができる これら全てがKEELチームによって最新に保たれ続けています Copyright© LIFULL Co.,Ltd. All Rights Reserved.

7.

Kubernetes Cluster - Multi tenancyな巨大なKubernetes Cluster • 全てのアプリケーションでリソースプールを共有することでコスト効率を上げる • セキュリティの統制 - IstioによるService Mesh • Retry, Timeout, Circuit BreakerやObservabilityを提供 • KEELによってLua, WebAssemblyで拡張機能が配布 - Knativeによるサーバレスワークロード対応 Copyright© LIFULL Co.,Ltd. All Rights Reserved.

8.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

9.

監視基盤 - Prometheus + Thanos + GrafanaによるMetrics基盤 • ワークロードごとにDashboardとAlertのPresetを用意 - Fluentd + Amazon CloudWatch LogsによるLog基盤 • CloudWatch Logs Insightsによる柔軟なクエリ • Fluentdでログを集計してメトリクスとしてPrometheusに公開 Copyright© LIFULL Co.,Ltd. All Rights Reserved.

10.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

11.

- CPUの使用率にPod間の偏りが存在する(Sticky Session下での過負荷など) - cgroupで設定したlimits.memoryまでメモリを使い切れていない - メトリクスの収集に失敗している - NetworkのReceiveでパケットが落とされている - NetworkのTransmitでパケットが落とされている - Podがrestartを短時間に繰り返している - Podがスケジュール待ちなど不正な状態が継続している - PodのHealthCheckが失敗している - 全てのPodのHealthCheckが失敗している - PodがImageの取得に失敗するなどして待機状態になっている - Podのメモリが不足し始めている - Nodeのリソース不足などが原因でPodが大量に退避させれている - Podがスケールアウトの限界に近付いている - Podのエラーレートが増加している - Podの特定のURIのエラーレートが増加している and more... Copyright© LIFULL Co.,Ltd. All Rights Reserved.

12.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

13.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

14.

デリバリーパイプライン - GitHub Actions + AWS CodePipeline + AWS CodeBuild + SpinnakerによるContinuous Delivery • Automated Canary Releaseを実装 • メトリクスを比較しながらリリースの可否を自動で決定する機構 - GitHub Actions(conftest, hadlint, dockle) + OPA Gatekeeperによる監査 • セキュリティ要件を満たすための多くのCIを提供 - ソースコード改ざん検知によるJ-SOXへの準拠 • SLSAを実装した独自のContent Trust Copyright© LIFULL Co.,Ltd. All Rights Reserved.

15.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

16.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

17.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

18.

サイト信頼性・開発者支援 - Pull Requestを作成するとその内容をKEEL上でプレビューできるKubernetes Custom Controller - メトリクスの時系列分析を支援するユーティリティ - SSO認証基盤 - スポットインスタンスで安全に運用するためのハンドラ - 定型オペレーションの自動化 - 各種Prometheus Exporter 他にも必要に応じて多くのソフトウェアを開発しています Copyright© LIFULL Co.,Ltd. All Rights Reserved.

19.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

20.

コードジェネレータ - KEELではPaaS体験のためにコードジェネレータを提供している - コマンド1発でKubernetes上にProduction Readyな環境を手に入れる - 捨てやすく、拡張しやすい、抽象化をしすぎない - 文字通りコマンド1発で全てが手に入る - Production ReadyなKubernetes Manifestの自動生成 - アラート・ダッシュボード・デリバリーパイプラインの自動生成 - サイト信頼性・開発者支援ソフトウェアの有効化 - LIFULL標準のLintを実行するGitHub Actionsの自動生成 - 運用用ドキュメントの自動生成 - 数週間かかっていた同等の作業を10分程度にまで削減し、高品質に保てるように - セルフアップデート機能と内部での差分吸収によって簡単に最新に追従できる Copyright© LIFULL Co.,Ltd. All Rights Reserved.

21.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

22.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

23.

Copyright© LIFULL Co.,Ltd. All Rights Reserved.

24.

なぜ自分たちで作るのか - LIFULLが「あらゆるLIFEを、FULLに。」するためには開発効率にスケーラビリティが必要 - それぞれのチームが車輪の再発明をしていてはLIFULLの目指す未来を実現できない • LIFULLは2025年までに100の社会課題に取り組むことを掲げています - 既存のPaaSやクラウドプロバイダではLIFULLの要求に100%応えることができない • LIFULLの要求に応えるためには拡張性のあるKubernetesが適切だった - ソフトウェアエンジニアとしてスケーラブルにソーシャルエンタープライズに貢献できる - 社会課題を解決する多くのアプリケーションが載るKEELで動くコードには大きな影響力があ る Copyright© LIFULL Co.,Ltd. All Rights Reserved.

25.

KEELチームの仕事 - キーワードは - Platform Engineering - Site Reliability Engineering - Developer Productivity - in-house PaaS KEELの構築・運用 - Kubernetes, Istio, Spinnaker, Prometheus, Thanos, Grafana, etc… - サイト信頼性や開発者体験を向上させるためのソフトウェアの開発 - Golang, Rust(proxy-wasm, libbpf) - PaaS体験を提供するコードジェネレータおよび周辺ソフトウェアの開発 - KEELへのアプリケーションの受け入れ、およびレビュー - アプリケーションサーバのプロセスモデルに対して適切に構築できているか - キャッシュ戦略は適切か、Circuit BreakerやRetryで異常系に対処できているか - アプリケーション障害発生時の技術サポート - Metrics, Distributed Tracing, eBPF, OS Memory Management, Network Debugging Copyright© LIFULL Co.,Ltd. All Rights Reserved.

26.

Issues - 多層防御の強化 スケジューリングの効率化 ログ基盤の改善(脱Amazon CloudWatch Logsによるコスト削減) アプリケーションのキャパシティプランニングの自動化 Fully AutomatedなKubernetes **Cluster**のBlue-Green Deployment ワークフローエンジンの構築 GPUワークロード対応 arm64対応 アプリケーション可観測性の向上 Cloud Nativeなアプリケーションテンプレートの提供 継続的なKEELの改善 まだまだ課題は多くあります KEELチームでソーシャルエンタープライズにスケーラブルに貢献しませんか? Copyright© LIFULL Co.,Ltd. All Rights Reserved.

27.

Publications https://www.lifull.blog/archive/category/KEEL - - LIFULLの全社アプリケーション実行基盤 KEEL について Istio を本番環境に導入するまで LIFULLが主要サービスの(ほぼ)全てをKubernetesに移行するまで KubernetesクラスタのE2Eテスト LIFULLを支えるKubernetesエコシステムまとめ 2020年版 コマンド1発でKubernetes上にProduction Readyな環境を手に入れ る OPA GatekeeperによるKubernetesセキュリティの歩き方 Copyright© LIFULL Co.,Ltd. All Rights Reserved.