gcloud container clusters describeאפשר להתחבר למופע Redis רק מאשכולות Google Kubernetes Engine שמשתמשים באותה רשת מורשית כמו מופע Redis.
הגדרה
אם כבר התקנתם את Google Cloud CLI ויצרתם מופע Redis, אתם יכולים לדלג על השלבים האלה.
מתקינים את ה-CLI של gcloud ומפעילים אותו:
gcloud initפועלים לפי המדריך למתחילים כדי ליצור מכונת Redis. חשוב לשים לב לאזור, לכתובת ה-IP ולפורט של מכונת Redis.
הכנת אשכול GKE
אם לא יצרתם אשכול GKE, אתם יכולים ליצור אותו באמצעות הפקודות הבאות ב-Google Cloud CLI:
מגדירים את הפרויקט לאפליקציית הדוגמה הזו ב-
gcloud.gcloud config set project PROJECT_ID
מגדירים את משתנה ההגדרה של אזור Compute Engine ב-
gcloud.gcloud config set compute/zone ZONE
יוצרים אשכול GKE בשם
visitcount-cluster.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 לדוגמה הזו יוצרת חיבור למופע Redis מאשכול Google Kubernetes Engine.
משכפלים את המאגר לשפת התכנות שבחרתם ועוברים לתיקייה שמכילה את קוד הדוגמה:
המשך
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
באפליקציה לדוגמה הזו, מוסיפים 1 למונה Redis בכל פעם שניגשים לנקודת הקצה /.
המשך
האפליקציה הזו משתמשת בלקוח github.com/gomodule/redigo/redis. מריצים את הפקודה הבאה כדי להתקין אותו:
go get github.com/gomodule/redigo/redis@latest
אפליקציה לדוגמה:
Java
האפליקציה הזו מבוססת על Jetty 3.1 servlet.
הוא משתמש בספרייה Jedis:
המחלקות AppServletContextListener משמשות ליצירת מאגר חיבורים ל-Redis לטווח ארוך:
המחלקות VisitCounterServlet הן סרוולט אינטרנטי שמגדיל מונה Redis:
Node.js
האפליקציה הזו משתמשת במודול redis. זהו קובץ package.json לדוגמה:
קוד אפליקציה לדוגמה:
Python
האפליקציה הזו משתמשת ב-Flask לאירוח אתרים ובחבילת redis-py כדי לתקשר עם מופע Redis.
קוד אפליקציה לדוגמה:
פיתוח קובץ אימג' של קונטיינר
יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה באמצעות Cloud Build אל Container Registry:
cp gke_deployment/Dockerfile . gcloud artifacts repositories create --location REPO_REGION --repository-format=docker REPO_ID gcloud builds submit --tag REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1
פריסת האפליקציה ב-Google Kubernetes Engine
כדי להימנע מקידוד קשיח של כתובת ה-IP של מופע Redis, אפשר ליצור 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 החיצונית, משתמשים בדפדפן או שולחים בקשת GET באמצעות curl או הדפדפן:
curl http://EXTERNAL_IP
הסרת הרשומה של טבלאות ה-IP למכונת Redis
אם פעלתם לפי שלב 3 בקטע הכנת אשכול GKE, התקנתם את טווח כתובות ה-IP השמור של מופע Redis בטבלאות כתובות ה-IP של מופע GKE. אם רוצים להסיר את טווח ה-IP של Redis
מהטבלאות של כתובות ה-IP במופע GKE, מריצים את הפקודה הבאה מהספרייה k8s-custom-iptables/:
./uninstall.sh