GKEでクラスタを削除してもDBのデータを保持したい


はじめに

GKEでクラスタを作成してDBを起動していましたが、クラスタを削除するとDBのデータも消えてしまうので困っていました。

クラスタ外にデータを置いておけば解決するだろうと考えて調べたところ、パッと見つけた方法で解決したのでそのメモです。

他にもいろいろとやり方はあるかと思いますが、ここでは一例を扱います。

どうやって対処したか

永続ディスクを使用した永続ボリューム には以下のように記述があり、

ほとんどの場合、PersistentVolume オブジェクトを直接構成したり Compute Engine 永続ディスクを作成したりする必要はありません。PersistentVolumeClaim を作成すると、Kubernetes が自動的に永続ディスクをプロビジョニングします。
~省略~
この要求を削除すると、対応する PersistentVolume オブジェクトとプロビジョニングされた Compute Engine の永続ディスクも削除されます。

GKEではPersistentVolumeClaimを使用して動的にPersistentVolumeが用意された場合、
クラスタを削除したタイミングでDBデータも削除されるようです。

DBデータを保持したい場合には、既存の永続ディスクを PersistentVolume として使用するで記述されている通りにCompute Engineに永続ディスクを用意してPersistentVolumeで使用します。

まずは、クラスタのゾーンを確認します。

注: 永続ディスクは、クラスタノードと同じゾーンに存在する必要があります。

$ gcloud container clusters list
NAME       LOCATION       MASTER_VERSION  MASTER_IP      MACHINE_TYPE  NODE_VERSION    NUM_NODES  STATUS

次に永続ディスクをクラスタノードと同じゾーンに用意します。
sizeやtypeは適宜置き換えます。

$ LOCATION=xxx #上記で確認したLOCATIONを設定する
$ gcloud compute disks create pd-name --type pd-standard --zone $LOCATION --size 10GB --quiet

あとは、既存の永続ディスクを PersistentVolume として使用するで記載されている通り、PersistentVolumePersistentVolumeClaimのマニフェストファイルをapplyしてPodでマウントしてあげればOKです。

これでクラスタを削除しても永続ディスクは消えないのでデータが保持されました

追記

上記の方法だと複数nodeから書き込みできませんでした。

注: 複数のノードから永続ディスクに書き込みモードで同時接続することはできません。

しかし、対応方法は用意されています。

The steps you need to take for this installation are:
- Create a Google Disk instance with your desired capacity.
- Create the nfs-server deployment and service.
- Create your PV and the corresponding PVC with special specs.

こちらを参考にしました。

クラスタ内にnfs-serverを用意して永続ディスクとつなぎ、DBをnfs-serverとつなぐという感じです。

Cloud Filestore をつかう方法もあるようですが、容量が1TBからとなっているので費用が高くなるので選択肢としては厳しいなと思いました。