מדריך למשתמש בתצוגה מקדימה:
תצוגה מקדימה של נהלים חדשים להתקנה ולניהול של Apigee Hybrid גרסה 1.8.
במסמך הזה:
- תצוגה מקדימה
- סקירה כללית
- דרישות מוקדמות
- התקנה בסיסית של Apigee Hybrid
- התקנה מותאמת אישית של Apigee Hybrid
- הורדת קובצי הגדרה
- יצירת מרחב שמות
- שימוש בתמונות Docker ממאגרים פרטיים (אופציונלי)
- הגדרה של imagePullSecrets (אופציונלי)
- הגדרת שרת proxy קדימה (אופציונלי)
- ציון אישורי TLS של Ingress
- עדכון הפריסה של Ingress
- הגדרת חשבונות שירות מותאמים אישית ב-Google Cloud
- באמצעות זהויות של עומסי עבודה
- עריכת קובצי YAML של משאבים
- יצירת משאבי אתחול ובקר
- מתן הרשאות לחשבון השירות של הכלי לסנכרון כדי ליצור אינטראקציה עם מישור הבקרה
- יצירת רכיבי מישור נתונים של Apigee
- המתנה להפעלת המשאבים
- התאמה אישית של ההתקנה של cert-manager במרחב שמות בהתאמה אישית
- Kustomize ורכיבים
- מושגים
- הסבר על הסקריפט
- מבנה התיקיות של הגדרת Apigee Hybrid
- אחסון מפתחות של חשבונות שירות בכספות חיצוניות
- שדרוג של Apigee Hybrid
- Apigee Hybrid Rollback
- ניקוי
- מחיקת סביבה
- התקנה של כמה מופעים
תצוגה מקדימה
המסמך הזה מיועד למשתמשים בתפקיד האופרטור של Apigee (משתמשים שמתקינים, מנהלים ומבצעים פעולות אדמין בהטמעות של Apigee Hybrid). כדי לפעול לפי ההוראות במסמך הזה, צריך ניסיון בהתקנת Apigee Hybrid באחת מפלטפורמות Kubernetes הנתמכות. מומלץ ליצור ארגון Apigee לצורך הערכה כדי לנסות את השלבים שבהמשך.
משוב
נשמח לקבל משוב על התהליך הזה בכתובת Apigee-hybrid-install-preview@google.com.
סקירה כללית
בממשק החדש להתקנת Apigee Hybrid, רכיבי Apigee מותקנים באמצעות kubectl, וההתקנה והניהול של Apigee Hybrid משולבים עם כלי תזמור להגדרת Kubernetes, כמו Kustomize. האימותים המשופרים והשקיפות של הרכיבים שמותקנים מספקים יכולת טובה יותר לניפוי באגים ומשפרים את תהליך ההתקנה הכולל.
סקריפט התקנה, apigee-hybrid-setup.sh, מספק כלי פשוט להתקנה בסיסית. אפשר להשתמש בו כדי ליצור התקנה היברידית ואז לשנות אותה בהתאם לצרכים שלכם באמצעות kubectl, או ליצור התקנה היברידית מאפס באמצעות kubectl.
כל מאפייני ההגדרה של Apigee Hybrid מאוחסנים בקובצי YAML, קובץ אחד לכל רכיב מרכזי. כך אפשר לשלוט בצורה הרבה יותר מפורטת בהתקנה ההיברידית בסביבת Kubernetes. אפשר למצוא את קובצי ההגדרות ואת סקריפטים ההתקנה במאגר ב-GitHub.
שינויים בתהליך ההתקנה החדש
אנחנו משנים את תהליך ההתקנה של Apigee Hybrid מהסיבות הבאות:
- השיטה החדשה להתקנת Apigee hybrid ניתנת לשילוב עם כלים קיימים של Kubernetes CI/CD כמו Argo, Flux או Anthos Config Management שלא משתמשים בקובץ תצורה של
overrides.yaml. - Apigee Hybrid סיפק את
apigeectl, כלי ליצירת תבניות בהתאמה אישית שמייצר מניפסטים של Kubernetes (בין היתר) כדי להתקין ולנהל את Apigee Hybrid באשכולות Kubernetes. תהליך ההתקנה והניהול החדש מספק חוויה דומה לזו של ספקי תוכנה אחרים. - התהליך החדש מאפשר התקנה בסיסית מהירה על ידי יצירה אוטומטית של חשבונות שירות עם ההרשאות הנדרשות, אישורי TLS, מילוי אוטומטי של ערכי ברירת מחדל ורכיבים בסיסיים נחוצים אחרים.
דרישות מוקדמות
כדי להשתמש בהתקנת התצוגה המקדימה הזו, צריך לעמוד בדרישות המוקדמות הבאות:
גרסת טרום-השקה (Preview)
התצוגה המקדימה הזו מיועדת לשימוש עם Apigee hybrid בגרסה 1.8.x. אין תמיכה בגרסאות מאוחרות יותר של Apigee hybrid.
הגדרת Apigee Hybrid
לפני שממשיכים בהתקנה בפועל של Apigee Hybrid, צריך לוודא שביצעתם את ההוראות הבאות שמופיעות בקטעים הבאים של התיעוד:
- הגדרת הפרויקט והארגון
- סקירה כללית של הדרישות המוקדמות להתקנת Apigee Hybrid.
- שלב 1: הפעלת ממשקי API
- שלב 2: יצירת ארגון
- שלב 3: יצירת סביבה וקבוצת סביבות
- הגדרה של זמן ריצה היברידי
כלים
בנוסף, צריך להוריד ולהגדיר בתחנת העבודה את הכלים הבאים:
curl- נדרשת הרשאה של
dockerכדי להריץ את הסקריפטapigee-hybrid-setup.sh. פועלים לפי ההוראות במאמר קבלת Docker כדי להתקין את Docker. -
envsubstאמור להיות זמין ברוב המערכות שמבוססות על Linux/UNIX. ב-MacOS ובמערכות אחרות, פועלים לפי ההוראות במאגר הזה. -
jqצריך להיות מותקן. מורידים את jq. kptהורדת kptkubectlגרסה 1.23 ואילך. מידע נוסף על התקנת kubectl זמין במאמר Install Tools: kubectl (התקנת כלים: kubectl) במסמכי התיעוד של Kubernetes.
משתנים נפוצים שמופיעים במדריך הזה
במדריך הזה נעשה שימוש במשתני הסביבה הבאים בכמה שלבים. אפשר להגדיר אותם בשורת הפקודה או באמצעות סקריפט, או להחליף את הטקסט בפקודות כשמזינים אותן.
-
APIGEE_NAMESPACE: מרחב השמות של Apigee. ערך ברירת המחדל הואapigee. עם זאת, אפשר להשתמש במרחב שמות אחר. -
CLUSTER_NAME: השם של האשכול שבו מתקינים את Apigee Hybrid. זהו האשכול שיוצרים בשלב 1: יצירת אשכול -
CLUSTER_LOCATION: האזור של האשכול. ההנחיות במדריך הזה מבוססות על ההנחה שאתם משתמשים באשכול אזורי. אם אתם משתמשים באשכול אזורי, תוכלו להיעזר בהוראות שבשלב 1: יצירת אשכול. -
ENV_GROUP: השם של קבוצת הסביבות בהתקנת Apigee Hybrid. זו קבוצת הסביבות שיוצרים בשלב 3: יצירת קבוצת סביבות. אפשר ליצור כמה קבוצות סביבות. -
ENV_NAME: השם של קבוצת הסביבות בהתקנת Apigee Hybrid. זו קבוצת הסביבות שיוצרים בשלב 3: יצירה של קבוצת סביבות. אפשר ליצור כמה קבוצות סביבות. -
INSTALL_DIR: הספרייה שבה מתקינים את Apigee Hybrid. כברירת מחדל, זוהי ספריית המשנהapigee-hybrid-install/של הספרייה שבה הורדתם את קובץ ההתקנה, למשל:/myhybrid/apigee-hybrid-install/. זוהי ספריית הבסיס של מבנה הקבצים שמתועד במאמר מבנה התיקיות בהגדרה של Apigee Hybrid. -
INSTANCE_DIR: הספרייה של מופע ספציפי של Apigee Hybrid. כברירת מחדל, המופע הראשון נקראinstance-1. ספריית המופע היא ספריית משנה של${INSTALL_DIR}/overlays/instances/. אפשר לציין כל שם למופעי ה-Hybrid. ראו התקנה של כמה מופעים. -
ORG_NAME: השם של הארגון שלכם ב-Apigee Hybrid. המזהה הזה צריך להיות זהה למזהה הפרויקט ב-Google Cloud. שלב 2: יצירת ארגון
התקנה בסיסית של Apigee Hybrid
כדי להתקין במהירות את Apigee Hybrid בלי לבצע התאמות אישיות מורכבות, אפשר להשתמש בהליך הבא שכולל שני שלבים.
- סביבה אחת
- קבוצת סביבות אחת
- נוצר חשבון שירות יחיד ב-Google Cloud שמשמש לכל הרכיבים הנפרדים
- ערכי ברירת מחדל לכל מפתחות ההצפנה והסיסמאות.
הורדת קובצי ההגדרה
מורידים ומכינים את קובצי ההתקנה על ידי שיבוט המאגר ב-GitHub בכתובת https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1:
משכפלים את המאגר:
git clone https://github.com/apigee/apigee-hybrid-install.gitעוברים לספרייה של המאגר המשוכפל:
cd apigee-hybrid-installיוצרים ענף מהתג preview-1:
git branch preview-1 preview-1 git checkout preview-1הופכים את סקריפט ההגדרה לסקריפט שניתן להרצה:
chmod +x ./tools/apigee-hybrid-setup.shלמאגר המשוכפל יהיה מבנה שדומה לזה שמתואר במאמר מבנה התיקיות של Apigee Hybrid:
הפעלת ההגדרה
מריצים את סקריפט המעטפת apigee-hybrid-setup.sh שנמצא בתיקייה tools/.
./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION --org $ORG_NAME --setup-all
אם נתקלים בשגיאות, מנסים להריץ את הסקריפט בפעם השנייה.
אפשרויות נוספות שכדאי להשתמש בהן:
-
--env $ENV_NAMEמציין את השם של סביבת Apigee. -
--envgroup $ENV_GROUPמציין את קבוצת הסביבות. -
--ingress-domain $HOSTNAMEמציין את שם המארח שסיפקתם לקבוצת הסביבות. -
--gcp-project-id $PROJECT_IDמציין את המזהה של הפרויקט ב-Google Cloud.
אפשרויות נוספות מפורטות במאמר הסבר על הסקריפט.
כל השגיאות במהלך הביצוע יודפסו בפלט הרגיל.
אחרי שהסקריפט יסתיים בהצלחה, תהליך ההתקנה ההיברידית הבסיסי יושלם. כדי לבדוק את ההתקנה, אפשר ליצור שרת proxy לדוגמה כמו שמתואר במאמר יצירה ופריסה של שרת proxy חדש של API.
התקנה מותאמת אישית של Apigee Hybrid
משתמשים מתקדמים שרוצים שליטה מדויקת יותר בהתקנה יכולים לפעול לפי רצף השלבים הבא (ברוב השלבים שמפורטים בהמשך, אפשר לבצע את השלב באופן ידני או להשתמש בסקריפט מעטפת כדי להפוך את השלב הספציפי הזה לאוטומטי):
הורדת קובצי ההגדרה
מורידים ומכינים את קובצי ההגדרה:
משכפלים את המאגר ב-GitHub בכתובת
https://github.com/apigee/apigee-hybrid-install/למאגר המשוכפל יהיה מבנה שדומה לזה שמתואר במאמר מבנה התיקיות של Apigee Hybrid:
cdלספרייהapigee-hybrid-install/הופכים את סקריפט ההגדרה לסקריפט שניתן להרצה:
chmod +x ./tools/apigee-hybrid-setup.sh
יצירת מרחב שמות
יוצרים מרחב שמות של Kubernetes באשכול, שיכיל את כל רכיבי האשכול של Apigee.
kubectl create namespace apigee
אם בוחרים שם אחר למרחב השמות, אפשר לבחור באחת משלוש האפשרויות הבאות:
- (מומלץ) משתמשים ב-
--namespace={YOUR_NAMESPACE_NAME}בזמן שממלאים מראש ערכים בעריכת קובצי YAML של משאבים. מריצים את שתי הפקודות הבאות:
משתמשים ב-
kptכדי לציין את מרחב השמות של Apigee:kpt fn eval "${INSTALL_DIR}/overlays/" \ --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ APIGEE_NAMESPACE="${APIGEE_NAMESPACE}" # This is for replacing the namespace in istio discoveryAddress which cannot be # achieved with kptמשתמשים ב-
sedכדי להחליף את מרחב השמות ב-istio discoveryAddress:sed -i -E -e "s/(discoveryAddress: apigee-ingressgateway-manager\.).*(\.svc:15012)/\1${APIGEE_NAMESPACE}\2/" "${INSTALL_DIR}/overlays/controllers/istiod/apigee-istio-mesh-config.yaml"
לחלופין, אתם יכולים לשנות ידנית את המשאבים בנפרד כדי ליצור אותם במרחב השמות שתבחרו.
שימוש בתמונות Docker ממאגרים פרטיים (אופציונלי)
אתם יכולים לבחור שלא להשתמש בתמונות שמתארחות באופן ציבורי, ולהשתמש בתמונות ממאגרים פרטיים משלכם:
- השלב הראשון הוא להעביר את כל התמונות למאגר הפרטי שלכם. כדי לעשות זאת, פועלים לפי השלבים שמפורטים במאמר apigee-pull-push | Apigee X. כברירת מחדל, התמונות מתויגות בגרסת Apigee Hybrid שאליה הן מתייחסות, ולא מומלץ לערוך את התגים האלה. בנוסף, מומלץ לא לערוך את שמות התמונות כדי שאפשר יהיה ליצור את נתיב התמונה הסופי כמו שמוסבר במרכז התמונות.
מגדירים את הערך של השדה
imageHubשנמצא בקובץ apigee-hybrid-config.yaml לנתיב המארח של המאגר הפרטי. (פרטים נוספים זמינים במאגר התמונות).imageHub: "your.private.repo/apigee/hybrid"
כך תוכלו לוודא שכל הרכיבים של Apigee hybrid ישתמשו בתמונות מהמאגר הפרטי שלכם.
בנוסף, יכול להיות שתרצו להשתמש בתמונה פרטית בשביל הבקר ושער הכניסה של Apigee, ובשביל זה תצטרכו לערוך את הקבצים apigee-controller-deployment.yaml ו-apigee-ingressgateway-manager-deployment.yaml ולהחליף את כל השדות image בתמונה ממאגר פרטי.
הגדרה של imagePullSecrets (אופציונלי)
- יוצרים סוד של Kubernetes שמכיל את פרטי הכניסה לאימות מול המאגרים הפרטיים. במאמר שליפת תמונה ממאגר פרטי מוסבר איך ליצור את הסוד.
- אחרי שיוצרים את הסוד, כל מה שנותר הוא להפנות לסוד הזה. כדי לעשות זאת, צריך לערוך את הקובץ apigee-hybrid-config.yaml ולהגדיר את הערך של השדה
imagePullSecretלשם הסוד שנוצר קודם, ולהפעיל את הרכיבimagePullSecretבקובץkustomization.yamlהמתאים.
אם תציינו את imagePullSecrets בשני המקומות, המיקום שמופיע בקובץ apigee-controller-manager.yaml יקבל עדיפות.
הגדרת שרת proxy להעברה (אופציונלי)
אפשר להגדיר שרתי proxy קדימה על ידי הוספת השדה forwardProxy לקובץ apigee-hybrid-config.yaml. לדוגמה:
forwardProxy: |
scheme: HTTP
host: 10.12.0.47
port: 3128
ציון אישורי TLS של Ingress
שימוש בסקריפט
./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs
פרטים נוספים על הסימון הזה מופיעים במאמר הסבר על הסקריפט.
גלילה ידנית
אתם צריכים לספק אישורי TLS שישמשו ל-istio ingress gateway. אתם יכולים:
- אפשר להשתמש באישורים שחתמה עליהם רשות מוכרת באמצעות השלבים שמפורטים במאמר קבלת אישורי TLS: דוגמה | Apigee X
- או ליצור אישורים בחתימה עצמית.
בדוגמה הזו נשתמש באישורים בחתימה עצמית. אפשר ליצור אישורים בחתימה עצמית באמצעות (בהנחה שהערך DOMAINהוגדר בצורה נכונה וצריך להיות זהה לשם המארח שהוגדר בקבוצת הסביבות):
openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650
ייווצרו שני קבצים בשמות tls.key ו-tls.crt.
לאחר מכן צריך ליצור סוד בפורמט הבא. אפשר להשתמש ב-kubectl create או ב-kubectl apply כמו שמוסבר במאמר בנושא שימוש בזוג מפתחות או באישור מותאם אישית עבור רשות חתימת אישורים (אופציונלי):
apiVersion: v1
kind: Secret
metadata:
name: "{ORG_NAME}-{ENV_GROUP_NAME}"
namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
cert: |
{BASE64_ENCODED_TLS_CRT}
key: |
{BASE64_ENCODED_TLS_KEY}
---
דוגמה ליצירת הסוד באמצעות kubectl create:
kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
--cert="tls.crt" \
--key="tls.key" \
-n {$APIGEE_NAMESPACE}
עדכון פריסת ה-ingress
כדי ליצור או לשנות פריסות של תעבורת נכנסת, צריך לשנות את השדה spec.components.ingressGateways במשאב המותאם אישית ApigeeOrganization ב-bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml.
כברירת מחדל, אנחנו יוצרים פריסת Ingress אחת עם פרמטרים שמוגדרים כברירת מחדל(ערכי ברירת המחדל מוצגים במסמכי העיון של CR ):
ingressGateways:
- name: "prod-1"
דוגמאות:
א. שינוי שדות של שירותי כניסה
ingressGateways:
- name: "prod-1"
serviceSpec:
annotations:
{KEY}: ${VALUE}
loadBalancerIP: ${IP}
ב. שינוי הערך המינימלי או המקסימלי של העותק
ingressGateways:
- name: "prod-1"
autoScaler:
minReplicas: 4
maxReplicas: 10
ג. הוספת פריסת Ingress חדשה
ingressGateways:
- name: "prod-1"
- name: "prod-2"
הגדרת חשבונות שירות מותאמים אישית ב-Google Cloud
שימוש בסקריפט
./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets --namespace APIGEE_NAMESPACE
כאשר APIGEE_NAMESPACE הוא מרחב השמות המותאם אישית. מרחב השמות שמוגדר כברירת מחדל הוא apigee.
פרטים נוספים על הדגלים מופיעים במאמר הסבר על הסקריפט.
גלילה ידנית
צריך לשמור את המפתחות של חשבון השירות ב-Google Cloud כסודות באשכול. קובץ ה-YAML של הסוד צריך להיות במבנה הבא:
apiVersion: v1
kind: Secret
metadata:
name: "{NAME}"
namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
client_secret.json: |
{BASE64_ENCODED_SA_KEY}
לפרטים נוספים על כל חשבונות השירות הנדרשים ועל שמות הסודות, אפשר לעיין בקטע חשבונות שירות של Google Cloud.
אתם יכולים לבחור שם אחר לסודות, אבל אז תצטרכו לבצע שינוי תואם ברכיב שבו נעשה שימוש בשם הסוד הזה. לדוגמה, אם תחליטו לשנות את השם של הסוד של חשבון השירות של זמן הריצה מ-apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} ל-my-runtime-svc, תצטרכו לבצע שינוי תואם ב-apigee-environment.yaml של הסביבה הזו.
שימוש בזהויות של עומסי עבודה
חובה להשתמש באחת מהאפשרויות: הגדרת חשבונות שירות מותאמים אישית ב-Google Cloud או שימוש בזהויות לעומסי עבודה.
דרישות מוקדמות
לפני שמשתמשים ב-Workload Identity, צריך לוודא שהתמיכה מופעלת באשכול GKE. פרטים נוספים זמינים במאמר עדכון מאגרי צמתים | Apigee X.
הפעלת Workload Identity
בקטע זהויות של עומסי עבודה שבמאמר Kustomize ורכיבים מוסבר איך להפעיל זהויות של עומסי עבודה לפני ההתקנה.
עריכה של קובצי YAML של משאבים
בחלק מהמקומות בקובצי ה-YAML של הרכיבים צריך לציין את השמות הנכונים של הארגון, הסביבה וקבוצת הסביבות. אפשר להגדיר את הערכים האלה באופן ידני, או להשתמש בסקריפט מעטפת כדי למלא אותם באופן אוטומטי.
שימוש בסקריפט
./tools/apigee-hybrid-setup.sh --fill-values
יצירה של משאבי אתחול ובקר
#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml
#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress
# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers
# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m
# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml
מתן הרשאות לחשבון השירות של הכלי Synchronizer כדי לקיים אינטראקציה עם Control Plane
פועלים לפי השלבים במאמר שלב 8: הפעלת הגישה של הכלי לסנכרון, ומחליפים את שם חשבון השירות, apigee-non-prod או apigee-synchronizer, בשם apigee-all-sa של חשבון השירות שנוצר בתהליך ההתקנה החדש.
★ חשוב: הקפידו לשנות את שם חשבון השירות בהוראות שבקטע הפעלת הגישה של כלי הסנכרון. אחרת, הפעלת הגישה לכלי הסנכרון תיכשל.
יצירת רכיבי מישור הנתונים של Apigee
אם שיניתם את השמות של אחד מהמשאבים בשלבים הקודמים, תצטרכו לבצע שינוי תואם בקובצי YAML אחרים שבהם נעשה שימוש במשאב הזה. אחרי שמסיימים, משתמשים בפקודות שבסעיף הדוגמה הבא:
# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
כדי להתקין את כל הרכיבים.
המתנה להפעלת המשאבים
kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m
התאמה אישית של ההתקנה של cert-manager במרחב שמות מותאם אישית
כדי להתאים אישית את מרחב השמות שבו פועל cert-manager, פועלים לפי השלבים הבאים.
אם cert-manager מותקן באשכול שלכם במרחב שמות שאינו cert-manager, תצטרכו לעדכן את מרחב השמות שמשמש ליצירת אישור הבסיס של Apigee.
- עורכים את הקובץ customization.yaml ליצירת האישור:
$INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml מוסיפים את הטקסט הבא לסוף הקובץ.
- patch: |- - op: replace path: /metadata/namespace value: "gk-cert-manager" target: group: cert-manager.io version: v1 kind: Certificate name: apigee-root-certificateשמירת הקובץ
Kustomize ורכיבים
סקירה כללית
ההתקנה ההיברידית החדשה יורשת את האידיאולוגיה של Kustomize לגבי מבנה של קובצי YAML בצורה של Bases ו-Overlays
- Bases הם קבצים שסופקו על ידי Apigee, ויכול להיות שהם ישתנו בין כל מהדורה חדשה של Hybrid. לא מצפים מכם לשנות את הקבצים האלה. הקבצים האלה מכילים כמה ערכי ברירת מחדל שסופקו על ידי Apigee. כל הקבצים בתיקייה
bases/ברמה העליונה מכילים את ה-Bases האלה שכבות-על מכילות את הגדרות המשתמש ומשמשות כאמצעי לשינוי ערכי ברירת המחדל שצוינו בבסיסים. כל הקבצים בתיקייה ברמה העליונה
overlays/מכילים את שכבות העל האלה
איך משתמשים ברכיבים
תיקיות המשנה בתוך ספריית overlays/ ברמה העליונה בנויות בצורה כזו שמאפשרת להפעיל (או להשבית) תכונה נוספת מסוימת על ידי הוספת הערה (או הסרת הערה) לשורות מסוימות בקובצי kustomization.yaml.
לדוגמה, כך נראה מבנה התיקיות overlays/instances/{INSTANCE_NAME}/telemetry:
telemetry
├── components
│ ├── http-proxy
│ ├── imagepullsecret
│ ├── logger
│ ├── metrics
│ ├── nodeselector
│ ├── openshift-scc
│ ├── workload-identity-logger
│ └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml
כך קובצי telemetry/kustomization.yaml ייראו כנראה כברירת מחדל:
resources:
- apigee-telemetry.yaml
components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc
אנחנו רואים שהשורה ./components/logger הוסרה כהערה, מה שאומר שלא הפעלנו את uGoogle Clod logger כברירת מחדל. כדי להפעיל את האפשרות הזו, פשוט מבטלים את ההערה בשורה הזו:
components:
- ./components/logger
באופן דומה, כדי להשבית מדדים, אפשר להוסיף הערה לשורה ./components/metrics:
...
components:
...
# - ./components/metrics
…
בקטעים הבאים נסביר על כל הרכיבים השונים האלה, מתי אפשר להשתמש בהם ואיך אפשר להגדיר אותם.
OpenShift
משתמשים שרוצים להתקין את Apigee Hybrid באשכול OpenShift, אולי יצטרכו להפעיל כמה רכיבים או משאבים לפני ההתקנה. (השלב הזה נדרש אם לא משתמשים בסקריפט כדי לבצע את ההתקנה). הקבצים שצריך לשנות הם:
overlays/initialization/openshift/kustomization.yaml. בקטעresources:, מבטלים את ההערה בשורה:# - ../../../bases/initialization/openshift/overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yamlביטול סימון כהערה:# - ./components/openshift-sccאם השדה
components:עדיין מופיע כהערה, צריך לבטל את ההערה.overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yamlביטול סימון כהערה:# - ./components/openshift-sccאם השדה
components:עדיין מופיע כהערה, צריך לבטל את ההערה.
אחרי כן אפשר להמשיך לשלבי ההתקנה.
imagepullsecret
אפשר להפעיל את הרכיב הזה אם יש לכם תמונות שמאוחסנות במאגר פרטי. כדי לשלוף תמונות ממאגר פרטי, אפשר ליצור סוד של Kubernetes שיכלול את פרטי האימות שלכם, ואז להפנות לסוד הזה בתוך המאגר. הוראות מפורטות זמינות במאמר הגדרת imagePullSecrets (אופציונלי). מידע נוסף זמין במאמר שליפת תמונה ממאגר פרטי | Kubernetes במסמכי התיעוד של Kubernetes.
התוכנית זמינה במדינות הבאות:
overlays/controllers/apigee-controlleroverlays/controllers/istiodoverlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
הפעלה:
מבטלים את ההערה בשורה ./components/imagepullsecret/ בקובצי kustomization.yaml הרלוונטיים בכל מקום שנדרש.
שינויים לביצוע:
- components/imagepullsecret/patch.yaml
- חובה להוסיף את שמות הסודות הרלוונטיים לרשימה ב-
spec.template.spec.imagePullSecrets
- חובה להוסיף את שמות הסודות הרלוונטיים לרשימה ב-
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
nodeselector
הרכיב הזה מאפשר לתזמן פודים למשאב Apigee בצמתים ספציפיים. מידע נוסף זמין במאמר הקצאת פודים לצמתים | Kubernetes.
התוכנית זמינה במדינות הבאות:
overlays/controllers/apigee-controlleroverlays/controllers/istiodoverlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
הפעלה:
מבטלים את ההערה בשורה ./components/nodeselector בקובצי kustomization.yaml הרלוונטיים בכל מקום שנדרש.
שינויים לביצוע:
- components/nodeselector/patch.yaml
- אופציונלי: משנים את הערך של התווית של בורר הצמתים מ-
apigee-runtimeאו מ-apigee-dataלערך הרצוי.
- אופציונלי: משנים את הערך של התווית של בורר הצמתים מ-
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
workload-identity
למאגרי נתונים שונים במערכת האקולוגית של Apigee Hybrid נדרשות הרשאות כדי לבצע קריאות מסוימות ל-API במישור הבקרה או במישור הניהול של Apigee. זהות עומס העבודה היא אחת מהדרכים להעניק את ההרשאות האלה לפודים (ולקונטיינרים שבתוכם). הנה כמה מקורות מידע שימושיים לקריאה נוספת בנושא: – הצגת Workload Identity: אימות משופר לאפליקציות GKE | Google Cloud Blog – שימוש ב-Workload Identity | תיעוד של Kubernetes Engine | Google Cloud
התוכנית זמינה במדינות הבאות:
overlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
דרישה מוקדמת:
כדי להשתמש ב-Workload Identity, צריך להעניק את ההרשאות הרלוונטיות בפרויקט Google Cloud באמצעות:
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com
כאשר:
- ${ORG_NAME} – שם הארגון שלכם ב-Apigee.
- ${APIGEE_NAMESPACE} – מרחב השמות של Kubernetes שבו רכיבי Apigee הותקנו. בדרך כלל זה יהיה apigee, אלא אם המשתמש שינה את זה באופן מפורש במהלך ההתקנה.
- ${KSA_NAME} – שם מרחב השמות של Kubernetes. תצטרכו להריץ את הפקודה הזו לכל חשבון שירות של Kubernetes שמוזכר במאמר חשבונות שירות של Kubernetes.
- ${GSA_NAME} – שם חשבון השירות של Google Cloud. אם לא ביצעתם שינויים במהלך ההתקנה, הערך יהיה apigee-all-sa. אם הגדרתם כמה חשבונות שירות של Google Cloud לרכיבים נפרדים, תצטרכו להתאים את KSA_NAME ל-GSA_NAME המתאים. תוכלו להשוות בין הטבלאות במאמר חשבונות שירות של Google Cloud לבין הטבלאות במאמר חשבונות שירות של Kubernetes כדי למצוא את המקבילות.
הפעלה:
מבטלים את הסימון כהערה (uncomment) בשורה ./components/workload-identity בקובצי kustomization.yaml המתאימים בכל מקום שנדרש. שימו לב שבטלמטריה יש תוספים נפרדים של Workload Identity לרכיבי metrics ו-logger שאפשר להפעיל בנפרד.
שימוש:
- אם עדיין לא התקנתם את Hybrid, אתם יכולים פשוט להפעיל את זהות עומס העבודה כמו שמתואר בקטע הקודם ולהמשיך בהתקנה, שתשתמש אוטומטית בזהות עומס העבודה.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
http-proxy
אתם יכולים להגדיר שרת proxy בכל אחד מהרכיבים הבאים, כך שהתנועה של הרכיב הזה תעבור דרך שרת ה-proxy מסוג HTTP שהוגדר עבורו. אתם יכולים להגדיר את ה-proxy לכל רכיב של Apigee בנפרד.
התוכנית זמינה במדינות הבאות:
overlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/telemetry
הפעלה:
מבטלים את ההערה בשורה ./components/http-proxy/ בקובצי kustomization.yaml הרלוונטיים בכל מקום שנדרש.
שינויים לביצוע:
- components/http-proxy/patch.yaml
אפשר להגדיר את הפרמטרים הבאים בקטע
spec.httpForwardProxy-
scheme: חובה אחת מהאפשרויותHTTPאוHTTPS -
host: חובה כתובת המארח של השרת הפרוקסי -
port: חובה מספר היציאה -
username: אופציונלי שם המשתמש שמשויך לשרת הפרוקסי -
password: אופציונלי הסיסמה לגישה לשרת ה-proxy
-
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
כלי לרישום ביומן ומדדים
אפשר להפעיל או להשבית בנפרד את כלי הרישום או את המדדים בתוך overlays/instances/{INSTANCE_NAME}/telemetry. כברירת מחדל, רישום ביומן מושבת והמדדים מופעלים. כדי להפעיל או להשבית אותן, פשוט מבטלים את ההערה בשורות שלהן בקובץ telemetry/kustomization.yaml או מוסיפים הערה.
gcs-backup ו-gcs-restore
אפשר להשתמש ברכיב הזה של kustomize כדי לבצע גיבוי ושחזור של מסד הנתונים של Cassandra ב-Google Cloud Storage.
התוכנית זמינה במדינות הבאות:
overlays/instances/{INSTANCE_NAME}/datastore
דרישה מוקדמת:
מורידים את המפתחות של חשבונות השירות ב-Google Cloud לחשבון שיש לו את התפקיד 'אדמין של אובייקט אחסון'.
- אם השתמשתם בסקריפט כדי לבצע את ההתקנה ולא השתמשתם ב-Workload Identity, תוכלו להשתמש מחדש במפתחות שהורדתם. המפתחות האלה זמינים בתיקייה service-accounts שנוצרת על ידי הסקריפט.
אפשר גם להשתמש בסקריפט create-service-account.sh כדי ליצור חשבון שירות חדש ולהוריד את המפתחות שלו:
./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
אחרי שמורידים את המפתחות, צריך ליצור סוד ב-Kubernetes בשם apigee-cassandra-backup-and-restore-gcp-sa-key. אפשר לעשות זאת באמצעות הפקודה:
kubectl create secret generic "apigee-cassandra-backup-and-restore-gcp-sa-key" \ --from-file="dbbackup_key.json=${PATH_TO_SA_KEY}" \ -n "${APIGEE_NAMESPACE}"כאשר:
- ${PATH_TO_SA_KEY} – הנתיב לקובץ שמכיל את המפתחות של חשבון השירות.
- ${APIGEE_NAMESPACE} – מרחב השמות של Kubernetes שבו רכיבי Apigee הותקנו. בדרך כלל זה יהיה apigee, אלא אם משנים את זה במפורש במהלך ההתקנה
לחלופין, אפשר להשתמש בקובץ התבנית templates/secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml כדי ליצור את הסוד הזה.
הפעלה:
- כדי להפעיל גיבוי, צריך לבטל את ההערה בשורה './components/gcs-backup' בקובץ datastore kustomization.yaml.
- אם רוצים לשחזר גיבוי, צריך לבטל את ההערה בשורה './components/gcs-restore' בקובץ datastore kustomization.yaml.
שינויים לגיבוי בלבד
- components/gcs-backup/apigee-datastore-patch.yaml
- חובה לשנות את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים. התיאור תואם ל-dbStorageBucket כפי שמתואר כאן.
- components/gcs-backup/cron-patch.yaml
- חובה לשנות את spec.schedule כדי לציין את תדירות הגיבוי. השדה מקבל את פורמט התזמון הרגיל של Crontab. התיאור תואם ללוח הזמנים שמתואר כאן.
- חובה לשנות את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים. התיאור תואם ל-dbStorageBucket כפי שמתואר כאן.
- אופציונלי: משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS>:${HOST_PORT}
ביצוע גיבוי
כדי לבצע את הגיבוי, מריצים את הפקודה הבאה:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
כדי להחיל את השינויים ולהפעיל את הגיבוי:
שינויים לשחזור בלבד
- components/gcs-restore/apigee-datastore-patch.yaml
- חובה: משנים את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים. התיאור תואם ל-dbStorageBucket שמתואר כאן.
- components/gcs-restore/job-patch.yaml
- חובה: משנים את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים.
- חובה לשנות את הערך של משתנה הסביבה BACKUP_SNAPSHOT_TIMESTAMP. התיאור תואם לפעולת השחזור:snapshotTimestamp כפי שמתואר כאן.
- אופציונלי משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר.
הפורמט יכול להיות כזה:
http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}
ביצוע השחזור:
למידע נוסף על שחזור גיבויים, ראו שחזור גיבויים | Apigee X | Google Cloud
- יוצרים אשכול Kubernetes חדש עם מרחב שמות חדש שבו אפשר לשחזר את פריסת זמן הריצה ההיברידית. אי אפשר להשתמש באותו אשכול ובאותו מרחב שמות שבהם השתמשתם בהתקנה ההיברידית המקורית.
מתקינים את Hybrid באשכול החדש עם ההגדרות שהוגדרו למעלה, בנוסף לכל הגדרה אחרת שרוצים:
- אפשר להשתמש בהתקנה הבסיסית ולהתקין את הגרסה ההיברידית במרחב השמות החדש:
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}- אפשר גם לפעול לפי ההוראות להתקנה מותאמת אישית של Apigee Hybrid כדי להגדיר את הדברים לפי הבחירה שלכם.
אחרי שהשחזור מסתיים, אפשר למחוק את כל המשאבים במרחב השמות הישן ולעבור למרחב השמות החדש.
מידע נוסף זמין במאמר בנושא שחזור גיבויים.
non-gcs-backup ו-non-gcs-restore
אפשר להשתמש ברכיב הזה של kustomize כדי לבצע גיבוי ושחזור של מסד הנתונים של Cassandra ב-Google Cloud Storage.
התוכנית זמינה במדינות הבאות:
overlays/instances/{INSTANCE_NAME}/datastore
דרישה מוקדמת:
- אפשר להיעזר בשלבים שמופיעים במסמכי התיעוד הקיימים בנושא הגדרת השרת ו-SSH.
מהשלבים שלמעלה, תצטרכו להשתמש במפתח הפרטי של SSH שזמין בקובץ ssh_key שנוצר אחרי ביצוע השלבים הקודמים. לאחר מכן ניצור סוד של Kubernetes בשם apigee-cassandra-backup-and-restore-gcp-sa-key שמכיל את המפתח הפרטי הזה של SSH.
אפשר ליצור את הסוד של Kubernetes באמצעות הפקודה הבאה:
kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \ --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \ -n "${APIGEE_NAMESPACE}"כאשר:
- ${PATH_TO_SSH_PRIVATE_KEY} – הנתיב לקובץ שמכיל את המפתח הפרטי של SSH
- ${APIGEE_NAMESPACE} – מרחב השמות של Kubernetes שבו רכיבי Apigee הותקנו. בדרך כלל זה יהיה apigee, אלא אם משנים את זה במפורש במהלך ההתקנה
לחלופין, אפשר להשתמש בקובץ התבנית templates/secret-apigee-cassandra-backup-and-restore-key-file.yaml כדי ליצור את הסוד הזה.
הפעלה:
- כדי להפעיל גיבוי, צריך לבטל את ההערה בשורה
./components/non-gcs-backupבקובץ datastore kustomization.yaml. - כדי לשחזר גיבוי, צריך לבטל את ההערה בשורה
./components/non-gcs-restoreבקובץ datastore kustomization.yaml.
שינויים לגיבוי בלבד
- components/non-gcs-backup/apigee-datastore-patch.yaml
- חובה לשנות את הערך של BACKUP_SERVER_IP. התיאור תואם ל-BACKUP_SERVER_IP כפי שמתואר כאן.
- חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם ל-BACKUP_STORAGE_DIR כפי שמתואר כאן.
- components/non-gcs-backup/cron-patch.yaml
- חובה לשנות את spec.schedule כדי לציין את תדירות הגיבוי. השדה מקבל את פורמט התזמון הרגיל של Crontab. התיאור תואם ללוח הזמנים שמתואר כאן.
- חובה לשנות את הערך של BACKUP_SERVER_IP. התיאור תואם ל-BACKUP_SERVER_IP כפי שמתואר כאן.
- חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם ל-BACKUP_STORAGE_DIR כפי שמתואר כאן.
- אופציונלי: משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}
ביצוע גיבוי
כדי לבצע את הגיבוי, מריצים את הפקודה הבאה:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
כדי להחיל את השינויים ולהפעיל את הגיבוי:
שינויים לגיבוי בלבד
- components/non-gcs-restore/apigee-datastore-patch.yaml
- חובה לשנות את הערך של
BACKUP_SERVER_IP. התיאור תואם לBACKUP_SERVER_IPמה שמתואר כאן. - חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם ל
BACKUP_STORAGE_DIRמה שמתואר כאן.
- חובה לשנות את הערך של
- components/non-gcs-restore/job-patch.yaml
- חובה שינוי הערך של משתנה הסביבה
BACKUP_SNAPSHOT_TIMESTAMP. התיאור תואם ל-restore:snapshotTimestampכפי שמתואר כאן. - חובה לשנות את הערך של
BACKUP_SERVER_IP. התיאור תואם לBACKUP_SERVER_IPמה שמתואר כאן. - חובה לשנות את הערך של
BACKUP_STORAGE_DIR. התיאור תואם לBACKUP_STORAGE_DIRמה שמתואר כאן. - אופציונלי משנים את הערך של
HTTP_PROXY_URLכך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}http://${HOST_IP_ADDRESS}:${HOST_PORT}
- חובה שינוי הערך של משתנה הסביבה
ביצוע השחזור:
סקירה כללית על שחזור גיבויים זמינה במאמר סקירה כללית על שחזור של Cassandra.
- יוצרים אשכול Kubernetes חדש עם מרחב שמות חדש שבו אפשר לשחזר את פריסת זמן הריצה ההיברידית. אי אפשר להשתמש באותו אשכול ובאותו מרחב שמות שבהם השתמשתם בהתקנה ההיברידית המקורית.
מתקינים את Hybrid באשכול החדש עם ההגדרות שצוינו למעלה, בנוסף לכל הגדרה אחרת שרוצים: אפשר להשתמש בהתקנה הבסיסית ולהתקין את Hybrid במרחב השמות החדש:
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}אפשר גם לפעול לפי ההוראות להתקנה מותאמת אישית של Apigee Hybrid כדי להגדיר את הדברים לפי הבחירה שלכם.
אחרי שהשחזור מסתיים, אפשר למחוק את כל המשאבים במרחב השמות הישן ולעבור למרחב השמות החדש.
מידע נוסף זמין במאמר תזמון גיבויים בשרת מרוחק.
http-client
הוראות מפורטות מופיעות במאמר הפעלת לקוחות HTTP | Apigee.
התוכנית זמינה במדינות הבאות:
- overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}
הפעלה:
ביטול ההערה בשורה './components/http-client' בקובץ route-config/${ENV_GROUP}/kustomization.yaml המתאים
שינויים לביצוע:
- אין צורך לבצע שינויים חובה.
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
non-sni-client
מקביל למאמר הקיים How to configure a non-SNI client | Apigee.
התוכנית זמינה במדינות הבאות:
- overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}
הפעלה:
ביטול ההערה בשורה './components/non-sni-client' בקובץ route-config/${ENV_GROUP}/kustomization.yaml המתאים
שינויים לביצוע:
- components/non-sni-client/apigee-route.yaml
- חובה
credentialNameהתיאור תואם לcredential_nameמה שמתואר כאן.
- חובה
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
http-and-non-sni-client
הוראות מפורטות מופיעות במאמר הפעלת תמיכה בלקוחות HTTP ולקוחות שאינם SNI | Apigee.
הפעלה:
ביטול ההערה בשורה './components/http-and-non-sni-client' בקובץ route-config/${ENV_GROUP}/kustomization.yaml המתאים
שינויים לביצוע:
- components/http-and-non-sni-client/apigee-route.yaml
- חובה
credentialNameהתיאור תואם לcredential_nameמה שמתואר כאן.
- חובה
שימוש:
- אם עדיין לא התקנתם את Apigee Hybrid, אתם יכולים להמשיך בשלבי ההתקנה והשינויים האלה יחולו במהלך התהליך.
אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
במספר אזורים
אפשר להשתמש ברכיב הזה כשמגדירים פריסת Cassandra במספר אזורים. מידע נוסף זמין במאמר פריסה במספר אזורים ב-GKE וב-GKE On-Prem.
הפעלה:
ביטול ההערה בשורה './components/multi-region' בקובץ datastore/kustomization.yaml
שינויים לביצוע:
components/multi-region/cassandra-data-replication.yaml
- חובה
source.regionשם מרכז הנתונים של Cassandra שממנו יתבצע שחזור הנתונים. אפשר לזהות אותו באמצעות הפקודה הבאה באשכול המקור:
kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'- חובה
components/multi-region/patch.yaml
- חובה
spec.components.properties.multiRegionSeedHostכתובת ה-IP של ה-Pod של אחד מ-Pods של Cassandra של המקור. אנחנו יכולים להשתמש ב:
kubectl get pods -n ${APIGEE_NAMESPACE} -o wide- כדי לראות את רשימת כל הפודים ולקבל את כתובת ה-IP של פוד cassandra, משתמשים בפקודה הבאה:
kubectl get pods -o wide -n apigeeהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch- חובה
מידע נוסף זמין במאמר תנאים מוקדמים ל-GKE בקטע 'פריסה מרובת אזורים ב-GKE, ב-GKE on-prem וב-AKS'.
שימוש:
השימוש ברכיב הזה הגיוני בעיקר כשמגדירים את Apigee Hybrid באשכול חדש וכבר יש לכם הגדרה אחרת של Apigee Hybrid שפועלת.
- גם באשכול החדש וגם באשכול הקיים צריך להשתמש באותם אישורי TLS כדי להבטיח תקשורת תקינה בין רכיבי ה-pod של Cassandra. לכן נצטרך להעתיק את
apigee-root-certificateהסוד מהאשכול הקיים ולהשתמש בו גם באשכול החדש יותר: הרצה:
kubectl config get-contexts- כדי לקבל רשימה של כל ההקשרים של Kubernetes ואז להריץ
kubectl config use-context SOURCE_CLUSTER_CONTEXTכאשר SOURCE_CLUSTER_CONTEXT הוא השם של ההקשר של אשכול Kubernetes של המקור.
מאחסנים את הסוד של אישור הבסיס בקובץ:
kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yamlמעבירים את ההקשר של האשכול לאשכול החדש שבו מתקינים את Apigee Hybrid.
kubectl config use-context ${NEW_CLUSTER_CONTEXT}יוצרים את סוד הבסיס באשכול החדש:
kubectl -n cert-manager apply -f apigee-root-certificate.yamlמשביתים את היצירה של אישור בסיס חדש. כך נוודא שלא ניצור
apigee-root-certificateחדש ונדרוס את זה שיצרנו בשלב הקודם.מבטלים את ההערה בשורות הבאות בקובץ
overlays/initialization/certificates/kustomization.yaml:# components: # - ./components/disable-apigee-root-certificate-generationממשיכים עם שאר ההתקנה של Apigee Hybrid באמצעות התקנה בסיסית של Apigee Hybrid או התקנה מותאמת אישית של Apigee Hybrid. לדוגמה, אחרי התקנה בסיסית של Apigee Hybrid, אפשר להריץ את הפקודה:
./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATIONכדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.
kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status:
kubectl logs apigee-cassandra-default-0 -f -n ${APIGEE_NAMESPACE} kubectl exec apigee-cassandra-default-0 -n ${APIGEE_NAMESPACE} -- nodetool -u ${JMX_USER} -pw ${JMX_PASSWORD} statusכדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"התוצאות אמורות להיראות כך:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }אפשר לעיין גם במאמר בנושא פריסה במספר אזורים.
הסרת השורות הבאות מ-
components/multi-region/patch.yaml:properties: multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIREDמחילים את השינויים:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
מושגים
מרכז התמונות
בדרך כלל, קובצי אימג' של קונטיינרים של Docker מצוינים בפורמט:
${REGISTRY_HOST_PATH}/${IMAGE_NAME}:${IMAGE_TAG}
או כאלה שמשתמשים בתקציר שנראה כך:
${REGISTRY_HOST_PATH}/${IMAGE_NAME}@${DIGEST}
ב-Apigee משתמשים במושג Image Hub (מרכז תמונות), שמתייחס ל-${REGISTRY_HOST_PATH} בפורמטים שלמעלה. ערך ברירת המחדל של Image Hub הוא gcr.io/apigee-release/hybrid/.
(צריך להגדיר בנפרד כל תמונה שמשתמשת ב-DIGEST בכל רכיב משנה)
מערכת Apigee יוצרת את נתיב התמונה הסופי על ידי שילוב הערך של:
- Image Hub, שאפשר לשנות את ברירת המחדל שלו ב-apigee-hybrid-config.yaml (בקטע שימוש בתמונות Docker ממאגרים פרטיים מפורטים השלבים לשינוי ברירת המחדל של Image Hub).
- הערך של
IMAGE_TAGמתקבל מהשדהversion, שמופיע בקובץ ה-YAML של כל אחד מהרכיבים (לדוגמה, apigee-organization.yaml). Apigee מתייג את התמונות עם גרסת Apigee Hybrid – כלומר,IMAGE_TAGהיא 1.8 לגרסה 1.8 של Apigee Hybrid - הערך של
IMAGE_NAMEנקבע באופן מרומז משם הקונטיינר שבו ישמש האימג'. לדוגמה, במאגרapigee-runtime, הערך שלIMAGE_NAMEיהיה apigee-runtime.
לכן, דוגמה מלאה של נתיב תמונה תהיה gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0
כך נבנה נתיב התמונה הסופי, שייעשה בו שימוש בכל אחד מהקונטיינרים בתרמילים המתאימים.
חשבונות שירות ב-Google Cloud
חשבונות שירות של Google Cloud הם חשבונות שמשמשים אפליקציות כדי לבצע קריאות מורשות ל-Google APIs. אפשר להוריד מפתחות של חשבונות שירות של Google Cloud, ואז להשתמש בהם למטרות אימות. מערכת Apigee מצפה שהמשתמש יספק מפתחות של חשבונות שירות על ידי יצירת סודות. בהמשך מפורטים שמות הרכיבים ושם ברירת המחדל של הסוד שבו המערכת מחפשת מפתחות של חשבונות שירות:
| רכיב | רכיב משנה | שם ברירת המחדל של סוד Kubernetes שמכיל מפתח של חשבון שירות |
|---|---|---|
| ארגון | ||
| connectAgent | apigee-connect-agent-gcp-sa-key-${ORG_NAME} |
|
| צופה | apigee-watcher-gcp-sa-key-${ORG_NAME} |
|
| mart | apigee-mart-gcp-sa-key-${ORG_NAME} |
|
| udca | apigee-udca-gcp-sa-key-${ORG_NAME} |
|
| ingressGateways | לא רלוונטי | |
| environment | ||
| סביבת זמן ריצה | apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME} |
|
| udca | apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME} |
|
| כלי לסנכרון | apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME} |
|
| telemetry | ||
| מדדים | apigee-metrics-gcp-sa-key |
|
| containerLogs | apigee-logger-gcp-sa-key |
חשבונות שירות של Kubernetes
חשבונות שירות של Kubernetes מספקים זהויות לקבוצות Pod באשכול. כברירת מחדל, בקר Apigee יוצר אותם בשבילכם. אבל אם רוצים לבטל את היצירה (לדוגמה, כשמשתמשים בזהויות של עומסי עבודה), אפשר לעשות זאת על ידי ציון השדה podServiceAccountName ברכיבי המשנה השונים.
רשימה של רכיבים ורכיבי המשנה שלהם שבהם אפשר לציין את חשבון השירות של Kubernetes, יחד עם שם ברירת המחדל של חשבון השירות של k8s, כשמפעילים עבורם את תיקון הזהות של עומס העבודה.
| רכיב | רכיב משנה | שם ברירת המחדל (זמין אם הפעלתם תיקון של Workload Identity) |
|---|---|---|
| ארגון | ||
| connectAgent | apigee-connect-agent-svc-account-${ORG_NAME} |
|
| צופה | apigee-watcher-svc-account-${ORG_NAME} |
|
| mart | apigee-mart-svc-account-${ORG_NAME} |
|
| udca | apigee-udca-svc-account-${ORG_NAME} |
|
| environment | ||
| כלי לסנכרון | apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME} |
|
| udca | apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME} |
|
| סביבת זמן ריצה | apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} |
|
| datastore | ||
| cassandra | apigee-datastore-svc-account |
|
| telemetry | ||
| metricsApp | apigee-metricsApp-svc-account |
|
| metricsProxy | apigee-metricsProxy-svc-account |
|
| metricsAdapter | apigee-metricsAdapter-svc-account |
|
| containerLogs | apigee-container-logs-svc-account |
זהויות של עומסי עבודה
זהויות של עומסי עבודה מאפשרות לפודים (שמשתמשים בחשבונות שירות של Kubernetes) שפועלים ב-GKE לבצע אימות ישירות מול Google Cloud APIs בלי לדרוש מפתחות של חשבונות שירות ב-Google Cloud.
הוספת סביבה חדשה
.
├── ...
├── instances/instance1/components
│ ├── ...
│ ├── environments
│ │ ├── dev
│ │ │ └── apigee-environment.yaml
│ │ │ └── secrets.yaml
│ │ └── new-env-name (new)
│ │ └── apigee-environment.yaml (new)
│ │ └── secrets.yaml (new)
└── ...
הוספת סביבה חדשה היא פשוטה:
- יצירת תיקייה חדשה בתוך ספריית הסביבות (או בכל מבנה אחר של תיקיות)
- העתקת הקובץ
apigee-environment.yamlמכל סביבה קיימת לתיקייה החדשה. - אם רוצים ליצור חשבון שירות חדש ומפתחות הצפנה לסביבה החדשה, מעתיקים את
secrets.yamlלתיקייה החדשה ומשנים את השם של הסודות בהתאם כדי להבדיל אותם מהסביבות הקיימות האחרות (בדרך כלל עושים את זה על ידי הוספת שם הסביבה כסיומת). - ביצוע שינויים מתאימים ב
apigee-environment.yaml, כמו:- שינוי השם של הסביבה
- אם אתם מתכננים ליצור חשבונות שירות חדשים ומפתחות הצפנה חדשים, אתם צריכים לוודא שהם מופיעים בצורה נכונה בקובץ ה-YAML.
- החלת
yaml:
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml
שימוש במחיקה מאולצת ב-Apigee Datastore
אם מחיקת מאגר הנתונים לא מתקדמת מסיבה כלשהי, עכשיו אפשר למחוק את מאגר הנתונים של Apigee בכוח באמצעות הפקודות הבאות, ללא קשר למצב הנוכחי של האשכול.
מחיקת
apigeedsבמרחב השמותapigee:Kubectl delete -n apigee apigeeds defaultאם השלב הזה נתקע, אפשר לצאת ממנו באמצעות CTRL + C.
עריכת
apigeedsחדש:Kubectl edit -n apigee apigeeds defaultהוספה או עדכון של השדה forceDelete במפרט של מאגר הנתונים של Apigee
spec: forceDelete: trueשומרים את הקובץ ויוצאים.
עכשיו מחכים עד שמאגר הנתונים יימחק. יכול להיות שיעברו כמה דקות עד שכל משאבי Cassandra יימחקו.
הסבר על הסקריפט
סקריפט apigee-hybrid-setup.sh מבצע כמה בדיקות בסיסיות ועוזר לבצע באופן אוטומטי את השלבים שנדרשים אם רוצים לבצע התאמה אישית מפורטת יותר, כפי שמתואר במאמר התקנה מותאמת אישית של Apigee Hybrid. גם בהתקנה מותאמת אישית, אפשר להשתמש בסקריפט באופן חלקי כדי לבצע משימות מסוימות.
אפשר להריץ את הפקודה ./tools/apigee-hybrid-setup.sh --help כדי לראות רשימה של דגלים נתמכים ולקבל עזרה נוספת לגבי הסקריפט. בשלב הזה יש תמיכה בדגלים הבאים:
--namespaceכברירת מחדל, הסקריפט מתקין את כל הרכיבים במרחב השמותapigee. כדי לשנות את ההתנהגות הזו, מציינים את שם מרחב השמות באמצעות הדגל הזה.--orgמשמש לציון השם של הארגון ב-Apigee. אם לא מציינים שם, ברירת המחדל היא הפרויקט ב-Google Cloud שנבחר כרגע ב-gcloud--envgroupמשמש כדי לספק את השם של קבוצת הסביבות בארגון. אם לא מציינים שם, המערכת מנסה לשלוח שאילתה לממשקי ה-API של מישור הבקרה כדי לקבוע את השם של קבוצת הסביבות. אם נמצאות כמה קבוצות סביבות, המערכת מחזירה שגיאה והסקריפט יוצא.--envמשמש לציון שם הסביבה בארגון. אם לא מצוין שם, המערכת מנסה לשלוח שאילתה לממשקי ה-API של מישור הבקרה כדי לקבוע את שם הסביבה. אם נמצאות כמה סביבות או שהסביבה לא נכללת בקבוצת הסביבות, המערכת מחזירה שגיאה והסקריפט יוצא.--cluster-nameשם אשכול Kubernetes.--cluster-regionהאזור שבו נמצא אשכול Kubernetes-
--gcp-project-idמזהה הפרויקט ב-Google Cloud שבו קיים אשכול Kubernetes -
--ingress-domainמציין את שם המארח או שם הדומיין שישמשו ליצירת אישורי TLS בחתימה עצמית עבור istio ingress-gateway. אם לא מציינים ערך, המערכת מנסה לקבוע את הערך על ידי שליחת שאילתה לממשקי ה-API של מישור הבקרה כדי לקבל את הערך מקבוצת הסביבות. אם היו בעיות בקביעת envgroup או אם הוגדרו כמה שמות מארחים עבור envgroup, השגיאה מוחזרת והסקריפט יוצא. -
--generate-internal-tls-certsהמערכת תיצור סוד של Kubernetes בשם apigee-ca שמכיל אישור וזוג מפתחות שנוצרו על ידינו. --create-ingress-tls-certsייווצר סוד בשם{ORG_NAME}-{ENV_GROUP_NAME}(שנגזר משם הארגון ומשם קבוצת הסביבות) במרחב השמות istio-system, שיכיל אישור וצמד מפתחות שישמשו לתקשורת TLS. שם הדומיין שמשמש ליצירת האישורים האלה נגזר מהערך שמופיע בהגדרות של קבוצת הסביבות. במקרה של התנגשויות (למשל, אם נמצא כמה דומיינים), יוצגו הודעות שגיאה מתאימות.-
--create-gcp-sa-and-secretsיוצר חשבון שירות יחיד ב-Google Cloud בפרויקט בענן של Google, מוריד את המפתחות ואז יוצר את הסודות של Kubernetes שמכילים את המפתח. השמות של הסודות מופיעים בחשבונות שירות ב-Google Cloud. --fill-valuesמחליף את הערכים של org, env, envgroup ושמות אחרים בכל מקום שבו הם נדרשים בקובצי ה-YAML השונים.--apply-configurationהפקודה הזו תיצור את רשויות אישורי ההצפנה, הגדרות המשאבים בהתאמה אישית, ווּבּהוּקים, תפקידים ומשאב הבקרה. המשאבים ייווצרו בסדר הנכון והפקודה תיחסם עד שכולם יהיו תקינים.-- rename-directoriesמשנים את השם של הסביבה ושל קבוצת הסביבות לשמות של הסביבה הנכונה ושל קבוצת הסביבות הנכונה.--verboseהצגת פלט מפורט לניפוי באגים.--helpהצגת פרטי השימוש.-
--setup-allכל המשימות שאפשר לבצע באמצעות הסקריפט הזה יופעלו
מבנה התיקיות של הגדרת Apigee Hybrid
כברירת מחדל, התיקייה apigee-hybrid-setup כוללת את המבנה ההיררכי הבא:
.
├── bases
│ ├── controllers
│ │ ├── apigee-controller
│ │ │ ├── apigee-controller-deployment.yaml
│ │ │ └── kustomization.yaml
│ │ └── apigee-ingressgateway-manager
│ │ ├── apigee-ingressgateway-manager-deployment.yaml
│ │ └── kustomization.yaml
│ ├── datastore
│ │ └── backup-and-restore
│ │ ├── backup
│ │ │ ├── cronjob.yaml
│ │ │ └── kustomization.yaml
│ │ ├── common
│ │ │ ├── kustomization.yaml
│ │ │ ├── rbac.yaml
│ │ │ └── tls-certificate.yaml
│ │ └── restore
│ │ ├── job.yaml
│ │ └── kustomization.yaml
│ └── initialization
│ ├── certificates
│ │ ├── certificates-and-issuers.yaml
│ │ └── kustomization.yaml
│ ├── crds
│ │ ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│ │ └── kustomization.yaml
│ ├── openshift
│ │ ├── kustomization.yaml
│ │ └── scc.yaml
│ ├── rbac
│ │ ├── apigee-controller
│ │ │ ├── kustomization.yaml
│ │ │ └── rbac.yaml
│ │ └── apigee-embedded-ingress-controller
│ │ ├── cluster-role-bindings.yaml
│ │ ├── cluster-roles.yaml
│ │ ├── kustomization.yaml
│ │ └── service-account.yaml
│ └── webhooks
│ ├── kustomization.yaml
│ ├── mutatingwebhookconfiguration.yaml
│ └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
│ └── api_references
│ ├── v1alpha1.md
│ └── v1alpha2.md
├── kokoro
│ ├── build.sh
│ ├── common.cfg
│ ├── continuous.cfg
│ ├── presubmit.cfg
│ └── release.cfg
├── LICENSE
├── overlays
│ ├── controllers
│ │ ├── apigee-controller
│ │ │ ├── apigee-hybrid-config.yaml
│ │ │ ├── components
│ │ │ │ ├── imagepullsecret
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patch.yaml
│ │ │ │ └── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── kustomization.yaml
│ │ ├── apigee-ingressgateway-manager
│ │ │ ├── apigee-ingressgateway-manager-deployment-patch.yaml
│ │ │ ├── apigee-istio-mesh-config.yaml
│ │ │ ├── components
│ │ │ │ ├── imagepullsecret
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patch.yaml
│ │ │ │ └── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── kustomization.yaml
│ │ └── kustomization.yaml
│ ├── initialization
│ │ ├── certificates
│ │ │ ├── apigee-ingressgateway-manager-certificate-patch.yaml
│ │ │ ├── apigee-serving-cert-patch.yaml
│ │ │ ├── components
│ │ │ │ └── disable-apigee-root-certificate-generation
│ │ │ │ └── kustomization.yaml
│ │ │ └── kustomization.yaml
│ │ ├── crds
│ │ │ └── kustomization.yaml
│ │ ├── ingress
│ │ │ ├── envoyfilter-1.11.yaml
│ │ │ └── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── openshift
│ │ │ ├── kustomization.yaml
│ │ │ └── scc.yaml
│ │ ├── rbac
│ │ │ ├── apigee-controller
│ │ │ │ └── kustomization.yaml
│ │ │ ├── apigee-ingressgateway-manager
│ │ │ │ └── kustomization.yaml
│ │ │ └── kustomization.yaml
│ │ └── webhooks
│ │ ├── kustomization.yaml
│ │ ├── mutatingwebhookconfiguration.yaml
│ │ └── validatingwebhookconfiguration.yaml
│ └── instances
│ └── instance1
│ ├── datastore
│ │ ├── apigee-datastore.yaml
│ │ ├── components
│ │ │ ├── gcs-backup
│ │ │ │ ├── apigee-datastore-patch.yaml
│ │ │ │ ├── cron-patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── tls-certificate-patch.yaml
│ │ │ ├── gcs-restore
│ │ │ │ ├── apigee-datastore-patch.yaml
│ │ │ │ ├── job-patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── tls-certificate-patch.yaml
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── multi-region
│ │ │ │ ├── cassandra-data-replication.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── non-gcs-backup
│ │ │ │ ├── apigee-datastore-patch.yaml
│ │ │ │ ├── cron-patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── tls-certificate-patch.yaml
│ │ │ ├── non-gcs-restore
│ │ │ │ ├── apigee-datastore-patch.yaml
│ │ │ │ ├── job-patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── tls-certificate-patch.yaml
│ │ │ ├── openshift-scc
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── scc.yaml
│ │ │ └── workload-identity
│ │ │ ├── kustomization.yaml
│ │ │ ├── patch.yaml
│ │ │ └── service-accounts.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── environments
│ │ ├── kustomization.yaml
│ │ └── test
│ │ ├── apigee-environment.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── kustomization.yaml
│ │ │ ├── patch.yaml
│ │ │ └── service-accounts.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── kustomization.yaml
│ ├── organization
│ │ ├── apigee-organization.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── kustomization.yaml
│ │ │ ├── patch.yaml
│ │ │ └── service-accounts.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── redis
│ │ ├── apigee-redis.yaml
│ │ ├── components
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── kustomization.yaml
│ │ │ ├── patch.yaml
│ │ │ └── service-accounts.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── route-config
│ │ ├── kustomization.yaml
│ │ └── test-envgroup
│ │ ├── apigee-route-config.yaml
│ │ ├── components
│ │ │ ├── http-and-non-sni-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── http-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ └── non-sni-client
│ │ │ ├── apigee-route.yaml
│ │ │ └── kustomization.yaml
│ │ └── kustomization.yaml
│ └── telemetry
│ ├── apigee-telemetry.yaml
│ ├── components
│ │ ├── http-proxy
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── imagepullsecret
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── logger
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── metrics
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── nodeselector
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── openshift-scc
│ │ │ ├── kustomization.yaml
│ │ │ └── scc.yaml
│ │ ├── workload-identity-logger
│ │ │ ├── kustomization.yaml
│ │ │ ├── patch.yaml
│ │ │ └── service-accounts.yaml
│ │ └── workload-identity-metrics
│ │ ├── kustomization.yaml
│ │ ├── patch.yaml
│ │ └── service-accounts.yaml
│ └── kustomization.yaml
├── README.md
├── templates
│ ├── certificate-org-envgroup.yaml
│ ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
│ ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
│ ├── secret-gcp-sa-key.yaml
│ └── secret-ingress-tls-cert-key.yaml
└── tools
├── apigee-hybrid-setup.sh
├── apigee-pull-push.sh
├── common.sh
├── create-service-account.sh
└── dump_kubernetes.sh
גרסה של הקבצים שלמעלה זמינה בתג preview-1 במאגר GitHub בכתובת: https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1.
התיקייה שלמעלה מכילה מניפסטים של Kubernetes עבור זמן הריצה של Apigee hybrid, ומשתמשת ב-Kustomize לניהול התצורה. המניפסטים מאורגנים על סמך הרעיון של Kustomize bases & overlays. התיקייה bases מכילה את התצורה המינימלית הנדרשת לכל רכיב של Apigee. התיקייה overlays מכילה כמה תכונות נוספות(תצורות) שמוגדרות כרכיבים. אפשר להפעיל רכיב על ידי ביטול ההערה של הפניה לרכיב בקובץ kustomization.yaml.
דוגמה : כדי להפעיל את gcs-backup עבור מאגר הנתונים של Apigee, הרכיב gcs-backup בוטל כהערה בקובץ customization.yaml שמוצג בהמשך.
נתיב : ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml
namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}
resources:
- apigee-datastore.yaml
components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore
כל ערך שנדרש להתאמה אישית צריך להיות מוגדר בקובץ patch.yaml המתאים ל-gcs-backup.
בקובץ שלמטה, המשתמש צריך להגדיר את הערך של CLOUD_STORAGE_BUCKET_PATH
נתיב: $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: apigee-cassandra-backup
namespace: apigee
spec:
schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
jobTemplate:
spec:
template:
spec:
containers:
- name: apigee-cassandra-backup
env:
- name: APIGEE_CLOUDPROVIDER
value: "GCP"
- name: DATABASE_STORAGE_BUCKET
value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
volumeMounts:
- name: apigee-cassandra-backup
mountPath: /var/secrets/google
volumes:
- name: apigee-cassandra-backup
secret:
secretName: "apigee-cassandra-backup-and-restore-svc-account"
באופן דומה, אפשר להפעיל כל תכונה או הגדרה שדורשות התאמות אישיות על ידי ביטול ההערה של הרכיב בקובץ kustomization.yaml של רכיב apigee. בנוסף, צריך להגדיר את הערכים התואמים בשדות בקובץ patch.yaml של הרכיב בהתאם לדרישות.
הסבר קצר על התיקיות והקבצים:
bases
התיקייה הזו מכילה את התבניות עם הגדרות המינימום הנדרשות לכל אחד מרכיבי apigee. לא צריך לבצע שינויים במניפסטים בתיקייה הזו.
שכבות-על
התיקייה הזו מכילה את תבניות הרכיבים של kustomize להגדרות הנוספות
אתחול
namespaces.yaml
מרחב השמות שבו יותקנו רכיבי מישור הנתונים של Apigee. שם מרחב השמות שמוגדר כברירת מחדל הוא apigee
אישורים
מכיל את המשאבים Issuer ו-Certificate שמשמשים להנפקת אישורים ל-webhook. הוא מכיל גם את Issuer שמשמש להנפקת אישורים לפודים שונים לתקשורת TLS.
rbac
מכיל את Role, ClusterRole, RoleBinding ו-ClusterRoleBinding שישמשו רכיבים שונים.
crds
Contains the definition of all the CRDs which are used by Apigee.
תגובות לפעולה מאתר אחר (webhook)
מכיל את ValidatingWebhookConfiguration וMutatingWebhookConfiguration שישמשו לביצוע אימותים במשאבים בהתאמה אישית.
תעבורת נתונים נכנסת (ingress)
מכיל הגדרה שרלוונטית לכל ה-POD-ים של Ingress. למשל, שינוי נפוץ בכותרת, בדיקת תקינות וכו'.
openshift
מכיל את ההגדרה של SecurityContextConstraints ב-OpenShift.
שלטים רחוקים
apigee-controller
apigee-hybrid-config.yaml
מכיל ConfigMap שמועבר כקלט ב-apigee-controller-manager.yaml. ה-ConfigMap הזה מכיל הגדרות כמו imageHub, imagePullSecrets, forwardProxy ועוד.
apigee-controller-deployment.yaml
הקובץ מכיל שני שירותים בשביל בקר ו-webhook, ופריסה בשביל הבקר. אם רוצים להשתמש בתמונה פרטית בשביל הבקר, זה המקום שבו צריך לבצע את השינוי.
istiod
Apigee-istio-mesh-config.yaml מכיל את הגדרת הרשת של Istio שמשמשת את Apigee. ההגדרה הזו לא רלוונטית להתקנות אחרות של ASM/Istio באשכול.
apigee-ingressgateway-manager-deployment-patch.yaml
מכיל שירות ופריסה של Istiod. זהו istiod פרטי שמשמש רק לתרחישי שימוש של Apigee.
instances/{instanceName}
מאגר נתונים
apigee-datastore.yaml
מכיל את המשאב המותאם אישית ApigeeDatastore שמנהל את Cassandra.
secrets.yaml
מכיל פרטי כניסה שמוגדרים כברירת מחדל למאגר נתונים.
redis
apigee-redis.yaml
מכיל את המשאב המותאם אישית ApigeeRedis שמנהל את Redis.
secrets.yaml
מכיל פרטי כניסה שמוגדרים כברירת מחדל למאגר נתונים.
ארגון
apigee-organization.yaml
הוא מכיל את ApigeeOrganization המשאב המותאם אישית שמנהל רכיבי משנה אחרים כמו connectAgent, watcherAndSynchronizer, MART, UDCA ו-Ingress.
secrets.yaml
מכיל את Secret שאליהם יש הפניה בקובץ apigee-organization.yaml. חלק מהסודות מופיעים כהערות כי הם נוצרים על ידי הסקריפט. אם משביתים את היצירה שלהם, צריך ליצור אותם באופן ידני
environments
כוללת את כל הסביבה בארגון. כדאי ליצור תיקייה נפרדת לכל סביבה על ידי העתקת התיקייה שכבר סופקה לכם והגדרתה בהתאם לדרישות.
dev
apigee-environment.yaml
מכיל את המשאב המותאם אישית ApigeeEnvironment שמנהל רכיבי משנה אחרים כמו זמן ריצה.
secrets.yaml
מכיל את Secrets שאליהם יש הפניה ב-apigee-environment.yaml. חלק מהסודות מופיעים כהערות כי הם נוצרים על ידי הסקריפט. אם משביתים את היצירה שלהם, צריך ליצור אותם באופן ידני.
טלמטריה
apigee-telemetry.yaml
מכיל את המשאב המותאם אישית ApigeeTelemetry.
secrets.yaml
הקובץ מכיל את Secret שאליהם יש הפניה ב-apigee-telemetry.yaml. חלק מהסודות מופיעים כהערות כי הם נוצרים על ידי הסקריפט. אם משביתים את היצירה שלהם, צריך ליצור אותם באופן ידני.
route-config
dev-envgroup
apigee-route-config.yaml
מכיל את המשאב המותאם אישית ApigeeRouteConfig.
secrets.yaml
מכיל Secret שאליו יש הפניה ב-apigee-route-config.yaml. השורה הזו מופיעה כהערה כי היא נוצרת אוטומטית על ידי הסקריפט apigee-hybrid-setup.sh, והיא נשמרת שם כדי לספק דוגמה לאופן שבו הסוד צריך להיראות אם יוצרים אותו ידנית.
אבחון
diagnostic-collector.yaml
מקורות מידע שישמשו להפעלת פריסת האבחון
כלים
apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh
אחסון מפתחות של חשבונות שירות בכספות חיצוניות
Vault (של Hashicorp) היא מערכת פופולרית לניהול סודות, שיש לה כמה שילובים עם מאגרי סודות שסופקו על ידי Google, Azure, AWS ואחרים. מערכת Hashicorp Vault מאפשרת לאחזר סודות ממקור חיצוני ואז להשתמש בהם במשאבי Kubernetes. יש כמה דרכים להשתמש ב-Vault כדי לאחזר סודות. השלבים הבאים ישמשו כדוגמה בסיסית לשימוש ב-Vault CSI Provider כדי לטעון מפתחות של חשבונות שירות ב-Google Cloud שמאוחסנים במנוע סודות כלשהו שסופק על ידי Vault.
- נשתמש ב-Helm כדי להתקין משאבים שקשורים ל-Vault באשכול. פועלים לפי השלבים במאמר התקנת Helm כדי להגדיר את Helm במערכת.
פועלים לפי השלבים במאמר בנושא התקנה של תרשים Vault Helm, כלומר:
הוספת מאגר Hashicorp ל-Helm
helm repo add hashicorp https://helm.releases.hashicorp.comעדכון מאגרי Helm
helm repo updateהתקנת Vault
helm install vault hashicorp/vault \ --set "server.dev.enabled=true" \ --set "injector.enabled=false" \ --set "csi.enabled=true"
עכשיו נשמור את הסוד ב-Vault.
קבלת מעטפת בתוך סביבת הפיתוח של הכספת
kubectl exec -it vault-0 -- /bin/sh ```בדוגמה הזו נשתמש במנוע הסודות של מפתח/ערך לאחסון נתונים.
vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"כדי לוודא שהמפתח נשמר, משתמשים בפקודה:
vault kv get secret/runtime-gcp-sa-key
מגדירים אימות כדי לאפשר לקבוצת ה-Pod של זמן הריצה למשוך את המפתח. כמו שמוסבר במאמר חשבונות שירות ב-Kubernetes, חשבונות שירות ב-Kubernetes מספקים זהות לקבוצות Pod ומאפשרים להן לבצע אימות מול מערכות אחרות.
קבלת מעטפת בתוך סביבת הפיתוח של הכספת
kubectl exec -it vault-0 -- /bin/shהפעלת שיטת אימות Kubernetes
vault auth enable kubernetesכתיבת הגדרות האימות
vault write auth/kubernetes/config \ issuer="https://kubernetes.default.svc.cluster.local" \ token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \ kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \ kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \ disable_iss_validation=trueיצירת מדיניות אימות
vault policy write apigee-runtime-app - <<EOF path "secret/data/runtime-gcp-sa-key" { capabilities = ["read"] } EOFקישור המדיניות לחשבון השירות
vault write auth/kubernetes/role/apigee-runtime-role \ bound_service_account_names=apigee-runtime-sa \ bound_service_account_namespaces=${APIGEE_NAMESPACE} \ policies=apigee-runtime-app \ ttl=20m
בדוגמה הזו, אנחנו מניחים שחשבון השירות נמצא במרחב השמות apigee. אם יש לכם מרחב שמות אחר להתקנת apigee, תשתמשו בשם הזה.
יציאה מהמעטפת בתוך vault-0
exit
התקנה של דרייבר CSI של מאגר סודות
# Add repo to helm helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts # Install driver in cluster helm install csi secrets-store-csi-driver/secrets-store-csi-driverיצירת משאב
SecretProviderClasskubernetes שמפנה אל הסוד שיצרתם ב-Vaultcat > spc-vault.yaml <<EOF apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: vault-apigee-runtime-gcp-sa-key spec: provider: vault parameters: vaultAddress: "http://vault.default:8200" roleName: "apigee-runtime-role" objects: | - objectName: "client_secret.json" secretPath: "secret/data/runtime-gcp-sa-key" secretKey: "key" EOFהחלת
yamlkubectl apply -f spc-vault.yamlיוצרים את חשבון השירות של Kubernetes שהקצנו לו את ההרשאות בשלב (4.ה)
kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-saמשנים את הקובץ apigee-environment.yaml של הסביבה ומוסיפים את השורות הבאות:
apiVersion: apigee.cloud.google.com/v1alpha2 kind: ApigeeEnvironment # existing content spec: name: {ENV_NAME} organizationRef: {ORG_NAME} components: runtime: # existing content pod containers: - name: apigee-runtime podServiceAccountName: apigee-runtime-sa # existing content volumeMounts: - name: secrets-store-inline mountPath: "/opt/apigee/sa" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "vault-apigee-runtime-gcp-sa-key"מחילים את השינויים:
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
שדרוג של Apigee Hybrid
צריך לוודא שכל הדרישות שצוינו בקטע דרישות מוקדמות מתקיימות. בנוסף, מומלץ לבצע הפעלה מחדש מתגלגלת של כל הרכיבים כדי לבדוק שהאשכול תקין. סדר ההפעלות מחדש הוא Cassandra, Redis, ApigeeOrganization ו-ApigeeEnvironment.
יצירת גיבוי
יוצרים עותק גיבוי של ההגדרה ההיברידית הנוכחית. תצטרכו גיבוי אם תרצו לבטל את השדרוג ולחזור לגרסה הנוכחית.
tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIRיצירת גיבוי של מסד נתונים של Cassandra. גיבויים של Cassandra הם אמצעי חשוב להגנה מפני תרחישי אסון.
שדרוג פלטפורמת Kubernetes לפי הצורך
לא צריך לבצע את השלב הזה בכל פעם, אבל תצטרכו לשדרג את פלטפורמת Kubernetes, כמו Kubernetes, OpenShift ורכיבים כמו cert-manager, Cassandra וכו', אם אין יותר תמיכה בגרסה שלהם בגרסה חדשה יותר של Apigee Hybrid. במסמכי התיעוד יופיעו גרסאות נתמכות של פלטפורמות ורכיבים.
הורדת קובצי ההגדרה
מורידים את המאגר ומחליפים את התיקייה bases ואת התיקייה tools בהגדרת apigee hybrid הקיימת בתיקייה חדשה יותר:
משכפלים את התג preview-1 של מאגר GitHub בכתובת
https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1למאגר המשוכפל יהיה מבנה שדומה לזה שמתואר במאמר מבנה התיקיות של Apigee Hybrid:
להחליף את התיקייה של האתחול, הכלים והבקר בהגדרת apigee hybrid הקיימת.
export HYBRID_INSTALL_HOME=PATH_TO_PREVIOUS_HYBRID_INSTALL_DIRECTORY mv -f bases $HYBRID_INSTALL_HOME/bases mv -f tools $HYBRID_INSTALL_HOME/tools
עדכון ההרשאות לחשבון השירות, אם צריך
גם את השלב הזה לא צריך לבצע בכל פעם, אבל אם צריך, צריך ליצור חשבון שירות חדש או לעדכן את ההרשאות של חשבונות שירות קיימים. במדריך השדרוג מפורט אילו חשבונות שירות צריך לשנות או ליצור, ואילו תפקידים צריך להוסיף.
אם צריך לשנות את ההרשאות של חשבונות שירות קיימים, משתמשים בפקודה המתאימה
gcloud. במדריך השדרוג מפורטות הפקודות והתפקידים שצריך להוסיף.gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-component@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/$NEW_ROLE"אם יכול להיות שבגרסה החדשה יותר של Apigee Hybrid יידרש חשבון שירות נוסף לרכיבים חדשים או קיימים, תצטרכו ליצור אותם. אתם יכולים להשתמש בסקריפט
apigee-create-service-account.shשנשלח בתיקיית הכלי כדי ליצור חשבונות שירות חדשים. הסקריפט כבר יעודכן כחלק משלב 4, כך שהוא יכלול פרטים ופרופיל חדש שנדרשים לחשבון שירות חדש שצריך ליצור.צריך להפנות לשם של חשבון השירות שנוצר זה עתה ברכיב CR המתאים.
./tools/create-service-account --env prod --profile apigee-component
שדרוג שלט
משנים את שדות הגרסה של הרכיבים שמופיעים ב-${INSTALL_DIR}/overlays/instances/$INSTANCE_DIR/kustomization.yaml לגרסה ההיברידית הרלוונטית.
זו דוגמה לקובץ $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/kustomization.yaml. צריך לעדכן את הערך של שדה הגרסה לגרסה הרלוונטית
resources:
- datastore/
- environments/
- organization/
- redis/
- route-config/
- telemetry/
patches:
- target:
group: apigee.cloud.google.com
version: v1alpha1
kind: ApigeeDatastore
patch: |-
- op: add
path: /spec/version
value: 1-6-1 (Modify the version)
- target:
group: apigee.cloud.google.com
version: v1alpha2
kind: ApigeeEnvironment
patch: |-
- op: add
path: /spec/version
value: 1-6-1 (Modify the version)
פועלים לפי אותם השלבים שמפורטים במאמר יצירת משאבי אתחול ובקר בתהליך העבודה של התקנת apigee hybrid. אפשר להשתמש בסקריפט או לפעול לפי השלבים הידניים שמפורטים במאמר כדי לשדרג את משאבי האתחול ואת הבקר.
עדכון רכיבי Apigee Kubernetes
תצטרכו לבצע את השינויים הבאים: – במקרה של שינויים בארכיטקטורה, הוספה של שדות חדשים או הוצאה משימוש של שדות ישנים, תצטרכו לשנות את בקשות ה-CR בהתאם להוראות במדריך השדרוג. – לפחות צריך לעדכן את שדות הגרסה ב-CR (שיציינו את הגרסה של Apigee Hybrid שהותקנה) לגרסה החדשה יותר של Apigee Hybrid.
מחילים את השינויים על CR של apigee. בסביבה שאינה סביבת ייצור, אפשר להחיל את כל השינויים על רכיבי apigee בו-זמנית.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
החזרה לגרסה קודמת ב-Apigee Hybrid
שחזור של apigee-hybrid-setup
עוברים לספרייה שמכילה את הגרסה הקודמת של הגדרת apigee hybrid. אם היא לא זמינה, משחזרים אותה מקובץ ה-ZIP שנוצר בשלב 1[link] במהלך השדרוג של apigee hybrid.
ביטול שינויים ברכיבי Kubernetes
החלת השינויים ב-CR של apigee
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}Rollback controller
פועלים לפי אותם השלבים שמופיעים בקטע על יצירת משאבי אתחול ובקר בתהליך העבודה של התקנת Apigee Hybrid. אפשר להשתמש בסקריפט או לפעול לפי השלבים הידניים שמופיעים במאמר כדי לבטל את השינויים שבוצעו במשאבי האתחול ובבקר.
הסרת המשאבים
תצטרכו לנקות את כל המשאבים הנוספים החדשים שנוצרו במהלך השדרוג, כמו רכיבים חדשים או חשבונות שירות שהוצגו בגרסה החדשה יותר של ההיברידי. מדריך השדרוג יכלול את כל המשאבים שצריך לנקות ואת השלבים לניקוי שלהם.
מחיקת סביבה
כדי למחוק את כל המשאבים שקשורים לסביבה מאשכול Kubernetes:
מקבלים את השם של CR הסביבה. כדי לעשות את זה, צריך לאחזר את כל הסביבות:
kubectl get env -n ${APIGEE_NAMESPACE}מאחסנים את שם המשאב במשתנה הסביבה
APIGEE_ENV.מוחקים את מפתחות ההצפנה של הסביבה. לדוגמה, אם לא שיניתם את השם של מפתחות ההצפנה, אתם יכולים למחוק אותם באמצעות הפקודה:
kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keysמחיקה של סודות של חשבון שירות ב-Google Cloud:
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')מחיקה של חשבונות שירות ב-Kubernetes:
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')מוחקים את המשאב המותאם אישית של סביבת Apigee:
kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
מחיקת הגדרה היברידית
כדי למחוק את כל המשאבים שקשורים ל-Apigee Hybrid מאשכול Kubernetes:
תצטרכו למחוק את המשימות של הגדרת המשתמשים ושל הגדרת הסכימה ב-Apigee.
# To list all jobs in ${APIGEE_NAMESPACE} kubectl -n ${APIGEE_NAMESPACE} get jobs # To delete all jobs in ${APIGEE_NAMESPACE} kubectl -n ${APIGEE_NAMESPACE} delete jobs $(kubectl -n ${APIGEE_NAMESPACE} get jobs -o custom-columns=':.metadata.name')תצטרכו למחוק את רכיבי מישור הנתונים של apigee hybrid שנפרסו. כדי למחוק את כל הרכיבים, משתמשים בפקודה הבאה:
kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAMEהשלב הזה נדרש רק אם לא הסתמכתם על שם ברירת המחדל של סודות חשבון השירות של Kubernetes, סודות חשבון השירות של Google Cloud וכו'. אם הסתמכתם על שמות ברירת המחדל, הם יימחקו בשלב הבא. אחרת, תצטרכו למחוק אותם באופן ידני באמצעות הפקודות הבאות:
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}') kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')במקרה של OpenShift, צריך למחוק את scc (הגבלות הקשר של האבטחה) שנוצרו במהלך ההתקנה של apigee hybrid.
kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}מריצים את הפקודה שלמטה כדי למחוק תפקידים, קישורי תפקידים, CRD, פריסות של בקרי וכו'.
kubectl delete -k ${INSTALL_DIR}/overlays/initialization/ingress kubectl delete -k ${INSTALL_DIR}/overlays/initialization/rbac kubectl delete -k ${INSTALL_DIR}/overlays/initialization/webhooks kubectl delete -k ${INSTALL_DIR}/overlays/initialization/crds kubectl delete -k ${INSTALL_DIR}/overlays/initialization/certificatesמריצים את הפקודה הבאה כדי למחוק את מרחב השמות apigee
kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yamlאפשר גם להשתמש בפקודה:
kubectl delete $APIGEE_NAMESPACE
התקנה של כמה מופעים
הגדרה של כמה מופעים מתייחסת להגדרה היברידית שיכולה להתפרס על פני כמה אזורים או בתוך אותם אזורים. מומלץ לארגן את ההגדרות של המופע השני במבנה ספריות נפרד,כי הגדרות הסביבה (עותקים משוכפלים וכו') שונות תמיד בין המופעים. ההגדרות של כל מופע מופרדות ומאורגנות באופן עצמאי במבני התיקיות המתאימים.
לדוגמה – בהגדרה של Active-Passive בתרחיש של כמה אזורים, יכול להיות שתרצו להגדיר אזור שני במצב המתנה פעיל עם גדלים והגדרות שונים.
במבנה התיקיות שבהמשך, אפשר ליצור עותק של ספריית instance1 בשם instance2 ולשנות את ההגדרות של מאגר הנתונים והתעבורה הנכנסת לפי הצורך.
apigee-hybrid-setup מבנה התיקיות להגדרה של כמה מופעים.]
.
├── bases
│ ├── controllers
│ │ ├── apigee-controller
│ │ │ ├── apigee-controller-deployment.yaml
│ │ │ └── kustomization.yaml
│ │ └── istiod
│ │ ├── apigee-ingressgateway-manager-deployment.yaml
│ │ └── kustomization.yaml
│ └── initialization
│ ├── certificates
│ │ ├── certificates-and-issuers.yaml
│ │ └── kustomization.yaml
│ ├── crds
│ │ ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│ │ ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│ │ └── kustomization.yaml
│ ├── ingress
│ │ ├── envoyfilter-1.11.yaml
│ │ └── kustomization.yaml
│ ├── openshift
│ │ ├── kustomization.yaml
│ │ └── scc.yaml
│ ├── rbac
│ │ ├── apigee-controller
│ │ │ ├── kustomization.yaml
│ │ │ └── rbac.yaml
│ │ └── apigee-embedded-ingress-controller
│ │ ├── cluster-role-bindings.yaml
│ │ ├── cluster-roles.yaml
│ │ ├── kustomization.yaml
│ │ └── service-account.yaml
│ └── webhooks
│ ├── kustomization.yaml
│ ├── mutatingwebhookconfiguration.yaml
│ └── validatingwebhookconfiguration.yaml
├── instances
│ └── instance1 (Add the 2nd instance under instances directory similar to instance1)
│ ├── datastore
│ │ ├── apigee-datastore.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── environments
│ │ ├── kustomization.yaml
│ │ └── test
│ │ ├── apigee-environment.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── kustomization.yaml
│ ├── organization
│ │ ├── apigee-organization.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── redis
│ │ ├── apigee-redis.yaml
│ │ ├── components
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── route-config
│ │ ├── kustomization.yaml
│ │ └── test-env-group
│ │ ├── apigee-route-config.yaml
│ │ ├── components
│ │ │ ├── http-and-non-sni-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── http-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ └── non-sni-client
│ │ │ ├── apigee-route.yaml
│ │ │ └── kustomization.yaml
│ │ └── kustomization.yaml
│ └── telemetry
│ ├── apigee-telemetry.yaml
│ ├── components
│ │ ├── http-proxy
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── imagepullsecret
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── logger
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── metrics
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── nodeselector
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── workload-identity-logger
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ └── workload-identity-metrics
│ │ ├── apigee-workload-identities.yaml
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ └── kustomization.yaml
├── overlays
│ ├── controllers
│ │ ├── apigee-controller
│ │ │ ├── apigee-hybrid-config.yaml
│ │ │ ├── components
│ │ │ │ ├── imagepullsecret
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patch.yaml
│ │ │ │ └── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── kustomization.yaml
│ │ ├── istiod
│ │ │ ├── apigee-ingressgateway-manager-deployment-patch.yaml
│ │ │ ├── apigee-istio-mesh-config.yaml
│ │ │ ├── components
│ │ │ │ ├── imagepullsecret
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patch.yaml
│ │ │ │ └── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── kustomization.yaml
│ │ └── kustomization.yaml
│ ├── initialization
│ │ ├── certificates
│ │ │ ├── apigee-ingressgateway-manager-certificate.yaml
│ │ │ └── kustomization.yaml
│ │ ├── crds
│ │ │ └── kustomization.yaml
│ │ ├── ingress
│ │ │ └── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── openshift
│ │ │ ├── kustomization.yaml
│ │ │ └── scc.yaml
│ │ ├── rbac
│ │ │ ├── apigee-controller
│ │ │ │ └── kustomization.yaml
│ │ │ ├── apigee-embedded-ingress-controller
│ │ │ │ └── kustomization.yaml
│ │ │ └── kustomization.yaml
│ │ └── webhooks
│ │ ├── kustomization.yaml
│ │ ├── mutatingwebhookconfiguration.yaml
│ │ └── validatingwebhookconfiguration.yaml
│ └── instances
│ └── instance1
│ ├── datastore
│ │ ├── apigee-datastore.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── openshift-scc
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── scc.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── environments
│ │ ├── kustomization.yaml
│ │ └── test
│ │ ├── apigee-environment.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── kustomization.yaml
│ ├── organization
│ │ ├── apigee-organization.yaml
│ │ ├── components
│ │ │ ├── http-proxy
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── redis
│ │ ├── apigee-redis.yaml
│ │ ├── components
│ │ │ ├── imagepullsecret
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ ├── nodeselector
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patch.yaml
│ │ │ └── workload-identity
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── kustomization.yaml
│ │ └── secrets.yaml
│ ├── route-config
│ │ ├── kustomization.yaml
│ │ └── test-envgroup
│ │ ├── apigee-route-config.yaml
│ │ ├── components
│ │ │ ├── http-and-non-sni-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── http-client
│ │ │ │ ├── apigee-route.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ └── non-sni-client
│ │ │ ├── apigee-route.yaml
│ │ │ └── kustomization.yaml
│ │ └── kustomization.yaml
│ └── telemetry
│ ├── apigee-telemetry.yaml
│ ├── components
│ │ ├── http-proxy
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── imagepullsecret
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── logger
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── metrics
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── nodeselector
│ │ │ ├── kustomization.yaml
│ │ │ └── patch.yaml
│ │ ├── openshift-scc
│ │ │ ├── kustomization.yaml
│ │ │ └── scc.yaml
│ │ ├── workload-identity-logger
│ │ │ ├── apigee-workload-identities.yaml
│ │ │ └── kustomization.yaml
│ │ └── workload-identity-metrics
│ │ ├── apigee-workload-identities.yaml
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ └── kustomization.yaml
├── README.md
├── templates
│ ├── ingress-certificate.yaml
│ ├── ingress-cert-secret.yaml
│ └── service-account-key-secret.yaml
└── tools
├── apigee-hybrid-setup.sh
├── common.sh
├── create-service-account.sh
└── dump_kubernetes.sh
הגדרה של כמה מופעים ב-GKE
דרישות מוקדמות
לפני שמגדירים כמה מופעים של היברידי, צריך לוודא שבוצעו הפעולות הבאות:
- הגדרת אשכולות Kubernetes בכמה אזורים(זהים או שונים) עם בלוקים שונים של CIDR
- הגדרת תקשורת בין אזורים
- פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים (יכול להיות שפורט 7000 ישמש כאפשרות גיבוי במהלך פתרון בעיות). אפשר לעיין גם במאמר בנושא הגדרת פורטים.
אפשר להשתמש בכלי כמו ntpdate כדי לוודא שהשעות בשרת מסונכרנות.
הגדרת מארח הזרעים במספר אזורים
- יוצרים עותק של התיקייה $INSTANCE_NAME מהמופע הקיים ומוסיפים אותו לתיקיית המופעים.
- אם הערך בשדה של מרחב השמות שונה ממרחב השמות של instance1, משנים אותו.
- כדי לשנות את הגדרות הכניסה למופע השני, פועלים לפי השלבים שמפורטים במאמר בנושא ציון אישורי TLS לכניסה.
מידע על הגדרת כתובת ה-IP של מאזן העומסים עבור המופע השני זמין במאמר בנושא ניהול שער כניסה של Apigee.
הגדרת ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed
kubectl config use-context original-cluster-nameמריצים את פקודת kubectl הבאה כדי לזהות כתובת של מארח seed ל-Cassandra באזור הנוכחי.
kubectl get pods -o wide -n apigee -l app=apigee-cassandraכל אחת מכתובות ה-IP של ה-Pod שמוחזרות מהפקודה הקודמת יכולה להיחשב כמארח ה-seed הרב-אזורי.
במופע השני, מגדירים את הערך של multiRegionSeedHost ב-CR של מאגר הנתונים של apigee ב-${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml
הגדרת המופע החדש
הגדרת ההקשר לאשכול הקיים
kubectl config use-context existing-cluster-nameייצוא הסוד apigee-ca לקובץ
kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yamlמגדירים את ההקשר לשם האשכול של האזור החדש:
kubectl config use-context NEW_CLUSTER_NAMEייבוא הסוד לאשכול החדש
kubectl -n cert-manager apply -f apigee-root-certificate.yamlמתקינים את Hybrid במכונה (באזור) החדשה לפי השלבים שמפורטים במאמר יצירת משאבי אתחול ובקר.
מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים. מריצים את הפקודה הבאה כדי לקבל את apigeeorg מהאשכול:
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"יוצרים קובץ YAML של משאב מותאם אישית לשכפול נתונים של Cassandra. הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיה datareplication.yaml. הקובץ צריך להכיל את הפרטים הבאים
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGIONכאשר:
- REGION_EXPANSION הוא השם שאתם נותנים למטא-נתונים האלה. אפשר לבחור שם כמו cassandra-data-replication
- NAMESPACE הוא אותו מרחב שמות שנבחר למופע השני. בדרך כלל זה 'apigee'.
- APIGEEORG_VALUE הוא ערך הפלט מהפקודה kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" בשלב הקודם.
- SOURCE_REGION הוא הערך של מרכז הנתונים של Cassandra מסטטוס כלי הצומת מאשכול המקור.
מפעילים את CassandraDataReplication באמצעות הפקודה הבאה:
kubectl apply -f datareplication.yamlכדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"התוצאה אמורה להיראות בערך כך
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }בודקים את תהליכי הבנייה מחדש מהיומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה nodetool status:
kubectl logs apigee-cassandra-default-0 -f -n apigeeהפניה אל datastore/secrets.yaml עבור JMX_user ו-JMX_password
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password statusמסירים את
multiRegionSeedHostמה-CR של מאגר הנתונים של Apigee ומריצים את הפקודה שלמטה כדי להחיל את השינויkubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastoreבדיקת הסטטוס של אשכול Cassandra
הפקודה הבאה שימושית כדי לראות אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password statusDatacenter: us-central1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
פתרון בעיות
מדריך לתמיכה, לאבחון ולפתרון בעיות
ניקוי ידני אחרי שימוש ב-forceDelete בהגדרה של Apigee Hybrid בכמה אזורים
- בדוגמה הבאה יש 2 אזורים –
us-east1ו-us-west1. - באזור
us-west1, מאגר הנתונים של Apigee נמחק באמצעות מחיקה בכוח. - באזור
us-east1, Cassandra עדיין פועלת. אימות המחיקה של
apigeedsבאמצעות פקודהkubectl get apigeeds -n apigee No resources found in apigee namespace.משנים את ההקשר של kubectl לאזור השני שבו אשכול Cassandra עדיין פועל (כאן
us-east1).אימות שמצב מאגר הנתונים הוא 'פועל'
kubectl get apigeeds -n apigee NAME STATE AGE default running 23hמריצים exec באחד מ-pods של Cassandra באזור העליון (כאן
us-east1)kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash apigee@apigee-cassandra-default-0:~$בודקים את הסטטוס של nodetool. כל הצמתים באזור שנמחק (במקרה הזה
us-west1) יופיעו כלא פעילים.apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} statusDatacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.52.0.212 685.01 KiB 256 ? e1aa61e3-4eae-4549-9b58-506d495d87ab ra-1 UN 10.52.0.72 606.75 KiB 256 ? 477dfc03-f93e-40ea-810a-d15769822ad5 ra-1 UN 10.52.0.104 648.3 KiB 256 ? a8854cff-c2e3-4f0c-a342-e692787efcab ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack DN 10.60.0.143 567.06 KiB 256 ? 355d6ace-ab77-42cb-8138-9993bfd62d0e ra-1 DN 10.60.0.40 535.99 KiB 256 ? 4ed2c903-ff56-40fa-a15e-80a3de3cb22d ra-1 DN 10.60.0.17 573.08 KiB 256 ? f9a50d19-c04a-4d0d-a088-612384bed9f5 ra-1מסירים את כל הצמתים באזור שנמחק (כאן
us-west1).apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 355d6ace-ab77-42cb-8138-9993bfd62d0e apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 4ed2c903-ff56-40fa-a15e-80a3de3cb22d apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode f9a50d19-c04a-4d0d-a088-612384bed9f5מוודאים שלא נשארו צמתים באזור שנמחק (במקרה הזה
us-west1)apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD statusDatacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.52.0.212 699.71 KiB 256 ? e1aa61e3-4eae-4549-9b58-506d495d87ab ra-1 UN 10.52.0.72 586.77 KiB 256 ? 477dfc03-f93e-40ea-810a-d15769822ad5 ra-1 UN 10.52.0.104 623.6 KiB 256 ? a8854cff-c2e3-4f0c-a342-e692787efcab ra-1אחרי שהתהליך יסתיים, צריך למחוק את עבודת הגדרת המשתמש באזור up (כאן
us-east1). העבודה תיווצר מחדש באופן אוטומטי תוך כמה שניות.kubectl get jobs -n apigeeNAME COMPLETIONS DURATION AGE apigee-cassandra-schema-setup-apigee--0d2504c 0/1 5m54s 5m54s apigee-cassandra-user-setup--apigee--0d2504c 0/1 7s 7skubectl delete job apigee-cassandra-user-setup--apigee--0d2504cהמתנה לסיום של עבודת ההגדרה של המשתמש
kubectl get jobs -n apigeeNAME COMPLETIONS DURATION AGE apigee-cassandra-schema-setup-apigee--0d2504c 1/1 5m54s 5m54s apigee-cassandra-user-setup--apigee--0d2504c 1/1 7m 7mמוודאים שהאזור שנמחק לא מופיע במרחבי המפתחות.
יוצרים פוד לניפוי באגים ב-Cassandra.
מתחברים אל cqlsh ב-pod לניפוי באגים באמצעות הפקודה
apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl Password:מוודאים שהאזור
us-west1הוסר מכל מרחבי המפתחותddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;keyspace_name | durable_writes | replication ---------------------------+----------------+----------------------------------------------------------------------------------- cache_prince_hybrid_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} rtc_prince_hybrid_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} system_auth | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} quota_prince_hybrid_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} kms_prince_hybrid_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} system_distributed | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} kvm_prince_hybrid_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} system_traces | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'} (11 rows)