Slide 1

Slide 1 text

freee 株式会社 SaaS における EKS のシングルテナント クラスタ戦略とスポットインスタンス活用術 2020.06.10

Slide 2

Slide 2 text

● freee 株式会社 SRE チーム所属 ○ 2018 年からプレイングマネージャー ● 複業でスタートアップの技術アドバイザー ● 1 児の父 ● Twitter ○ @manabusakai ● Blog ○ manabusakai.dev Manabu Sakai 坂井 学 freee 株式会社 2

Slide 3

Slide 3 text

Mission 使命 3 スモールビジネスを、 世界の主役に。 生産年齢人口が劇的に減少し、慢性的な人手不 足となる日本で労働生産性向上は緊急の課題と なっています。 freeeは「人工知能」と「統合基幹業務システ ム」をクラウド技術を活用し、業務効率化のサ ポートを続けることで、中堅中小企業のバック オフィス業務効率化を目指しています。

Slide 4

Slide 4 text

Products 製品・サービス 1/2 4 中小企業の経理業務を効率化。 帳簿や決算書作成・請求業務に対応。リアルタイムに数字を把握できる 給与計算や労務管理を大幅に効率化。 給与明細作成や年末調整、入社手続きから勤怠管理まで対応 税務申告書作成業務を効率化。 法人税・消費税・法定調書・申請届出や電子申告にも対応

Slide 5

Slide 5 text

Products 製品・サービス 2/2 5 低コストでマイナンバーの収集から保管、利用、破棄までが クラウド上で完結 画面に沿って入力するだけで、会社設立に必要なすべての書類を 5分で作成できる無料サービス 個人事業の開業手続きが無料、簡単、最速。 ガイドに沿って質問に答えるだけで書類作成が完了 Webで申し込みでき、最短4営業日で発行。 創業時でも本人確認書類だけで審査可能

Slide 6

Slide 6 text

マイクロサービス化の推進 開発組織の拡大に合わせてマイクロサービス化を推進。 本番環境で 20 以上のマイクロサービスが稼働中。 ● 新たに作るものは基本的に Kubernetes (EKS) を採用 ● アプリケーション開発者への権限委譲 ○ AWS の環境構築を含めてセルフサービス化 ● GitOps によるデプロイ


Slide 7

Slide 7 text

マイクロサービス化の推進 詳しくは builders.flash✨ の「SaaS においてマイクロサービス化は有用な のか?」をご覧ください(freee の事例が取り上げられています)。

Slide 8

Slide 8 text

シングルテナントクラスタとは?

Slide 9

Slide 9 text

シングルテナントクラスタ戦略 K8s cluster Product A Service A-1 Service A-2 Service A-3 Product B Service B-1 ServiceB-2 Service B-3 Product C Service C-1 Service C-2 Service C-3 K8s cluster Product A Service A-1 Service A-2 Service A-3 K8s cluster Product B Service B-1 Service B-2 Service B-3 K8s cluster Product C Service C-1 Service C-2 Service C-3 プロダクト単位で EKS クラスタを分割

Slide 10

Slide 10 text

Blast radius を小さくする K8s cluster Product A Service A-1 Service A-2 Service A-3 Product B Service B-1 ServiceB-2 Service B-3 Product C Service C-1 Service C-2 Service C-3 K8s cluster Product A Service A-1 Service A-2 Service A-3 K8s cluster Product B Service B-1 Service B-2 Service B-3 K8s cluster Product C Service C-1 Service C-2 Service C-3 オペミスなどによる影 響をクラスタに留める

Slide 11

Slide 11 text

シングルテナントクラスタのメリット リスクを分散し、心理的安全性を高める。 ● Blast radius(障害の影響範囲)を小さくすることができる ● セキュリティや権限の境界線を明確化しやすい ● クラスタのアップデート作業がやりやすい リスク分散以外にも、クラスタに自由度を与えやすい。 今回紹介するスポットインスタンスの活用も開発者の意思で選択できる。 e.g. 機械学習基盤、GitHub Actions の self-hosted runner

Slide 12

Slide 12 text

EKS とスポットインスタンス

Slide 13

Slide 13 text

eksctl EKS でスポットインスタンスを使うなら "eksctl" がオススメ。 https://eksctl.io/ ● eksctl の nodegroup の実体は Auto Scaling Group ● スポットの指定には Auto Scaling Group に統合された EC2 Fleet の 機能が使われる

Slide 14

Slide 14 text

スポットインスタンスの活用 本番環境以外の nodegroup にスポットインスタンスを活用。 シングルテナントクラスタによるコスト増を抑える。 活用のコツ ● オンデマンドで最低台数を確保 ● 1 つの nodegroup に複数のインスタンスファミリーを指定 ○ 現行世代と 1 世代前を指定 ○ CPU を問わない場合は m5a など AMD プロセッサも検討 ● 適正なスポットプールの指定 ○ アベイラビリティゾーン × インスタンスタイプ × OS


Slide 15

Slide 15 text

具体的な指定方法 cluster.yaml に instancesDistribution を指定する。

Slide 16

Slide 16 text

本番環境で使っていない理由 コンテナはステートレスだが、中断通知を受け取ってから 2 分以内に drain 処理が終わらないケースがある。 ● 大量のデータを持つユーザーの場合、2 分以内に処理を終えられない ケースがある ● お金に関するデータは一貫性のトランザクションが重要なので、単純 に分割すれば良いというわけにはいかない ○ 分散システムにおけるデータ整合性担保の難しさ