Redis インスタンスには、Redis インスタンスと同じ承認済みネットワークを使用する Google Kubernetes Engine クラスタからのみ接続できます。
設定
Google Cloud CLI をインストール済みで Redis インスタンスを作成済みの場合は、次の手順をスキップできます。
gcloud CLI をインストールして初期化します。
gcloud init
クイックスタート ガイドの手順に沿って Redis インスタンスを作成します。Redis インスタンスのゾーン、IP アドレス、ポート番号をメモしておきます。
GKE クラスタの準備
GKE クラスタを作成していない場合は、Google Cloud CLI で次のコマンドを使用して作成します。
このサンプル アプリケーションのプロジェクトを
gcloud
で指定します。gcloud config set project [PROJECT_ID]
gcloud
で Compute Engine のゾーン構成変数を設定します。gcloud config set compute/zone [ZONE]
visitcount-cluster
という GKE クラスタを作成します。gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
gcloud
でクラスタを作成していない場合は、次のコマンドを使用してクラスタ認証情報を取得します。gcloud container clusters get-credentials [CLUSTER_NAME] --zone [CLUSTER_ZONE] --project [PROJECT_ID]
- CLUSTER_NAME は、GKE クラスタの名前です。
- CLUSTER_ZONE は、クラスタが配置されているゾーンです。
- PROJECT_ID は、クラスタと Redis インスタンスが存在するプロジェクトです。
クラスタのバージョンが 1.8 以上かつ IP エイリアスが有効になっている場合は、次の手順をスキップします。クラスタのバージョンが 1.7 以下の場合、またはバージョン 1.8 以上で IP エイリアスが有効になっていない場合は、次の回避策の手順を行ってからインスタンスに接続してください。
次の各コマンドを実行します。RESERVED_IP_RANGE の部分は、実際のインスタンスの予約済み IP 範囲に置き換えてください。
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..
インスタンスの予約済み IP 範囲がわからない場合は、コンソール(詳細オプション)または次のコマンドを入力して確認できます。
gcloud redis instances describe INSTANCE_ID --region=REGION
IP エイリアスの設定を有効にしてクラスタを作成する方法など、IP エイリアスの詳細については IP エイリアスのドキュメントを参照してください。
サンプル アプリケーション
このサンプル HTTP サーバー アプリケーションは、Google Kubernetes Engine クラスタから Redis インスタンスへの接続を確立します。
使用するプログラミング言語のリポジトリのクローンを作成し、サンプルコードを含むフォルダに移動します。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples
cd golang-samples/memorystore/redis
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/memorystore/redis
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/memorystore/redis
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis
このサンプル アプリケーションは、/
エンドポイントがアクセスされるたびに Redis カウンタをインクリメントします。
Go
このアプリケーションは、github.com/gomodule/redigo/redis
クライアントを使用します。次のコマンドを実行してインストールします。
go get github.com/gomodule/redigo/redis
Java
このアプリケーションは、Jetty 3.1 サーブレット ベースです。
Jedis ライブラリを使用します。
AppServletContextListener
クラスは、長期間有効な Redis 接続プールを作成するために使用されます。
VisitCounterServlet
クラスは、Redis カウンタをインクリメントするウェブ サーブレットです。
Node.js
このアプリケーションでは、redis
モジュールを使用します。
Python
このアプリケーションでは、ウェブサービスに Flask を使用し、redis-py
パッケージを使用して Redis インスタンスと通信します。
コンテナ イメージのビルド
次のように入力し、コンテナ イメージを構築して Container Registry に push します。
cp gke_deployment/Dockerfile .
export PROJECT_ID="$(gcloud config get-value project -q)"
docker build -t gcr.io/${PROJECT_ID}/visit-counter:v1 .
gcloud docker -- push gcr.io/${PROJECT_ID}/visit-counter:v1
アプリケーションを Google Kubernetes Engine にデプロイする
<PROJECT_ID>
を Google Cloud プロジェクト ID に置き換えてgke_deployment/visit-counter.yaml
を更新します。このファイルには、デプロイメントとサービスの構成が含まれています。
Go
Redis インスタンスの IP がハードコーディングされないようにするため、次のように redishost という ConfigMap を作成できます。
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
次のコマンドを使用して構成を確認します。
kubectl get configmaps redishost -o yaml
Java
Node.js
Redis インスタンスの IP がハードコーディングされないようにするため、次のように redishost という ConfigMap を作成できます。
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
次のコマンドを使用して構成を確認します。
kubectl get configmaps redishost -o yaml
Python
Redis インスタンスの IP がハードコーディングされないようにするため、次のように redishost という ConfigMap を作成できます。
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
次のコマンドを使用して構成を確認します。
kubectl get configmaps redishost -o yaml
クラスタに構成ファイルを適用します。
kubectl apply -f gke_deployment/visit-counter.yaml
次のコマンドを実行して、このサンプル アプリケーションの [EXTERNAL-IP](外部 IP)アドレスを確認します。
kubectl get service visit-counter
http://[EXTERNAL-IP] でホストされているアプリケーションをブラウザから確認するか、次のように cURL またはブラウザ経由で GET リクエストを送信します。
curl http://[EXTERNAL-IP]
Redis インスタンスの IP テーブル エントリを削除する
このチュートリアルの GKE クラスタの準備セクションの手順 3 を実施した場合は、Redis インスタンスの予約済み IP 範囲が GKE インスタンスの IP テーブルにインストールされています。この Redis IP 範囲エントリを GKE インスタンスの IP テーブルから削除する場合は、k8s-custom-iptables/
ディレクトリから次のコマンドを実行します。
./uninstall.sh