概要
ここでは開発環境のコストを下げられるPreemptibleNodesへの移行方法について解説します。
PreemptibleNodesについてはプリエンプティブル仮想マシンを参考にしください。
手順の途中で手元のターミナルから操作が必要なのでそちらのセットアップは
[コピペ出来る!]GKEをターミナルから操作するまでの手順を参考にしてください。
前提
- 古いNodePool名:
old
, 新しいNodePool名をnew
- Nodeは15台
- e2-standard-2をPreemptibleNodesへ移行
- 環境: development
として解説します。
料金の下がり幅
現状development環境は15Node使用しているので以下の図から $941.25 -> $282.45
へのコスト削減が見込めます!
新NoodPoolの作成(GCPコンソール)
GCPのコンソールから特定のクラスタに新しいNoodPoolを作成する。
旧NodePoolから新NodePoolに移行する(手元のターミナル)
Contextsを確認(手元のターミナル)
ここで変更したいNodePoolが存在しているClusterにContextが向いていないと思わぬ不具合を招いてしまうので確認してください。
# contextの確認
$ kubectl config get-contexts
で確認。
削除するNodePoolのPodスケジュールリングを停止
まずは現状のnodeの状態を確認
$ kubectl get nodes -l cloud.google.com/gke-nodepool=pool-old
NAME STATUS ROLES AGE VERSION
gke-development-pool-old-aaaaaaaaaaaa-bbbb Ready <none> 5d10h v1.18.17-gke.1901
STATUS: Ready
であることを確認
下記コマンドでPodのスケジューリングを停止
$ for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=pool-old); do
kubectl cordon "$node";
done
上記コマンドを実行すると
NAME STATUS ROLES AGE VERSION
gke-development-pool-old-aaaaaaaaaaaa-bbbb Ready,SchedulingDisabled <none> 5d10h v1.18.17-gke.1901
STATUS: Ready,SchedulingDisabled
であることを確認
旧NodePoolから新NodePoolに移行
以下コマンドで pool-oldからpool-newにpodを移行
$ for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=pool-old -o=name); do
kubectl drain --force --ignore-daemonsets --delete-local-data --grace-period=10 "$node";
done
一通りログの出力が終わったら既存のpodが新しいnodeに移っているのか確認
$ kubectl get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
app-11111ccccc-dddd 2/2 Running 0 14m 10.0.11.2 gke-development-new-pool-cccccccc-dddd <none> <none>
app-11111eeeee-ffff 2/2 Running 0 12m 10.0.11.4 gke-development-new-pool-eeeeeeee-ffff <none> <none>
実際にアクセスして問題ないか確認
今まで通りつながればOK
旧NodePoolを削除(GCPコンソール)
以上です!