תצוגה מקדימה של התקנה וניהול חדשים של Apigee Hybrid


מדריך למשתמש בתצוגה מקדימה:
תצוגה מקדימה של נהלי התקנה וניהול חדשים עבור Apigee hybrid גרסה 1.8.


במסמך זה:

תצוגה מקדימה


מסמך זה מיועד לפרסונת האופרטור של Apigee (משתמשים המתקינים/מנהלים/מנהלים התקנות של Apigee Hybrid). כדי לפעול לפי ההוראות במסמך הזה, צריך ניסיון בהתקנת Apigee hybrid באחת מפלטפורמות Kubernetes הנתמכות. מומלץ ליצור ארגון Apigee להערכה כדי לנסות את השלבים הבאים.

משוב

אנא שלחו משוב על תהליך זה לכתובת Apigee-hybrid-install-preview@google.com.


סקירה כללית

חוויית ההתקנה ההיברידית החדשה של Apigee מתקינה רכיבי Apigee באמצעות kubectl ומשלבת התקנה וניהול של Apigee Hybrid עם כלי תזמור תצורה של Kubernetes כמו Kustomize. האימותים המשופרים והשקיפות של הרכיבים שמותקנים מאפשרים ניפוי באגים טוב יותר ומשפרים את תהליך ההתקנה הכולל.

סקריפט התקנה, apigee-hybrid-setup.sh, מספק כלי פשוט להתקנה בסיסית. אפשר להשתמש בו כדי ליצור התקנה היברידית ואז לשנות אותה בהתאם לצרכים שלכם באמצעות kubectl, או ליצור התקנה היברידית מאפס באמצעות kubectl. כל מאפייני ההגדרה של Apigee Hybrid מאוחסנים בקובצי YAML, קובץ אחד לכל רכיב מרכזי. כך אפשר לשלוט בצורה הרבה יותר מדויקת בהתקנה ההיברידית בסביבת Kubernetes. ניתן למצוא את קבצי התצורה וסקריפטי ההתקנה במאגר ב-GitHub.

שינויים בתהליך ההתקנה החדש

Apigee משנה את תהליך התקנת Apigee Hybrid מהסיבות הבאות:

  • ניתן לשלב את השיטה החדשה להתקנת Apigee hybrid עם כלי Kubernetes CI/CD קיימים כמו Argo, Flux או Anthos Config Management שאינם משתמשים ב...overrides.yaml קובץ תצורה.
  • היברידית Apigee סיפקהapigeectl , כלי תבניות מותאם אישית שיוצר מניפסטים של Kubernetes (בין היתר) כדי להתקין ולנהל Apigee hybrid באשכולות Kubernetes. תהליך ההתקנה והניהול החדש מספק חוויה דומה לזו של ספקי תוכנה אחרים.
  • התהליך החדש מאפשר התקנה בסיסית במהירות על ידי יצירה אוטומטית של חשבונות שירות עם ההרשאות הנדרשות, אישורי TLS, מילוי מראש של ברירות מחדל ואלמנטים יסודיים נחוצים אחרים.

דרישות מוקדמות

לפני השימוש בהתקנת תצוגה מקדימה זו, עליך לעמוד בדרישות המוקדמות הבאות:

גרסת טרום-השקה (Preview)

תצוגה מקדימה זו מיועדת לעבוד עם Apigee hybrid גרסה 1.8.x. גרסאות מאוחרות יותר של Apigee hybrid אינן נתמכות.

הגדרת Apigee היברידית

לפני שתמשיך בהתקנה בפועל של Apigee Hybrid, עליך להשלים את ההוראות הבאות המפורטות בסעיפים הבאים בתיעוד:

  1. הגדרת פרויקט וארגון
  2. הגדרת זמן ריצה היברידי

כלים

בנוסף, עליך להוריד ולהגדיר את הכלים הבאים בתחנת העבודה שלך:

  • curl
  • נדרש docker כדי להריץ את הסקריפט apigee-hybrid-setup.sh. פעל לפי ההוראות ב-הורד את Docker כדי להתקין את Docker.
  • envsubst אמור להיות זמין ברוב המערכות מבוססות לינוקס/יוניקס. עבור MacOS ומערכות אחרות, פעל לפי ההוראות במאגר הזה.
  • יש להתקין את jq. הורד את jq.
  • kpt הורד kpt.

  • kubectl גרסה 1.23 ואילך. מידע נוסף זמין במאמר 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/. אפשר לציין כל שם למכונות ההיברידיות. מידע על התקנה של כמה מופעים
  • ‫ORG_NAME: השם של הארגון שלכם ב-Apigee Hybrid. זה חייב להיות זהה למזהה הפרויקט שלך ב-Google Cloud. ראה: שלב 2: צור ארגון.

התקנה בסיסית של Apigee Hybrid

כדי להתקין במהירות את Apigee Hybrid ללא התאמה אישית כבדה, ניתן להשתמש בהליך הדו-שלבי הבא.


  • סביבה אחת
  • קבוצת סביבות אחת
  • נוצר חשבון שירות יחיד ב-Google Cloud שמשמש לכל הרכיבים הנפרדים
  • ערכי ברירת מחדל עבור כל מפתחות ההצפנה והסיסמאות.

  1. הורדת קבצי התקנה
  2. הפעלת ההגדרה

הורדת קובצי ההגדרה

הורד והכן את קבצי ההתקנה על ידי שכפול מאגר GitHub בכתובת https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1:

  1. משכפלים את המאגר:

    git clone https://github.com/apigee/apigee-hybrid-install.git
    
  2. נווטו לספרייה של המאגר המשובט:

    cd apigee-hybrid-install
    
  3. יוצרים ענף מהתג preview-1:

    git branch preview-1 preview-1
    git checkout preview-1
    
  4. הפוך את סקריפט ההגדרות לניתן להפעלה:

    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.

לאפשרויות נוספות, עיינו ב-הבנת הסקריפט.

כל שגיאה במהלך הביצוע תודפס לפלט סטנדרטי.

לאחר השלמת הסקריפט בהצלחה, תושלם את ההתקנה ההיברידית הבסיסית. ניתן לבדוק את ההתקנה על ידי יצירת proxy ל-API לדוגמה כמפורט בסעיף יצירה ופריסה של proxy ל-API חדש.

התקנה מותאמת אישית של Apigee Hybrid

עבור משתמשים מתקדמים יותר המעוניינים בשליטה מדויקת יותר על ההתקנה, ניתן לבצע את רצף השלבים הבא (עבור רבים מהשלבים המופיעים להלן, ניתן לבחור לבצע את השלב באופן ידני, או להשתמש בסקריפט המעטפת כדי להפוך את השלב הזה לאוטומטי):



הורד קבצי התקנה

הורד והכן את קבצי ההתקנה:

  1. שכפל את מאגר GitHub ב-https://github.com/apigee/apigee-hybrid-install/

    למאגר המשוכפל יהיה מבנה הדומה לזה המתואר ב-מבנה תיקיות של Apigee Hybrid Setup:

  2. cd לתוך ספריית apigee-hybrid-install/

  3. הפוך את סקריפט ההגדרות לניתן להפעלה:

    chmod +x ./tools/apigee-hybrid-setup.sh
    

צור מרחב שמות

צור מרחב שמות של Kubernetes באשכול שלך שיכיל את כל רכיבי אשכול Apigee.

kubectl create namespace apigee


אם תבחרו שם אחר למרחב השמות, תוכלו לבחור אחת משלוש האפשרויות הבאות:

  • (מומלץ) השתמש ב---namespace={YOUR_NAMESPACE_NAME} בעת מילוי מראש של ערכים ב-Edit resource yamls.
  • הפעל את שתי הפקודות הבאות:

    1. השתמשו ב-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
      
    2. השתמש ב-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 ממאגרים פרטיים (אופציונלי)

באפשרותך לבחור לא להשתמש בתמונות המאוחסנות באופן ציבורי, ולהשתמש בתמונות ממאגרים פרטיים משלך:

  1. השלב הראשון הוא לדחוף את כל התמונות למאגר הפרטי שלך, וניתן לעשות זאת על ידי ביצוע השלבים ב-apigee-pull-push | Apigee X. כברירת מחדל, תמונות מתויגות בגרסת Apigee Hybrid לה הן מתאימות, ומומלץ לא לערוך תגיות אלו. כמו כן, אנו ממליצים לא לערוך את שמות התמונות כדי שניתן יהיה לבנות את נתיב התמונה הסופי כפי שמוסבר ב-Image Hub.
  2. הגדר את הערך של השדה imageHub המופיע בתוך הקובץ apigee-hybrid-config.yaml לנתיב המארח של המאגר הפרטי. (לפרטים נוספים, עיינו ב-Image Hub).

    imageHub: "your.private.repo/apigee/hybrid"
    

זה יבטיח שכל רכיבי Apigee Hybrid ישתמשו בתמונות מהמאגר הפרטי שלך.

בנוסף לכך, ייתכן שתרצו להשתמש גם בתמונה פרטית עבור ה-controller ועבור שער ה-Apigee ingress. לשם כך תצטרכו לערוך את הקבצים apigee-controller-deployment.yaml ו-apigee-ingressgateway-manager-deployment.yaml ולהחליף את כל השדות של image ​​בתמונה מהמאגר הפרטי שלהם.



הגדרת imagePullSecrets (אופציונלי)

  1. צור סוד של kubernetes המכיל את פרטי האימות לאימות מול המאגרים הפרטיים. עיין ב-משיכת תמונה מרישום פרטי כדי להבין כיצד יש ליצור את הסוד.
  2. לאחר יצירת הסוד, כל שנותר הוא להתייחס לסוד זה, שניתן לעשות זאת על ידי עריכת הקובץ 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. אתם יכולים:

כאן נשתמש בתעודות חתומות עצמית כדוגמה. ניתן ליצור אישורים חתומים עצמית באמצעות (בהנחה ש-DOMAIN הוגדר כראוי וצריך להתאים לשם המארח שהוגדר ב-envgroup שלך):

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 Custom Resource ב-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"

הגדרת חשבונות שירות מותאמים אישית של גוגל קלאוד



שימוש בסקריפט

./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 או שימוש בזהויות עומס עבודה היא חובה.


דרישות מוקדמות

לפני השימוש בזהויות עומס עבודה, ודא שהתמיכה מופעלת באשכול ה-GKE שלך. לפרטים נוספים, עיינו ב-עדכון Node Pools | Apigee X.

הפעלת זהות עומס עבודה

עיין בסעיף זהויות עומס עבודה תחת התאמה אישית ורכיבים לקבלת פרטים על אופן הפעלת זהויות עומס עבודה לפני ההתקנה.

עריכת קבצי yaml של משאבים

מקומות מסוימים ב-yamls של הרכיב דורשים נוכחות של שמות הארגון, הסביבה וקבוצות הסביבה הנכונים. ניתן להגדיר ערכים אלה באופן ידני, או להשתמש בסקריפט המעטפת כדי למלא אותם באופן אוטומטי.

שימוש בסקריפט

./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

מתן הרשאות לחשבון שירות הסנכרון כדי לקיים אינטראקציה עם מישור הבקרה

בצעו את השלבים בשלב 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.

  1. ערוך את קובץ customization.yaml לצורך יצירת האישור: $INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml
  2. הוסף את הדברים הבאים לסוף הקובץ.

    - patch: |-
    - op: replace
      path: /metadata/namespace
      value: "gk-cert-manager"
    target:
    group: cert-manager.io
    version: v1
    kind: Certificate
    name: apigee-root-certificate
    
  3. שמור את הקובץ

התאמה אישית ורכיבים

סקירה כללית

ההתקנה ההיברידית החדשה יורשת את האידיאולוגיה של Kustomize של מבנה קבצי yaml בצורה של Bases ו-Overlays.

  • בסיסים הם קבצים המסופקים על ידי Apigee, אשר עשויים להשתנות בין כל מהדורה חדשה של Hybrid. אינך מצופה לשנות קבצים אלה. קבצים אלה מכילים ערכי ברירת מחדל המסופקים על ידי Apigee. כל הקבצים תחת התיקייה העליונה bases/ מכילים את הבסיסים האלה
  • שכבות-על מכילות את תצורת המשתמש ומשמשות כאמצעי שבאמצעותו ניתן לשנות ערכי ברירת מחדל שצוינו בבסיסים. כל הקבצים תחת התיקייה העליונה overlays/ מכילים את שכבות ה-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

ניתן להפעיל רכיב זה כאשר יש לך תמונות המאוחסנות במאגר הפרטי שלך. כדי לשלוף תמונות ממאגר פרטי, ניתן ליצור סוד של קוברנטס שיכיל את פרטי האימות שלך ולאחר מכן יוכל להפנות לסוד זה בפנים. ראה הגדרת imagePullSecrets (אופציונלי) לקבלת הוראות. למידע נוסף, עיין ב-משיכת תמונה מרשימת רישום פרטית | Kubernetes בתיעוד של Kubernetes.

התוכנית זמינה במדינות הבאות:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

הפעלה:

בטל את ההערות לשורה "./components/imagepullsecret/" בקבצי kustomization.yaml המתאימים, במידת הצורך.

שינויים שיש לבצע:

  • components/imagepullsecret/patch.yaml
    • נדרש הוסף שמות סודיים רלוונטיים לרשימה ב-spec.template.spec.imagePullSecrets

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר מותקנת אצלך Apigee Hybrid, תצטרך להחיל את השינויים החדשים הבאים באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

nodeselector

רכיב זה מאפשר לך לתזמן פודים עבור משאב Apigee על צמתים ספציפיים. למידע נוסף, עיינו ב-הקצאת פודים לצמתים | Kubernetes.

זמין ב:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

מאפשר:

בטל את ההערות לשורה "./components/nodeselector" בקבצי kustomization.yaml המתאימים, במידת הצורך.

שינויים שיש לבצע:

  • components/nodeselector/patch.yaml
    • אופציונלי שנה את הערך של תווית בורר הצמתים מ-apigee-runtime או apigee-data לערך הרצוי.

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

זהות עומס עבודה

מגוון קונטיינרים במערכת האקולוגית Apigee Hybrid דורשים הרשאות כדי לבצע קריאות API מסוימות למישור הבקרה / מישור הניהול של Apigee. זהות עומס עבודה היא אחת מהפעולות של מתן הרשאות אלו לפודים (ולקונטיינרים שבתוכם). משאבים שימושיים לקריאה נוספת בנושא כוללים: - הצגת זהות עומס עבודה: אימות טוב יותר עבור יישומי GKE שלך | בלוג Google Cloud - שימוש בזהות עומס עבודה | תיעוד מנוע Kubernetes | Google Cloud

זמין ב:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

תְנַאִי מוּקדָם:

לפני שתוכלו להשתמש בזהות עומס עבודה, תצטרכו להעניק את ההרשאות הרלוונטיות בתוך פרויקט 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} - מרחב השמות של קוברנטס שבו הותקנו רכיבי Apigee. בדרך כלל זה יהיה apigee אלא אם כן שונה במפורש על ידי המשתמש במהלך ההתקנה - ${KSA_NAME} - שם מרחב השמות של קוברנטס. תצטרך להפעיל פקודה זו עבור כל חשבון שירות Kubernetes המוזכר ב-חשבונות שירות Kubernetes - ${GSA_NAME} - שם חשבון השירות של Google Cloud. אם לא ביצעת שינויים במהלך ההתקנה, הערך יהיה apigee-all-sa. אם תגדיר מספר חשבונות שירות של Google Cloud עבור רכיבים בודדים, תצטרך להתאים את KSA_NAME ל-GSA_NAME המתאים. ניתן להשוות את הטבלאות בחשבונות שירות של Google Cloud עם חשבונות שירות של Kubernetes כדי למצוא את המקבילים.

הפעלה:

מבטלים את ההערה בשורה ./components/workload-identity בקובצי kustomization.yaml המתאימים, בכל מקום שנדרש. שימו לב שבמסגרת טלמטריה, יש לנו תוספים נפרדים של זהות עומסי עבודה עבור רכיבי metrics ו-logger, אותם ניתן להפעיל בנפרד.

נוֹהָג:

  1. אם עדיין לא התקנתם את Hybrid, אתם יכולים פשוט להפעיל את זהות עומס העבודה כמו שמתואר בקטע הקודם ולהמשיך בהתקנה, שתשתמש אוטומטית בזהות עומס העבודה.
  2. אם כבר התקנתם את Apigee Hybrid, תצטרכו להחיל את השינויים החדשים האלה באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-proxy

אפשר להגדיר שרת proxy בכל אחד מהרכיבים הבאים, כך שהתנועה של הרכיב הזה תעבור דרך שרת ה-proxy של HTTP שהוגדר עבור הרכיב. ניתן להגדיר את ה-proxy עבור כל רכיב Apigee בנפרד.

התוכנית זמינה במדינות הבאות:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/telemetry

מאפשר:

מבטלים את ההערה בשורה ./components/http-proxy/ בקובצי kustomization.yaml הרלוונטיים בכל מקום שנדרש.

שינויים שיש לבצע:

  • components/http-proxy/patch.yaml ניתן להגדיר את הפרמטרים הבאים תחת spec.httpForwardProxy
    • scheme: נדרש אחד מ-HTTP או HTTPS
    • host: נדרש כתובת המארח של הפרוקסי שלך
    • port: נדרש מספר הפורט
    • ‫username: אופציונלי שם המשתמש שמשויך לשרת הפרוקסי
    • ‫password: אופציונלי הסיסמה לגישה לשרת ה-proxy

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר מותקנת אצלך Apigee Hybrid, תצטרך להחיל את השינויים החדשים הבאים באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

כלי לרישום ביומן ומדדים

ניתן להפעיל או להשבית באופן פרטני את הרישום או המדדים בתוך שכבות-על/מצבים/{INSTANCE_NAME}/טלמטריה. כברירת מחדל, הרישום מושבת והמדדים מופעלים. כדי להפעיל או להשבית אותן, פשוט מבטלים את ההערה בשורות שלהן ב-telemetry/kustomization.yaml או מוסיפים הערה.

gcs-גיבוי ו-gcs-שחזור

אפשר להשתמש ברכיב הזה של kustomize כדי לבצע גיבוי ושחזור של מסד הנתונים של Cassandra ב-Google Cloud Storage.

זמין ב:

  • overlays/instances/{INSTANCE_NAME}/datastore

תְנַאִי מוּקדָם:

  1. הורד את מפתחות חשבונות שירות Google Cloud עבור חשבון בעל תפקיד מנהל אובייקט אחסון.

    • אם השתמשתם בסקריפט כדי לבצע את ההתקנה ולא השתמשתם ב-Workload Identity, תוכלו להשתמש מחדש במפתחות שהורדתם. המפתחות האלה זמינים בתיקייה service-accounts שנוצרת על ידי הסקריפט.
    • ניתן גם להשתמש בסקריפט create-service-account.sh כדי ליצור חשבון שירות חדש ולהוריד את המפתחות שלו:

      ./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
      
  2. לאחר הורדת המפתחות, עליך ליצור סוד של 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 כך שיפנה לכל פרוקסי שהוגדר. הפורמט יכול להיות כדלקמן:
      • 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. התיאור תואם ל- restore: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

  1. צור אשכול Kubernetes חדש עם מרחב שמות חדש לשחזור פריסת זמן הריצה ההיברידית. אינך יכול להשתמש באותו אשכול ומרחב שמות שבהם השתמשת עבור ההתקנה ההיברידית המקורית.
  2. התקן את Hybrid באשכול החדש עם ההגדרות שהוגדרו לעיל, בנוסף לכל הגדרות אחרות שתרצה:

    • ניתן להשתמש בהתקנה בסיסית ובהתקנה היברידית במרחב השמות החדש:
    ./tools/apigee-hybrid-setup.sh \
    --cluster-name $CLUSTER_NAME \
    --cluster-region $CLUSTER_LOCATION \
    --namespace ${NEW_APIGEE_NAMESPACE}
    
  3. לאחר השלמת השחזור, ניתן יהיה למחוק את כל המשאבים במרחב השמות הישן ולהעביר אותם למרחב השמות החדש.

מידע נוסף זמין במאמר בנושא שחזור גיבויים.

גיבוי שאינו מבוסס GCS ושחזור שאינו מבוסס GCS

ניתן להשתמש ברכיב customize זה כדי לבצע גיבוי ושחזור של מסד הנתונים של קסנדרה ל-Google Cloud Storage.

זמין ב:

  • overlays/instances/{INSTANCE_NAME}/datastore

תְנַאִי מוּקדָם:

  1. ניתן להשתמש בשלבים מהתיעוד הקיים עבור הגדרת השרת ו-SSH.
  2. מהשלבים שלעיל, תצטרכו להשתמש במפתח הפרטי של SSH הזמין בקובץ "ssh_key" שנוצר על ידי ביצוע השלבים הקודמים. לאחר מכן ניצור סוד של קוברנטס בשם apigee-cassandra-backup-and-restore-gcp-sa-key אשר מכיל את המפתח הפרטי של SSH.



    ניתן ליצור את סוד הקוברנטס באמצעות הפקודה הבאה:

    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} - מרחב השמות של קוברנטס שבו הותקנו רכיבי Apigee. זה בדרך כלל יהיה apigee אלא אם כן ישתנה במפורש במהלך ההתקנה.

    לחלופין, ניתן להשתמש בקובץ התבנית templates/secret-apigee-cassandra-backup-and-restore-key-file.yaml כדי ליצור סוד זה.

מאפשר:

  • אם ברצונך להפעיל גיבוי, בטל את ההערה בשורה "./components/non-gcs-backup" בקובץ customization.yaml של datastore.
  • אם ברצונך לשחזר גיבוי, בטל את ההערה בשורה "./components/non-gcs-restore" בקובץ datastore customization.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 כך שיפנה לכל פרוקסי שהוגדר. הפורמט יכול להיות כדלקמן:
      • 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.

  1. צור אשכול Kubernetes חדש עם מרחב שמות חדש לשחזור פריסת זמן הריצה ההיברידית. אינך יכול להשתמש באותו אשכול ומרחב שמות שבהם השתמשת עבור ההתקנה ההיברידית המקורית.
  2. מתקינים את Hybrid באשכול החדש עם ההגדרות שצוינו למעלה, בנוסף לכל הגדרה אחרת שרוצים: אפשר להשתמש בהתקנה הבסיסית ולהתקין את Hybrid במרחב השמות החדש:

    ./tools/apigee-hybrid-setup.sh \
      --cluster-name $CLUSTER_NAME \
      --cluster-region $CLUSTER_LOCATION \
      --namespace ${NEW_APIGEE_NAMESPACE}
    

    או בצעו את התקנה מותאמת אישית של Apigee Hybrid כדי להגדיר את הדברים לפי בחירתכם.

  3. לאחר השלמת השחזור, ניתן יהיה למחוק את כל המשאבים במרחב השמות הישן ולהעביר אותם למרחב השמות החדש.

    מידע נוסף זמין במאמר תזמון גיבויים בשרת מרוחק.

לקוח http

הוראות מפורטות מופיעות במאמר הפעלת לקוחות HTTP | Apigee.

זמין ב:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

מאפשר:

בטל את ההערה לשורה "./components/http-client" בקובץ route-config/${ENV_GROUP}/kustomization.yaml המתאים

שינויים שיש לבצע:

  • לא נדרשים שינויים.

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר מותקנת אצלך Apigee Hybrid, תצטרך להחיל את השינויים החדשים הבאים באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

לקוח שאינו sni

שווה ערך ל-כיצד להגדיר לקוח שאינו SNI | 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 מתואר כאן.

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר מותקנת אצלך Apigee Hybrid, תצטרך להחיל את השינויים החדשים הבאים באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

להוראות, ראו הפעלת תמיכה עבור לקוחות שאינם SNI ו-HTTP | Apigee.

מאפשר:

בטל את ההערה לשורה "./components/http-and-non-sni-client" בקובץ route-config/${ENV_GROUP}/kustomization.yaml המתאים

שינויים שיש לבצע:

  • components/http-and-non-sni-client/apigee-route.yaml

נוֹהָג:

  1. אם עדיין לא התקנת את Apigee Hybrid, תוכל להמשיך בשלבי ההתקנה והשינויים הללו ייושמו בתהליך.
  2. אם כבר מותקנת אצלך Apigee Hybrid, תצטרך להחיל את השינויים החדשים הבאים באמצעות:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

במספר אזורים

ניתן להשתמש ברכיב זה בעת הגדרת פריסת קסנדרה מרובת אזורים. למידע נוסף, ראו פריסה מרובת אזורים ב-GKE וב-GKE מקומית

מאפשר:

בטל את ההערה לשורה "./components/multi-region" בקובץ datastore/kustomization.yaml

שינויים שיש לבצע:

  • components/multi-region/cassandra-data-replication.yaml

    • דָרוּשׁ source.region שם מרכז הנתונים של קסנדרה המקור שישמש לשכפול נתונים ממנו. ניתן לזהות זאת באמצעות הפקודה הבאה באשכול המקור:
    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 של כל פוד קסנדרה, השתמש בפקודה הבאה:
    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 מקומי ו-AKS":

נוֹהָג:

השימוש ברכיב זה הגיוני בעיקר כאשר אתם מגדירים את Apigee Hybrid באשכול חדש וכבר יש לכם הגדרה פעילה אחרת של Apigee Hybrid.

  1. גם האשכול החדש וגם האשכול הקיים צריכים להשתמש באותם אישורי TLS כדי להבטיח תקשורת תקינה בין תרמילי קסנדרה. לכן נצטרך להעתיק את הסוד של apigee-root-certificate מהאשכול הקיים ולהשתמש בו גם באשכול החדש יותר:
  2. הרצה:

    kubectl config get-contexts
    
    • כדי לקבל רשימה של כל ההקשרים של Kubernetes ואז להריץ
    kubectl config use-context SOURCE_CLUSTER_CONTEXT
    

    כאשר SOURCE_CLUSTER_CONTEXT הוא השם של ההקשר של אשכול Kubernetes של המקור.

  3. אחסן את סוד אישור הבסיס בקובץ:

    kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
    
  4. החלף את הקשר האשכול לאשכול החדש שבו אתה מתקין את Apigee Hybrid.

    kubectl config use-context ${NEW_CLUSTER_CONTEXT}
    
  5. יוצרים את סוד הבסיס באשכול החדש:

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  6. משביתים את היצירה של אישור בסיס חדש. כך נוודא שלא ניצור apigee-root-certificate חדש ונדרוס את זה שיצרנו בשלב הקודם.

  7. בטל את ההערות לשורות הבאות בקובץ overlays/initialization/certificates/kustomization.yaml:

    # components:
    # - ./components/disable-apigee-root-certificate-generation
    
  8. המשך עם שאר התקנת Apigee Hybrid באמצעות התקנה בסיסית של Apigee Hybrid או התקנה מותאמת אישית של Apigee Hybrid. לדוגמה, לאחר התקנה בסיסית של Apigee Hybrid, ניתן לבצע:

    ./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
    
  9. כדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.



    kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    
  10. בודקים את תהליכי הבנייה מחדש ביומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה 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
    
  11. כדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.



    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
    }
    

    ראה גם: פריסה מרובת אזורים.

  12. מסיר את השורות הבאות מ-components/multi-region/patch.yaml:

      properties:
        multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
    
  13. מחילים את השינויים:

    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 עבור Apigee Hybrid גרסה 1.8
  • IMAGE_NAME נקבע באופן מרומז משם המכולה שבה התמונה תשמש. לדוגמה, עבור המכולה apigee-runtime, ה-IMAGE_NAME יהיה apigee-runtime.

לכן, דוגמה מלאה לנתיב תמונה תהיה gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0

בדרך זו, נבנה נתיב התמונה הסופי, אשר לאחר מכן ישמש בתוך כל אחד מהמיכלים בתרמילים המתאימים להם.

חשבונות שירות ב-Google Cloud

חשבונות שירותי Google Cloud הם חשבונות המשמשים אפליקציות לביצוע קריאות מורשות לממשקי ה-API של גוגל. ניתן להוריד מפתחות חשבון של שירות Google Cloud, ולאחר מכן להשתמש בהם למטרות אימות. Apigee מצפה מהמשתמש לספק מפתחות לחשבון שירות על ידי יצירת סודות. להלן שמות הרכיבים ושם ברירת המחדל של הסוד שבו הוא מחפש מפתחות חשבון שירות:

רכיב רכיב משנה שם סודי ברירת מחדל של קוברנטס המכיל מפתח חשבון שירות
ארגון
connectAgent apigee-connect-agent-gcp-sa-key-${ORG_NAME}
צוֹפֶה apigee-watcher-gcp-sa-key-${ORG_NAME}
מרט apigee-mart-gcp-sa-key-${ORG_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}
ingressGateways לא רלוונטי
סביבה
סביבת זמן ריצה apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
אודקה apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
מסנכרן apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
טלמטריה
מדדים apigee-metrics-gcp-sa-key
containerLogs apigee-logger-gcp-sa-key

חשבונות שירות ב-Kubernetes

חשבונות שירות של Kubernetes מספקים זהויות לפודים באשכול שלך. כברירת מחדל, בקר Apigee יוצר אלה עבורך. אבל, אם תרצו לעקוף את היצירה (לדוגמה, כשאתם משתמשים בזהויות עומס עבודה), תוכלו לעשות זאת על ידי ציון השדה podServiceAccountName בתת-הרכיבים השונים.

רשימת רכיבים ורכיבי המשנה שלהם שבהם ניתן לציין את חשבון השירות של kubernetes יחד עם שם ברירת המחדל של חשבון השירות k8s בעת הפעלת תיקון זהות עומס העבודה עבורם.

רכיב רכיב משנה שם ברירת מחדל (זמין לאחר הפעלת תיקון זהות עומס עבודה)
ארגון
connectAgent apigee-connect-agent-svc-account-${ORG_NAME}
צוֹפֶה apigee-watcher-svc-account-${ORG_NAME}
מרט apigee-mart-svc-account-${ORG_NAME}
אודקה apigee-udca-svc-account-${ORG_NAME}
סביבה
מסנכרן apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME}
אודקה apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME}
סביבת זמן ריצה apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME}
מאגר נתונים
קסנדרה apigee-datastore-svc-account
טלמטריה
metricsApp apigee-metricsApp-svc-account
metricsProxy apigee-metricsProxy-svc-account
metricsAdapter apigee-metricsAdapter-svc-account
containerLogs apigee-container-logs-svc-account

זהויות של עומסי עבודה

זהויות עומס עבודה מאפשרות לפודים (המשתמשים בחשבונות שירות של Kubernetes) הפועלים ב-GKE לבצע אימות ישיר עם Cloud APIs של Google מבלי להזדקק למפתחות חשבון שירות של Google Cloud.

הוספת סביבה חדשה

.
├── ...
├── instances/instance1/components
│   ├── ...
│   ├── environments
│   │   ├── dev
│   │   │   └── apigee-environment.yaml
│   │   │   └── secrets.yaml
│   │   └── new-env-name (new)
│   │       └── apigee-environment.yaml (new)
│   │       └── secrets.yaml (new)
└── ...

הוספת סביבה חדשה היא פשוטה כמו:

  1. יצירת תיקייה חדשה בתוך ספריית הסביבות (או איך שלא בנהתם את התיקיות)
  2. העתקת קובץ apigee-environment.yaml מכל סביבה קיימת לתיקייה החדשה.
  3. אם ברצונך ליצור חשבון שירות חדש ומפתחות הצפנה עבור הסביבה החדשה, העתק את ה-secrets.yaml לתיקייה החדשה ושנה את שם הסודות בהתאם כדי להבדיל אותם מסביבות קיימות אחרות (בדרך כלל הדבר נעשה על ידי הוספת שם הסביבה כסיומת).
  4. ביצוע שינויים מתאימים ב-apigee-environment.yaml, כגון:
    • שינוי שם הסביבה
    • אם עומדים ליצור חשבונות שירות ומפתחות הצפנה חדשים, יש צורך להפנות אליהם בצורה נכונה בקובץ yaml.
  5. החלת ה-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 באמצעות הפקודות הבאות ללא קשר למצב הנוכחי של האשכול.





  1. מחק את apigeeds במרחב השמות apigee:

    Kubectl delete -n apigee apigeeds default
    

    אם שלב זה נתקע, ניתן לצאת ממנו באמצעות CTRL + C.

  2. עריכת apigeeds חדש:

    Kubectl edit -n apigee apigeeds default
    
  3. הוספה/עדכון של שדה forceDelete במפרט מאגר הנתונים של apigee

    spec:
    forceDelete: true
    
  4. שומרים את הקובץ ויוצאים.

כעת חכו למחיקת מאגר הנתונים. מחיקת כל משאבי הקסנדרה עשויה להימשך מספר דקות.

הבנת התסריט

הסקריפט של 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 שם אשכול קוברנטס.
  • --cluster-region האזור שבו נמצא אשכול Kubernetes
  • --gcp-project-id מזהה הפרויקט בענן של Google שבו קיים אשכול הקוברנטס
  • --ingress-domain מציין את שם המארח/שם הדומיין שישמש ליצירת אישורי TLS חתומים עצמית עבור istio ingress-gateway. אם לא צוין כלום, נעשה ניסיון לקבוע את הערך על ידי שאילתת API של מישור הבקרה כדי לקבל את הערך מ-envgroup. אם היו בעיות בקביעת envgroup או אם הוגדרו כמה שמות מארחים עבור envgroup, השגיאה מוחזרת והסקריפט יוצא.
  • --generate-internal-tls-certs פעולה זו תיצור סוד קוברנטס בשם apigee-ca המכיל אישור וזוג מפתחות שנוצרו על ידינו.
  • --create-ingress-tls-certs פעולה זו תיצור סוד בשם {ORG_NAME}-{ENV_GROUP_NAME} (נגזר משם הארגון וקבוצת ה-env) בתוך מרחב השמות istio-system, שיכיל אישור וזוג מפתחות שישמשו לתקשורת TLS. שם הדומיין המשמש ליצירת אישורים אלה נגזר מהערך שנמצא בתצורת envgroup. במקרה של התנגשויות (למשל, אם נמצא כמה דומיינים), יוצגו הודעות שגיאה מתאימות.
  • --create-gcp-sa-and-secrets יוצר חשבון שירות Google Cloud יחיד בפרויקט Google Cloud, מוריד את המפתחות ולאחר מכן יוצר את סודות ה-kubernetes המכילים את המפתח. ניתן למצוא את שמות הסודות בחשבונות שירות Google Cloud.
  • --fill-values מחליף את הערכים של ה-org, ה-env, ה-envgroup ושמות אחרים בכל מקום בו הם נדרשים בקבצי yaml השונים.
  • --apply-configuration פעולה זו תיצור את מנפיקי האישורים, הגדרות משאבים מותאמות אישית, Webhooks, תפקידים ומשאב הבקר. המשאבים ייווצרו בסדר הנכון והפקודה תיחסם עד שכולם יהיו תקינים.
  • -- 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 לניהול תצורה. המניפסטים מאורגנים על סמך הקונספט של התאמה אישית של בסיסים ושכבות-על. תיקיית הבסיסים מכילה את התצורה המינימלית הנדרשת עבור כל רכיב apigee. תיקיית שכבות השכבה מכילה מספר תכונות(תצורות) נוספות המוגדרות כרכיבים. ניתן לבצע רכיב על ידי ביטול הערות על ההפניה לרכיב בקובץ customization.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 של הרכיב בהתאם.

הסבר קצר על התיקיות והקבצים:

בסיסים

תיקייה זו מכילה את התבניות עם תצורה מינימלית הנדרשת על ידי כל אחד מרכיבי ה-apigee. לא יהיה צורך בשינויים במניפסטים בתיקייה זו.

שכבות-על

תיקייה זו מכילה את תבניות הרכיבים של customize עבור תצורות נוספות.

אִתחוּל

namespaces.yaml

מרחב השמות שבו יותקנו רכיבי מישור הנתונים של Apigee. שם ברירת המחדל של מרחב השמות הוא apigee

תעודות

מכיל את המשאבים Issuer ו-Certificate המשמשים להנפקת אישורים ל-webhooks. מכיל גם את ה-Issuer המשמש להנפקת אישורים לפודים שונים עבור תקשורת TLS.

rbac

מכיל את Role, ClusterRole, RoleBinding ו-ClusterRoleBinding שישמשו רכיבים שונים.

כרטיסי אשראי
    Contains the definition of all the CRDs which are used by Apigee.
תגובות לפעולה מאתר אחר (webhook)

מכיל את ValidatingWebhookConfiguration וMutatingWebhookConfiguration שישמשו לביצוע אימותים במשאבים בהתאמה אישית.

תעבורת נתונים נכנסת (ingress)

מכיל הגדרה שרלוונטית לכל ה-POD-ים של Ingress. למשל, שינוי כותרת נפוצ, בדיקת תקינות וכו'.

פתח

מכיל את ההגדרה של openshift SecurityContextConstraints.

שלטים רחוקים

בקר אפיגי
apigee-hybrid-config.yaml

מכיל ConfigMap שמסופק כקלט בקובץ apigee-controller-manager.yaml. מפת ההגדרות הזו מכילה תצורות כמו imageHub, imagePullSecrets, forwardProxy בין היתר.

apigee-controller-deployment.yaml

מכיל שני שירותים לבקר ול-webhook, ופריסה לבקר. אם תרצו להשתמש בתמונה פרטית עבור הבקר, כאן תצטרכו לבצע את השינוי.

איסטיוד

Apigee-istio-mesh-config.yaml מכיל תצורת רשת עבור Istio בשימוש על ידי Apigee. זה לא רלוונטי עבור התקנות אחרות של ASM/Istio באשכול.

apigee-ingressgateway-manager-deployment-patch.yaml

מכיל שירות ופריסה של Istiod. זהו istiod פרטי המשמש אך ורק עבור מקרי שימוש של Apigee.

instances/{instanceName}

מאגר נתונים
apigee-datastore.yaml

מכיל את המשאב המותאם אישית ApigeeDatastore שמנהל את קסנדרה.

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. חלק מהסודות מורחקים מהערות כשהם נוצרים על ידי הסקריפט. אם תשבית את יצירתם, תצטרך ליצור אותם ידנית

סביבות

מכיל את כל הסביבה בארגון שלך. כדאי ליצור תיקייה נפרדת לכל סביבה על ידי העתקת התיקייה שכבר סופקה לכם והגדרתה בהתאם לדרישות.

dev
apigee-environment.yaml

מכיל את המשאב המותאם אישית ApigeeEnvironment שמנהל רכיבי משנה אחרים כמו זמן ריצה.

secrets.yaml

מכיל את ה-Secret שאליהם מתייחסים ב-apigee-environment.yaml. חלק מהסודות מורחקים מהערות כשהם נוצרים על ידי הסקריפט. אם משביתים את היצירה שלהם, צריך ליצור אותם באופן ידני.

טלמטריה
apigee-telemetry.yaml

מכיל את המשאב המותאם אישית ApigeeTelemetry.

secrets.yaml

מכיל את ה-Secret שאליהם מתייחסים ב-apigee-telemetry.yaml. חלק מהסודות מורחקים מהערות כשהם נוצרים על ידי הסקריפט. אם תשבית את יצירתם, תצטרך ליצור אותם ידנית

תצורת מסלול
קבוצת dev-env
apigee-route-config.yaml

מכיל את המשאב המותאם אישית ApigeeRouteConfig.

secrets.yaml

מכיל Secret שאליו מתייחסים ב-apigee-route-config.yaml. הוא מוסר מהערות מכיוון שהוא נוצר אוטומטית על ידי הסקריפט apigee-hybrid-setup.sh ונשמר שם כדי לספק דוגמה לאופן שבו הסוד אמור להיראות אם הייתם יוצרים אותו ידנית.

אבחון

אבחון-אספן.yaml

משאבים שישמשו להפעלת פריסת האבחון

כְּלֵי עֲבוֹדָה

apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh

אחסון מפתחות חשבון שירות בכספות חיצוניות

Vault (מאת Hashicorp) היא מערכת ניהול סודות פופולרית הכוללת מספר אינטגרציות עם מאגרי סודות המסופקים על ידי גוגל, Azure, AWS ואחרים. ‫Hashicorp Vault מאפשר לכם לאחזר סודות ממקור חיצוני ואז להשתמש בהם במשאבי Kubernetes. ישנן מספר דרכים בהן ניתן להשתמש ב-Vault כדי לאתר סודות. השלבים הבאים ישמשו כדוגמה בסיסית כיצד להשתמש ב-Vault CSI Provider כדי לטעון מפתחות חשבון שירות Google Cloud המאוחסנים במנוע סודי כלשהו המסופק על ידי Vault.



  1. נשתמש ב-Helm כדי להתקין משאבים הקשורים ל-Vault באשכול שלך. פועלים לפי השלבים שבקטע התקנת Helm כדי להגדיר את Helm במערכת.
  2. בצעו את השלבים בהתקנת תרשים Vault Helm, כלומר:

    1. הוספת מאגר Hashicorp ל-Helm

      helm repo add hashicorp https://helm.releases.hashicorp.com
      
    2. עדכון מאגרי helm

      helm repo update
      
    3. התקנת הכספת

      helm install vault hashicorp/vault \
      --set "server.dev.enabled=true" \
      --set "injector.enabled=false" \
      --set "csi.enabled=true"
      
  3. עכשיו נאחסן את הסוד בתוך הכספת.

    1. קבל מעטפת בתוך פוד הפיתוח של הכספת

      kubectl exec -it vault-0 -- /bin/sh
       ```
      
    2. נשתמש במנוע הסודי של מפתח/ערך לאחסון נתונים בדוגמה זו.

      vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
      
    3. כדי לוודא שהמפתח נשמר בהצלחה, השתמשו ב:

      vault kv get secret/runtime-gcp-sa-key
      
  4. הגדר אימות כדי לאפשר לפוד זמן הריצה למשוך את המפתח. כפי שנדון בחשבונות שירות של Kubernetes, חשבונות שירות של Kubernetes מספקים זהות לפודים ומאפשרים להם לבצע אימות מול מערכות אחרות.

    1. קבל מעטפת בתוך פוד הפיתוח של הכספת

      kubectl exec -it vault-0 -- /bin/sh
      
    2. הפעלת שיטת אימות קוברנטס

      vault auth enable kubernetes
      
    3. כתוב את תצורת האימות

      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
      
    4. צור את מדיניות האימות

      vault policy write apigee-runtime-app - <<EOF
      path "secret/data/runtime-gcp-sa-key" {
      capabilities = ["read"]
      }
      EOF
      
    5. קשר את הפוליסה עם חשבון השירות

      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, תשתמש בשם הזה.

    1. צא מהמעטפת בתוך כספת-0

      exit
      
  5. התקנת מנהל התקן 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
    
  6. צור משאב קוברנטס של SecretProviderClass שמפנה לסוד שיצרת בתוך הכספת

    cat > 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
    
  7. החלת yaml

    kubectl apply -f spc-vault.yaml
    
  8. צור את חשבון שירות ה-kubernetes שאליו הקצנו את ההרשאות בשלב (4.e)

    kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
    
  9. שנה את הקובץ 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"
    
  10. מחילים את השינויים:

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
    

שדרוג Apigee היברידי



צריך לוודא שהשלמתם את כל הדרישות שמפורטות בקטע דרישות מוקדמות. כמו כן, מומלץ לבצע אתחול מחדש מתגלגל של כל הרכיבים כדי לבדוק אם האשכול תקין. סדר ההפעלות מחדש יהיה Cassandra, Redis, ApigeeOrganization ו-ApigeeEnvironment.

צור גיבוי

  1. יוצרים עותק גיבוי של ההגדרה המשולבת הנוכחית. יידרש גיבוי למקרה שתצטרך לבצע החזרה למצב קודם של השדרוג לגרסה הנוכחית.

    tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
    
  2. צור גיבוי של מסד הנתונים של קסנדרה. גיבויים של Cassandra הם אמצעי חשוב להגנה מפני תרחישי אסון.

שדרוג פלטפורמת Kubernetes לפי הצורך

שלב זה אינו נדרש בכל פעם, אך תצטרכו לשדרג את פלטפורמת Kubernetes שלכם, כמו Kubernetes, OpenShift ורכיבים כמו cert-manager, cassandra וכו', אם היא אינה נתמכת עוד על ידי גרסה חדשה יותר של apigee hybrid. התיעוד יכיל גרסאות נתמכות של פלטפורמות ורכיבים.

הורדת קובצי ההגדרה

הורד את המאגר והחלף את התיקיות bases ו-tools בהגדרת ה-apigee ההיברידית הקיימת במאגר חדש יותר:

  1. משכפלים את התג preview-1 של מאגר GitHub בכתובת https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1

    למאגר המשוכפל יהיה מבנה שדומה לזה שמתואר במאמר מבנה התיקיות של Apigee Hybrid:

  2. להחליף את התיקייה של האתחול, הכלים והבקר בהגדרת 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. ניתן להשתמש בסקריפט או לבצע את השלבים הידניים המופיעים כדי לשדרג את משאבי האתחול והבקר.

עדכון רכיבי Apigee Kubernetes

תצטרכו לבצע את השינויים הבאים: - במקרה של שינויים ארכיטקטוניים או הכנסת שדות חדשים או הוצאת שדות ישנים משימוש, תצטרכו לשנות את רשימות ה-CR עם השינויים המתאימים בהתאם להוראות המופיעות במדריך השדרוג. - לכל הפחות עליך לעדכן את שדות הגרסה בתוך CRs (אשר יציינו את גרסת ה-apigee hybrid המותקנת) לגרסת ה-apigee hybrid החדשה יותר.

החל את השינויים עבור CRs של אפיגי. עבור סביבה שאינה של ייצור, ניתן להחיל את כל השינויים על רכיבי apigee בו זמנית.

kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

החזרה לגרסה קודמת ב-Apigee Hybrid

  1. שחזור הגדרת apigee-hybrid

    עבור לספרייה שמכילה את הגרסה הקודמת של הגדרת apigee hybrid. אם אינו זמין, שחזר אותו מקובץ ה-zip שנוצר בשלב 1[קישור] במהלך שדרוג apigee hybrid.

  2. החזרת רכיבי Kubernetes למצב אחר

    החל את השינויים עבור CRs של אפיגי

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. בקר החזרה למצב קודם

    בצעו את אותה קבוצת שלבים המופיעה במדריך יצירת משאבי אתחול ובקר בתהליך העבודה של ההתקנה ההיברידית של apigee. ניתן להשתמש בסקריפט או לבצע את השלבים הידניים המופיעים כדי לבטל את משאבי האתחול והבקר.

  4. הסרת המשאבים

    תצטרך לנקות את כל המשאבים הנוספים שנוצרו במהלך השדרוג, כמו רכיבים חדשים או חשבונות שירות שהוכנסו בגרסה החדשה יותר של היברידי. מדריך השדרוג יכלול את כל המשאבים שצריך למחוק ואת השלבים למחיקה שלהם.

מחיקת סביבה



להלן השלבים למחיקת כל המשאבים הקשורים לסביבה מאשכול הקוברנטס שלך:

  1. קבל את שם הסביבה CR. ניתן לעשות זאת על ידי קבלת כל הסביבות:

    kubectl get env -n ${APIGEE_NAMESPACE}
    

    אחסן את שם המשאב במשתנה הסביבה APIGEE_ENV.

  2. מחק את מפתחות ההצפנה של הסביבה. לדוגמה, אם לא שיניתם את השם של מפתחות ההצפנה, אתם יכולים למחוק אותם באמצעות הפקודה:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
    
  3. מחיקה של סודות של חשבון שירות ב-Google Cloud:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    
  4. מחיקה של חשבונות שירות ב-Kubernetes:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  5. מוחקים את המשאב המותאם אישית של סביבת Apigee:

    kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
    

מחיקת הגדרה משולבת



להלן השלבים למחיקת כל המשאבים הקשורים ל-apigee hybrid מאשכול ה-kubernetes שלך:

  1. תצטרך למחוק את משימות הגדרת המשתמש והגדרת הסכימה של 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')
    
  2. תצטרך למחוק את רכיבי משטח הנתונים ההיברידי של ה-apigee שנפרסו. השתמש בפקודה הבאה כדי למחוק את כל הרכיבים:

    kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
    
  3. השלב הזה נדרש רק אם לא הסתמכתם על שם ברירת המחדל של סודות חשבון השירות של 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}')
    
  4. במקרה של OpenShift, תצטרכו למחוק scc (אילוצי הקשר אבטחה) שנוצרו במהלך התקנת apigee hybrid.

    kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
    
  5. הפעל את הפקודה שלהלן כדי למחוק תפקידים, תפקידי חיבור, 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
    
  6. הפעל את הפקודה הבאה כדי למחוק את מרחב השמות של apigee

    kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
    

    לחלופין, השתמשו בפקודה:

    kubectl delete $APIGEE_NAMESPACE
    

התקנה מרובת מופעים

הגדרה מרובת מופעים מתייחסת להגדרה היברידית שיכולה להתפרס על פני מספר אזורים או גם בתוך אותם אזורים. Apigee ממליצה לארגן את התצורות של המופע השני במבנה ספריות נפרד מכיוון שתצורות הסביבה (רפליקות וכו') שונות באופן בלתי נמנע בין מופעים. התצורות של כל מופע מנותקות ומאורגנות באופן עצמאי במבני התיקיות המתאימים להן.

לדוגמה - עבור הגדרה אקטיבית-פסיבית בתרחיש מרובה אזורים, ייתכן שתרצו להגדיר אזור שני במצב המתנה חם עם גדלים ותצורות שונים.

במבנה התיקיות למטה, ניתן ליצור עותק של ספריית instance1 בשם instance2 ולשנות את תצורות מאגר הנתונים ו-ingress לפי הצורך.

מבנה תיקיות 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 בין אשכולות Kubernetes בכל האזורים (ניתן להשתמש בפורטי 7000 כאפשרות גיבוי במהלך פתרון בעיות). אפשר לעיין גם במאמר הגדרת יציאות.

ניתן להשתמש בכלי כמו ntpdate כדי לוודא שזמני השרת מסונכרנים.


הגדרת מארח ה-seed במספר אזורים

  1. צור עותק של התיקייה $INSTANCE_NAME מהמופע הקיים שלך והוסף אותו תחת תיקיית instances.
  2. שנה את הערך של שדה מרחב השמות אם הוא שונה ממרחב השמות של instance1.
  3. בצע את השלבים המפורטים בציון אישורי TLS של ingress כדי לשנות את תצורת ingress עבור המופע השני.
  4. מידע על הגדרת כתובת ה-IP של מאזן העומסים עבור המופע השני זמין במאמר בנושא ניהול שער כניסה של Apigee.



  5. הגדר את ההקשר של kubectl לאשכול המקורי לפני אחזור שם ה-seed

    kubectl config use-context original-cluster-name
    
  6. הפעילו את הפקודה kubectl הבאה כדי לזהות כתובת מארח seed עבור קסנדרה באזור הנוכחי.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. כל אחת מכתובות ה-IP של הפוד שהוחזרו מהפקודה הקודמת יכולה להיחשב כמארח seed רב-אזורי.

  8. במקרה השני, יש להגדיר את הערך של multiRegionSeedHost בקובץ CR של מאגר הנתונים של apigee תחת ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml

הגדר את המופע החדש

  1. הגדר את ההקשר לאשכול הקיים

    kubectl config use-context existing-cluster-name
    
  2. ייצוא סוד apigee-ca לקובץ

    kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
    
  3. מגדירים את ההקשר לשם האשכול של האזור החדש:

    kubectl config use-context NEW_CLUSTER_NAME
    
  4. ייבא את הסוד לאשכול החדש

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  5. התקן היברידי במופע החדש (אזור) על ידי ביצוע השלבים המפורטים ביצירת משאבי אתחול ובקר.

  6. מגדירים את Cassandra בכל הפודים במרכזי הנתונים החדשים. קבל את apigeeorg מהאשכול באמצעות הפקודה הבאה:

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. צור קובץ משאב מותאם אישית של שכפול נתונים של קסנדרה (YAML). לקובץ יכול להיות כל שם שהוא. בדוגמאות הבאות, שם הקובץ יהיה 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 הוא אותו מרחב שמות שנבחר עבור המופע השני. זה בדרך כלל "אפיג'י".
    • APIGEEORG_VALUE הוא הערך שמתקבל מהפקודה kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" בשלב הקודם.
    • SOURCE_REGION הוא הערך של מרכז הנתונים של קסנדרה ממצב ה-nodetool מאשכול המקור.
  8. החל את CassandraDataReplication באמצעות הפקודה הבאה:

    kubectl apply -f datareplication.yaml
    
  9. כדי לבדוק את סטטוס הבנייה מחדש, משתמשים בפקודה הבאה.



    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
    }
    
  10. בודקים את תהליכי הבנייה מחדש ביומנים. בנוסף, בודקים את גודל הנתונים באמצעות הפקודה 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
    
  11. הסר את multiRegionSeedHost מ- CR של מאגר הנתונים של apigee והפעל את הפקודה הבאה כדי להחיל את השינוי

    kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
    
  12. בדיקת הסטטוס של אשכול Cassandra

    הפקודה הבאה שימושית כדי לראות אם הגדרת האשכול הצליחה בשני מרכזי נתונים. הפקודה בודקת את הסטטוס של nodetool בשני האזורים.

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
    
    Datacenter: 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
    

פתרון בעיות

מדריך תמיכה, אבחון ופתרון בעיות

https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/troubleshooting-apigee-hybrid.

ניקוי ידני לאחר שימוש ב-forceDelete בהגדרה של Apigee Hybrid מרובת אזורים

  • בדוגמה הבאה יש 2 אזורים – us-east1 ו-us-west1.
  • באזור us-west1, מאגר הנתונים של apigee נמחק באמצעות מחיקה כפויה.
  • באזור us-east1, קסנדרה עדיין פעילה.
  • אימות ש-apigeeds נמחק באמצעות הפקודה

    kubectl get apigeeds -n apigee
    No resources found in apigee namespace.
    
  • שנה את ההקשר של kubectl לאזור השני שבו אשכול הקסנדרה עדיין פועל (כאן us-east1).

  • ודא שמאגר הנתונים במצב הפעלה

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • בצע באחד מתרמילי הקסנדרה באזור למעלה (כאן 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} status
    
    Datacenter: 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 status
    
    
    Datacenter: 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 apigee
    
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    0/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                          0/1            7s         7s
    
    
    kubectl delete job apigee-cassandra-user-setup--apigee--0d2504c
    
  • המתן להשלמת משימת הגדרת המשתמש

    kubectl get jobs -n apigee
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    1/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                      1/1           7m                7m
    
  • מוודאים שהאזור שנמחק לא מופיע במרחבי המפתחות.

  • צור פוד ניפוי שגיאות של קסנדרה.

    • עקוב אחר גרסה 1.5+ של היבריד, עקוב אחר התיעוד של מדריך פתרון הבעיות של קסנדרה (למשל עבור היבריד 1.5 - קישור, היבריד 1.6 - קישור) ולאחר מכן הפעל את הקוד בפוד שנוצר.
  • התחבר ל-cqlsh בפוד ניפוי שגיאות באמצעות הפקודה

    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)