2019年7月10日0件のコメントこんにちは。GMOアドマーケティングのmizkichです。Engine)上のClusterやPodをCronJobで定期的に削除する方法」について紹介します。開発環境など24h/365dでの運用が必要ない環境では、夜間や週末にサーバ台数を減らすことで、費用を大きく削減出来ます。私が担当しているシステムでは、少し乱暴なスクリプトでこれを実現しているため、その方法を紹介させて頂きます。弊社の開発環境では、開発者が自由に新規のクラスタを作る事が出来ます。クラスタを1つ作る毎に平均5台以上のGCEインスタンスが起動し、1日約800円xクラスタの数の費用が発生します。クラスタには、開発者が自由に作る開発用クラスタとお客様にも公開している検証用クラスタの2種類あります。開発者が自由に作る開発用のクラスタは、毎日22時に強制的に削除します。お客様も利用する検証用のクラスタは、金曜の22時に強制的に削除します。弊社の開発者は11時出社が多いので、サーバの起動時間を半分以下に削減できる想定です。設計・検証Kubernetesの仕組みであるCronJobsを起動し、GKEの内部から自分自身を含むクラスタを削除する方式にしました。検証環境はゆるめの権限設定にしているので、GKE内のPodは親であるクラスタを操作する権限を持っていました。Functionsでクラスタを削除する方式も試したのですが、この方式はどうしてもGKEへのアクセス権設定が上手く行かず、、クラスタを削除出来ず、調査の時間も取れなかったので廃案にしています。ENV_CLUSTER_NAME“が通ります。ENV_CLUSTER_NAME”でクラスタを削除出来てしまいます。GCEの権限設定に依存します。権限の緩い開発環境だから利用できる方法です。sdkが入ったDockerfileとCronJob用のYamlだけでした。sdk入りのDockerfileは以下の通りです。/var/cache/apk/*イメージサイズが最小になるようにAlpineを利用しています。タイムゾーンを日本にするために、tzdataを一時的に導入し削除しています。CronJobの設定は以下の通りです。Neverscheduleに設定する時刻はUTCです。日本時間から9時間を引いた時刻を設定します。delete指定するだけでした。Script内で文字列置換する方式としました。$4}実装(開発環境用)クラスタを毎日削除するので、scheduleだけ検証環境と異なる設定になります。*"<以下略>まとめKubernetesを使った開発や検証では、開発者が扱うシステムの規模が大きく、費用も大きくなる傾向があります。Functionsを使うより良いと感じました。今回の方式ではGCEのデフォルトサービスアカウント設定を利用しています。デフォルト権限設定を含め、実際の運用ではセキュリティホールを意識した実装をしていただければ幸いです。@gmoap_engineer本ブログで発信される情報は、各エンジニア個人の見解であり、弊社の公式見解ではありません。本ブログに掲載、引用等をしている商品またはサービス等の名称は、各社の商標または登録商標です。その他の事項について一切責任を負いかねます。発表する情報には注意を払っておりますが、公式発表、見解については、弊社WEBサイトおよびプレスリリースなどをご確認ください。GMOインターネットグループにおけるソーシャルメディア運用ポリシーについては次のページをご確認ください。本ブログに掲載のあるソフトウェアのダウンロードは自己責任で御願い致します。ソフトウェアのダウンロードの結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。本ブログに掲載のあるソフトウェアを扱う際は、各ソフトウェアの公式リファレンスを参照のもとご使用下さい。ソフトウェアの実行の結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。