Google Cloud Platformの新ストレージ「Balanced SSD」を解説
DoiT internationalのアーキテクトとEngineersは、主要なクラウドベンダーと密に連携しながら、新機能のテストやフィードバック、情報発信を継続的に行っています。プラットフォームの限界を日々追求するお客様が増えるなか、こうした活動はますます重要になっています。

そんな中、私たちが心待ちにしていたのが、Google Cloud Platformの新しいストレージクラスBalanced SSDです。SSDのパフォーマンスを保ちつつ、価格は執筆時点で標準SSDの$0.17/GBに対し$0.10/GBと、約50%もお得になります。

出典:Google

出典:Google
SSDをインフラで多用しているDoiT Internationalのお客様にGAリリースをお知らせしたところ、想像以上に好意的な反応が返ってきました(以下に一部をご紹介)。これはぜひ広く共有すべきだと考え、ニュースと活用のヒントをまとめました。
「『こういうメールをもっと送って』ボタンってありませんか?」
「使えるか検討してみます。ありがとう!」
「こうした先回りのお知らせは本当に助かります。GCPの変更をすべて追いかける時間はないので。」
GKEでBalanced SSDを使うための前提条件
マネージドKubernetesのworkloadsでBalanced SSDを利用するには、CSIドライバーアドオンが必要です。次のコマンド一つで簡単に有効化できます。
gcloud beta container clusters update <YOUR-CLUSTER-NAME> --update-addons=GcePersistentDiskCsiDriver=ENABLED # add zone or region
注意:Googleのサービス規約によると、CSIドライバーは現時点でSLAの対象外となっているため、念のため明記しておきます。
警告:クラスターのアップグレード中はクラスターが利用できなくなり、10分以上停止することがあります。
Kubernetesのworkloadsをアップグレードする予定がある場合は、本記事後半のStorageClassおよびVolume Claim Templateの変更例をご参照ください。
既存ディスクをBalanced SSDへ移行する
既存ディスクの隣に新しいBalanced SSDをマウントしてデータをコピーする方法もありますが、ここではスナップショットから新しいディスクを作成する手順をご紹介します。
1. スナップショット取得。ブートディスクを変更する場合は、まずインスタンスを停止してください。通常のディスクであれば停止は不要です。稼働中でもスナップショットは取得できますが、データ損失のリスクがあります。
- https://cloud.google.com/compute/docs/disks/create-snapshots
- https://cloud.google.com/compute/docs/disks/snapshot-best-practices
# stop instance (optional if boot or concerned on data loss)
gcloud compute instances stop <instance name># create snapshot
gcloud compute disks snapshot <disk-name> --region <region>
2. 作成。スナップショットから新しいディスクを作成します。
# create new disk from snapshot
gcloud compute disks create <disk-name> --type pd-balanced --source-snapshot <snapshot ID> --size <size in GB>
3. 切り離して付け替え。ブートディスクを変更する場合は、インスタンスを編集してブートディスクを新しいディスクに切り替えます。通常のディスクの場合は、既存ディスクをデタッチして新しいディスクをアタッチします。
- https://cloud.google.com/compute/docs/disks/detach-reattach-boot-disk
- https://cloud.google.com/sdk/gcloud/reference/compute/instances/detach-disk
- https://cloud.google.com/sdk/gcloud/reference/compute/instances/attach-disk
# unmount volume
sudo umount /dev/disk/by-id/google-DEVICE_NAME# detach old disk
gcloud compute instances detach-disk <instance name> --disk <old disk> --zone <zone># attach new disk
gcloud compute instances attach-disk <instance name> --disk <new disk> --zone <zone># start instance (if stopped)
gcloud compute instances start <instance name># SSH into instance and mount volume
sudo lsblk # make note of new disk (sda1, sdb, etc.)
sudo mkdir -p /path/to/mount
sudo mount -o discard,defaults /dev/sdb /path/to/mount
4. 動作確認。インスタンスを起動し、OSが正常に起動することを確認します。問題があれば、インスタンスを停止して元のディスクに戻せます。
注意:ディスククローンはここでは利用できません。Disk Cloneではディスクタイプを変更できないためです。
実際に試してみる
動作確認のため、BitnamiのMongo DBマルチVMを検証していたサンドボックスプロジェクトを使い、標準の永続ディスクをBalanced SSDに置き換えてデータが残っているかを確かめました。手順は以下の通りです。

インスタンス停止 → ディスクのデタッチ → 新ディスク作成 → アタッチ → 起動
pd-balancedタイプで作成した新しいディスクをアタッチしてインスタンスを再起動したあと、ブラウザベースのSSHターミナルでインスタンスに接続しました。

インスタンスのSSHをクリックしてログイン
続いてアタッチ済みのデバイス一覧を確認し、新しいBalanced SSDをマウントして、MongoDBのファイルがすべて残っているかをチェックしました。

新ディスクをマウントしてファイルを確認
成功!この例が、複数の記事を渡り歩かずにこの新機能を使いこなすヒントになれば幸いです。
GKE:StorageClassとVolume Claimの更新
GKEでworkloadsを動かしていて、CSIドライバーのステータスに問題がなければ、クラスターをアップグレードした後にStorageClassを追加・編集し、workloads内のPersistentVolumeClaimsから参照するだけで切り替えられます。
当社のメンバーが、Apache Ignite用のデモGKEプロジェクトを新しいBalanced SSDストレージに切り替えるテストを行いました。実際の変更内容は以下の通りです。

provisionerとtypeを変更
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ignite-persistence-storage-class # <your-name-here>
namespace: ignite
provisioner: pd.csi.storage.gke.io
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
type: pd-balanced #Default: pd-standard
StorageClassをまだ宣言していない場合でも、アプリケーションworkloads側の修正はごくわずかで済みます。

カスタムStorageClassをすでに使っている場合は変更不要。そうでない場合はworkloadsから次のように参照
最新情報を継続的にお届け
私たちは、日々お客様のユースケースや課題に向き合うなかで得た現場の声を、クラウドパートナーにフィードバックし続けています。待望のBalanced SSDのようなソリューションをGoogleが投入してくれたことを、心からうれしく思います。
今後も、既存・新規のお客様の役に立つと考えられる各種プロダクトのアップデート情報をお届けしてまいりますので、ぜひご期待ください。