開発環境のリソース無駄使いを防止しました!

ユビーではdev-nと呼ばれるユビーのサービスを構成する全マイクロサービスを開発者ごとのKubernetes環境にデプロイして、検証ができる仕組みがあります。

GKEのAutopilotを利用しているため、Podが必要とするリソースが足りなくなると新しくNodeが追加されるため、開発者側はリソースの制限を気にすることなく利用することができます。

これは非常に良い仕組みなのですが、開発者やマイクロサービスが多くなってくると、Podを動かすNodeの数も比例して増えていきます。
さらに開発者は24/365で開発環境を利用しているわけではないので、夜間や週末はリソースを無駄にしていることになります。

KubernetesにはDeploymentのPod数をリソースの使用状況で調整できるHPA (Horizontal Pod Autoscaler)という仕組みがありますが、オートスケーリングのための仕組みなので、通常の方法ではPod数を0にしてそこから戻すことはできません。
HPAScaleToZeroをオンにしてHPAのCustom/External Metricsを使ってminReplicasを0にする方法もありますが、そもそも開発環境はオートスケーリングしたいわけでなく自分の環境を落としたいだけのはず・・・。

そこで、もっと気軽に自分の環境のオン・オフをコントロールできないかということでcluster-lending-managerというコントローラを作ってみました!

これを使うと、毎日あらかじめ設定した時間になると自分の環境の全Deploymentのreplicasを0にしてPodを落としてくれて、次の日の決められた時間になるとreplicasの数を元に戻してくれます。

CRDは以下のような構成です。

apiVersion: clusterlendingmanager.dtaniwaki.github.com/v1alpha1
kind: LendingConfig
metadata:
 name: lending-config-sample
spec:
 targets:
 - kind: Deployment
   apiVersion: apps/v1
 - kind: Rollout
   apiVersion: argoproj.io/v1alpha1
 timezone: "Asia/Tokyo"
 schedule:
   default:
     hours:
     - start: "10:00"
       end: "20:00"
   friday:
     hours:
     - start: "10:00"
       end: "17:00" # Happy Friday!
   saturday:
     hours: [] # Ofcourse, no work!
   sunday:
     hours: [] # Ofcourse, no work!

各人がこれを設定することで、以下の図のように各人の仕事時間に合わせてオン・オフのタイミングは調整できるようになっています。

画像1

GKEのAutopilotと組み合わせることで、利用していない時間帯のリソースの無駄使いを減らすことができます。
例えばオンの時間をMon-Fri 9:00-17:00のみにした場合、40h / 168h = 23%程度にGKEのNodeの利用料金を抑えることができます。

お好みでステージング環境等でも利用できるかと思います。
(本番環境向けではないので注意)

開発環境のリソース無駄使いに悩んでいる方がいればぜひ試してみて、フィードバックいただけたら幸いです!

ユビーではこのように開発環境やインフラコストを日々改善しています。
DevOpsに興味のある方、ぜひ一緒に働きましょう!


この記事が気に入ったらサポートをしてみませんか?