您只能從與 Redis 執行個體使用相同授權網路的 Google Kubernetes Engine 叢集連線至 Redis 執行個體。
設定
如果您已安裝 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 別名說明文件。
應用程式範例
本 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 Servlet 為基礎。
這個程式碼使用 Jedis 程式庫:
AppServletContextListener
類別用於建立長效 Redis 連線集區:
VisitCounterServlet
類別是用來遞增 Redis 計數器的 Web Servlet:
Node.js
這個應用程式會使用 redis
模組。
Python
建構容器映像檔
建構容器映像檔並推送到 Container Registry:
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
將gke_deployment/visit-counter.yaml
更新為您的 Google Cloud 專案 ID,並將 <PROJECT_ID>
替換為該 ID。這個檔案包含部署作業和服務的設定。
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] 位址:
kubectl get service visit-counter
透過瀏覽器查看託管在 http://[EXTERNAL-IP] 的應用程式,或是透過 cURL 或瀏覽器傳送 GET 要求:
curl http://[EXTERNAL-IP]
移除 Redis 執行個體的 IP 表格項目
如果您按照本逐步操作說明中標題為準備 GKE 叢集一節的第三個步驟操作,則已經將 Redis 執行個體的保留 IP 範圍安裝到 GKE 執行個體的 IP 表格中。如果您要從 GKE 執行個體的 IP 表中移除這個 Redis IP 範圍項目,請透過 k8s-custom-iptables/
目錄執行下列指令:
./uninstall.sh