kawabatas技術ブログ

試してみたことを書いていきます

【Cloud Memorystore】Cloud Memorystore を試してみた

Cloud Memorystore のベータ版が公開されたので、GKEで試してみました。

※プロジェクトIDなど、一部伏せています。

Cloud Memorystore と GKE に関する公式ドキュメント

https://cloud.google.com/memorystore/docs/redis/quickstart-gcloud https://cloud.google.com/memorystore/docs/redis/connecting-redis-instance https://cloud.google.com/memorystore/docs/redis/connect-redis-instance-gke

redis インスタンス作成

$ gcloud beta redis instances create test --region=us-west1 --zone=us-west1-a
Create request issued for: [test]
Waiting for operation [operation-1525936841433-56bd4db622386-64b67dd7-c246f13c] to complete...done.
Created instance [test].
  • k8s クラスタと同じリージョン
  • Basic Tierで作成。本番では Standard Tier を使うべき

作成した redis インスタンスの詳細

$ gcloud beta redis instances describe test --region=us-west1
authorizedNetwork: projects/XXXXXXX/global/networks/default
createTime: '2018-05-10T07:20:41.651108Z'
currentLocationId: us-west1-a
host: 10.0.0.3
locationId: us-west1-a
memorySizeGb: 1
name: projects/XXXXXXX/locations/us-west1/instances/test
port: 6379
redisVersion: REDIS_3_2
reservedIpRange: 10.0.0.0/29
state: READY
tier: BASIC

IPエイリアスの設定

k8s のクラスタのIPエイリアスが有効でなかったので、対応しました。

1.8以降ではデフォルトで有効になるらしいです。

IPエイリアスが無効の場合の対応

https://github.com/bowei/k8s-custom-iptables

$ git clone https://github.com/bowei/k8s-custom-iptables.git
Cloning into 'k8s-custom-iptables'...
remote: Counting objects: 51, done.
remote: Total 51 (delta 0), reused 0 (delta 0), pack-reused 51
Unpacking objects: 100% (51/51), done.
$ cd k8s-custom-iptables/
$ TARGETS="10.0.0.0/29" ./install.sh
daemonset "k8s-custom-iptables" created
configmap "k8s-custom-iptables" created
configmap "k8s-custom-iptables" configured

ConfigMap と DaemonSet が作成されていた

$ kubectl get ConfigMap
NAME                  DATA      AGE
k8s-custom-iptables   1         7s
$ kubectl get DaemonSet
NAME                  DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
k8s-custom-iptables   3         3         3         3            3           <none>          11s

動作確認

redis-cli の pod 立てて、確認してみる

$ kubectl run -i --tty redisbox --image=gcr.io/google_containers/redis:v1 -- sh
# redis-cli -h 10.0.0.3
10.0.0.3:6379> set hoge bar
OK
10.0.0.3:6379> keys *
1) "hoge"

いけた。ローカルPCから redis の中身を見たいときはこの方法で良いかと思う。 cloud-sql-proxy のようにサービスアカウントを発行する必要ないかと。 Stack Overflowで質問されてた。まだ回答はなかった

モニタリング

Stackdriver でモニタリングできていた

Resources -> Metrics Explorer

Standard Tier の容量変更時にダウンダイムがあるか検証

事前準備

Cloud memorystore の standard-test インスタンスと、redis-cli pod を用意

redis-cli pod で1秒ごとに standard-test インスタンスへコマンドを実行させる

while true; do redis-cli -h 10.0.0.12 keys "*"; sleep 1; done

standard-test インスタンスの容量変更を実行する

gcloud beta redis instances update standard-test --region=us-west1 --size=2

結果

容量変更におよそ10分要したが、redis-cli -h 10.0.0.12 keys "*" の結果が返ってこないという結果はみられなかった。つまり、ダウンタイムはなかった。

まとめ

GCP の redis のマネージドサービス、非常にありがたい。。。