您只能從與 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@latest
應用程式範例:
Java
本應用程式以 Jetty 3.1 Servlet 為基礎。
此方法使用 Jedis 程式庫:
AppServletContextListener 類別用於建立長期 Redis 連線集區:
VisitCounterServlet 類別是會遞增 Redis 計數器的網頁 Servlet:
Node.js
這個應用程式會使用 redis 模組。
Python
建構容器映像檔
建構容器映像檔並推送到 Container Registry:
gcloud artifacts repositories create --location REPO_REGION --repository-format=docker REPO_ID
cp gke_deployment/Dockerfile .
docker build -t REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1 .
gcloud docker -- push REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1
將應用程式部署至 Google Kubernetes Engine
為避免對 Redis 執行個體 IP 進行硬式編碼,您可以建立 redishost ConfigMap:
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
使用下列指令驗證設定:
kubectl get configmaps redishost -o yaml
更新 gke_deployment/visit-counter.yaml,並將 <REPO_REGION>、<PROJECT_ID> 和 <REPO_ID> 替換為在「建構容器映像檔」中建立的容器映像檔值。這個檔案包含部署作業和服務的設定。
apiVersion: apps/v1
kind: Deployment
metadata:
name: visit-counter
labels:
app: visit-counter
spec:
replicas: 1
selector:
matchLabels:
app: visit-counter
template:
metadata:
labels:
app: visit-counter
spec:
containers:
- name: visit-counter
image: "<REPO_REGION>-docker.pkg.dev/<PROJECT_ID>/<REPO_ID>/visit-counter:v1"
env:
- name: REDISHOST
valueFrom:
configMapKeyRef:
name: redishost
key: REDISHOST
ports:
- name: http
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: visit-counter
spec:
type: LoadBalancer
selector:
app: visit-counter
ports:
- port: 80
targetPort: 8080
protocol: TCP
將設定套用到叢集:
kubectl apply -f gke_deployment/visit-counter.yaml
執行下列指令,找出這個範例應用程式的外部 IP 位址:
kubectl get service visit-counter
使用瀏覽器確認應用程式是否託管在外部 IP 位址,或使用 curl 或瀏覽器傳送 GET 要求:
curl http://EXTERNAL_IP
移除 Redis 執行個體的 IP 表格項目
如果您已按照「準備 GKE 叢集」一節的步驟三操作,則已將 Redis 執行個體的保留 IP 範圍安裝至 GKE 執行個體的 IP 表。如要從 GKE 執行個體的 IP 表中移除這個 Redis IP 範圍項目,請透過 k8s-custom-iptables/ 目錄執行下列指令:
./uninstall.sh