開発環境のリソース無駄使いを防止しました!
ユビーでは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!
各人がこれを設定することで、以下の図のように各人の仕事時間に合わせてオン・オフのタイミングは調整できるようになっています。
GKEのAutopilotと組み合わせることで、利用していない時間帯のリソースの無駄使いを減らすことができます。
例えばオンの時間をMon-Fri 9:00-17:00のみにした場合、40h / 168h = 23%程度にGKEのNodeの利用料金を抑えることができます。
お好みでステージング環境等でも利用できるかと思います。
(本番環境向けではないので注意)
開発環境のリソース無駄使いに悩んでいる方がいればぜひ試してみて、フィードバックいただけたら幸いです!
ユビーではこのように開発環境やインフラコストを日々改善しています。
DevOpsに興味のある方、ぜひ一緒に働きましょう!
この記事が気に入ったらサポートをしてみませんか?