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


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


במסמך הזה:

תצוגה מקדימה


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

משוב

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


סקירה כללית

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

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

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

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

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

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

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

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

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

הגדרת Apigee Hybrid

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

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

כלים

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

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

  • kubectl גרסה 1.23 ואילך. מידע נוסף על התקנת kubectl זמין במאמר Install Tools: kubectl (התקנת כלים: kubectl) במסמכי התיעוד של Kubernetes.

משתנים נפוצים שמופיעים במדריך הזה

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

  • APIGEE_NAMESPACE: מרחב השמות של Apigee. ערך ברירת המחדל הוא apigee. עם זאת, אפשר להשתמש במרחב שמות אחר.
  • CLUSTER_NAME: השם של האשכול שבו מתקינים את Apigee Hybrid. זהו האשכול שיוצרים בשלב 1: יצירת אשכול
  • CLUSTER_LOCATION: האזור של האשכול. ההנחיות במדריך הזה מבוססות על ההנחה שאתם משתמשים באשכול אזורי. אם אתם משתמשים באשכול אזורי, תוכלו להיעזר בהוראות שבשלב 1: יצירת אשכול.
  • ENV_GROUP: השם של קבוצת הסביבות בהתקנת Apigee Hybrid. זו קבוצת הסביבות שיוצרים בשלב 3: יצירת קבוצת סביבות. אפשר ליצור כמה קבוצות סביבות.
  • ENV_NAME: השם של קבוצת הסביבות בהתקנת Apigee Hybrid. זו קבוצת הסביבות שיוצרים בשלב 3: יצירה של קבוצת סביבות. אפשר ליצור כמה קבוצות סביבות.
  • INSTALL_DIR: הספרייה שבה מתקינים את Apigee Hybrid. כברירת מחדל, זוהי ספריית המשנה apigee-hybrid-install/ של הספרייה שבה הורדתם את קובץ ההתקנה, למשל: /myhybrid/apigee-hybrid-install/. זוהי ספריית הבסיס של מבנה הקבצים שמתועד במאמר מבנה התיקיות בהגדרה של Apigee Hybrid.
  • INSTANCE_DIR: הספרייה של מופע ספציפי של Apigee Hybrid. כברירת מחדל, המופע הראשון נקרא instance-1. ספריית המופע היא ספריית משנה של ${INSTALL_DIR}/overlays/instances/. אפשר לציין כל שם למופעי ה-Hybrid. ראו התקנה של כמה מופעים.
  • ORG_NAME: השם של הארגון שלכם ב-Apigee Hybrid. המזהה הזה צריך להיות זהה למזהה הפרויקט ב-Google Cloud. שלב 2: יצירת ארגון

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

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


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

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

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

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

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

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

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



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

מורידים ומכינים את קובצי ההגדרה:

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

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

  2. cd לספרייה apigee-hybrid-install/

  3. הופכים את סקריפט ההגדרה לסקריפט שניתן להרצה:

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

יצירת מרחב שמות

יוצרים מרחב שמות של Kubernetes באשכול, שיכיל את כל רכיבי האשכול של Apigee.

kubectl create namespace apigee


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

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

    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 שאליה הן מתייחסות, ולא מומלץ לערוך את התגים האלה. בנוסף, מומלץ לא לערוך את שמות התמונות כדי שאפשר יהיה ליצור את נתיב התמונה הסופי כמו שמוסבר במרכז התמונות.
  2. מגדירים את הערך של השדה imageHub שנמצא בקובץ apigee-hybrid-config.yaml לנתיב המארח של המאגר הפרטי. (פרטים נוספים זמינים במאגר התמונות).

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

כך תוכלו לוודא שכל הרכיבים של Apigee hybrid ישתמשו בתמונות מהמאגר הפרטי שלכם.

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



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

  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 ingress gateway. אתם יכולים:

  • אפשר להשתמש באישורים שחתמה עליהם רשות מוכרת באמצעות השלבים שמפורטים במאמר קבלת אישורי TLS: דוגמה | Apigee X
  • או ליצור אישורים בחתימה עצמית.

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

openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650

ייווצרו שני קבצים בשמות tls.key ו-tls.crt.

לאחר מכן צריך ליצור סוד בפורמט הבא. אפשר להשתמש ב-kubectl create או ב-kubectl apply כמו שמוסבר במאמר בנושא שימוש בזוג מפתחות או באישור מותאם אישית עבור רשות חתימת אישורים (אופציונלי):

apiVersion: v1
kind: Secret
metadata:
  name: "{ORG_NAME}-{ENV_GROUP_NAME}"
  namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
  cert: |
    {BASE64_ENCODED_TLS_CRT}
  key: |
    {BASE64_ENCODED_TLS_KEY}

---

דוגמה ליצירת הסוד באמצעות kubectl create:

kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
  --cert="tls.crt" \
  --key="tls.key" \
  -n {$APIGEE_NAMESPACE}


עדכון פריסת ה-ingress

כדי ליצור או לשנות פריסות של תעבורת נכנסת, צריך לשנות את השדה spec.components.ingressGateways במשאב המותאם אישית ApigeeOrganization ב-bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml.

כברירת מחדל, אנחנו יוצרים פריסת Ingress אחת עם פרמטרים שמוגדרים כברירת מחדל(ערכי ברירת המחדל מוצגים במסמכי העיון של CR ):

ingressGateways:
- name: "prod-1"

דוגמאות:

א. שינוי שדות של שירותי כניסה

ingressGateways:
- name: "prod-1"
  serviceSpec:
    annotations:
      {KEY}: ${VALUE}
    loadBalancerIP: ${IP}

ב. שינוי הערך המינימלי או המקסימלי של העותק

ingressGateways:
- name: "prod-1"
  ​​autoScaler:
    minReplicas: 4
    maxReplicas: 10

ג. הוספת פריסת Ingress חדשה

ingressGateways:
- name: "prod-1"
- name: "prod-2"

הגדרת חשבונות שירות מותאמים אישית ב-Google Cloud



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

./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets  --namespace APIGEE_NAMESPACE

כאשר APIGEE_NAMESPACE הוא מרחב השמות המותאם אישית. מרחב השמות שמוגדר כברירת מחדל הוא apigee.

פרטים נוספים על הדגלים מופיעים במאמר הסבר על הסקריפט.

גלילה ידנית

צריך לשמור את המפתחות של חשבון השירות ב-Google Cloud כסודות באשכול. קובץ ה-YAML של הסוד צריך להיות במבנה הבא:

apiVersion: v1
kind: Secret
metadata:
  name: "{NAME}"
  namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
  client_secret.json: |
    {BASE64_ENCODED_SA_KEY}

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

אתם יכולים לבחור שם אחר לסודות, אבל אז תצטרכו לבצע שינוי תואם ברכיב שבו נעשה שימוש בשם הסוד הזה. לדוגמה, אם תחליטו לשנות את השם של הסוד של חשבון השירות של זמן הריצה מ-apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} ל-my-runtime-svc, תצטרכו לבצע שינוי תואם ב-apigee-environment.yaml של הסביבה הזו.



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


חובה להשתמש באחת מהאפשרויות: הגדרת חשבונות שירות מותאמים אישית ב-Google Cloud או שימוש בזהויות לעומסי עבודה.


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

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

הפעלת Workload Identity

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

עריכה של קובצי YAML של משאבים

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

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

./tools/apigee-hybrid-setup.sh --fill-values

יצירה של משאבי אתחול ובקר

#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml

#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress

# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers

# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m

# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml

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

פועלים לפי השלבים במאמר שלב 8: הפעלת הגישה של הכלי לסנכרון, ומחליפים את שם חשבון השירות, apigee-non-prod או apigee-synchronizer, בשם apigee-all-sa של חשבון השירות שנוצר בתהליך ההתקנה החדש.


★ חשוב: הקפידו לשנות את שם חשבון השירות בהוראות שבקטע הפעלת הגישה של כלי הסנכרון. אחרת, הפעלת הגישה לכלי הסנכרון תיכשל.


יצירת רכיבי מישור הנתונים של Apigee

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

# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

כדי להתקין את כל הרכיבים.

המתנה להפעלת המשאבים

kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m

התאמה אישית של ההתקנה של cert-manager במרחב שמות מותאם אישית

כדי להתאים אישית את מרחב השמות שבו פועל cert-manager, פועלים לפי השלבים הבאים.

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

  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 ורכיבים

סקירה כללית

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

  • ‫Bases הם קבצים שסופקו על ידי Apigee, ויכול להיות שהם ישתנו בין כל מהדורה חדשה של Hybrid. לא מצפים מכם לשנות את הקבצים האלה. הקבצים האלה מכילים כמה ערכי ברירת מחדל שסופקו על ידי Apigee. כל הקבצים בתיקייה bases/ ברמה העליונה מכילים את ה-Bases האלה
  • שכבות-על מכילות את הגדרות המשתמש ומשמשות כאמצעי לשינוי ערכי ברירת המחדל שצוינו בבסיסים. כל הקבצים בתיקייה ברמה העליונה overlays/ מכילים את שכבות העל האלה



איך משתמשים ברכיבים

תיקיות המשנה בתוך ספריית overlays/ ברמה העליונה בנויות בצורה כזו שמאפשרת להפעיל (או להשבית) תכונה נוספת מסוימת על ידי הוספת הערה (או הסרת הערה) לשורות מסוימות בקובצי kustomization.yaml.

לדוגמה, כך נראה מבנה התיקיות overlays/instances/{INSTANCE_NAME}/telemetry:

telemetry
├── components
   ├── http-proxy
   ├── imagepullsecret
   ├── logger
   ├── metrics
   ├── nodeselector
   ├── openshift-scc
   ├── workload-identity-logger
   └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml

כך קובצי telemetry/kustomization.yaml ייראו כנראה כברירת מחדל:

resources:
- apigee-telemetry.yaml

components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc

אנחנו רואים שהשורה ./components/logger הוסרה כהערה, מה שאומר שלא הפעלנו את uGoogle Clod logger כברירת מחדל. כדי להפעיל את האפשרות הזו, פשוט מבטלים את ההערה בשורה הזו:

components:

- ./components/logger

באופן דומה, כדי להשבית מדדים, אפשר להוסיף הערה לשורה ./components/metrics:

...
components:
...
# - ./components/metrics
…

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

OpenShift

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

  • overlays/initialization/openshift/kustomization.yaml . בקטע resources:, מבטלים את ההערה בשורה:

    # - ../../../bases/initialization/openshift/
    
  • overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yaml ביטול סימון כהערה:

    # - ./components/openshift-scc
    

    אם השדה components: עדיין מופיע כהערה, צריך לבטל את ההערה.

  • overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yaml ביטול סימון כהערה:

    # - ./components/openshift-scc
    

    אם השדה components: עדיין מופיע כהערה, צריך לבטל את ההערה.

אחרי כן אפשר להמשיך לשלבי ההתקנה.

imagepullsecret

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

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

  • overlays/controllers/apigee-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}
    

workload-identity

למאגרי נתונים שונים במערכת האקולוגית של Apigee Hybrid נדרשות הרשאות כדי לבצע קריאות מסוימות ל-API במישור הבקרה או במישור הניהול של Apigee. זהות עומס העבודה היא אחת מהדרכים להעניק את ההרשאות האלה לפודים (ולקונטיינרים שבתוכם). הנה כמה מקורות מידע שימושיים לקריאה נוספת בנושא: – הצגת Workload Identity: אימות משופר לאפליקציות GKE | Google Cloud Blogשימוש ב-Workload Identity | תיעוד של Kubernetes Engine | 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

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

כדי להשתמש ב-Workload Identity, צריך להעניק את ההרשאות הרלוונטיות בפרויקט Google Cloud באמצעות:

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
        ${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com

כאשר: ‪ - ${ORG_NAME} – שם הארגון שלכם ב-Apigee. ‪ - ${APIGEE_NAMESPACE} – מרחב השמות של Kubernetes שבו רכיבי Apigee הותקנו. בדרך כלל זה יהיה apigee, אלא אם המשתמש שינה את זה באופן מפורש במהלך ההתקנה. ‪ - ${KSA_NAME} – שם מרחב השמות של Kubernetes. תצטרכו להריץ את הפקודה הזו לכל חשבון שירות של Kubernetes שמוזכר במאמר חשבונות שירות של Kubernetes. ‪ - ${GSA_NAME} – שם חשבון השירות של Google Cloud. אם לא ביצעתם שינויים במהלך ההתקנה, הערך יהיה apigee-all-sa. אם הגדרתם כמה חשבונות שירות של Google Cloud לרכיבים נפרדים, תצטרכו להתאים את KSA_NAME ל-GSA_NAME המתאים. תוכלו להשוות בין הטבלאות במאמר חשבונות שירות של Google Cloud לבין הטבלאות במאמר חשבונות שירות של Kubernetes כדי למצוא את המקבילות.

הפעלה:

מבטלים את הסימון כהערה (uncomment) בשורה ./components/workload-identity בקובצי kustomization.yaml המתאימים בכל מקום שנדרש. שימו לב שבטלמטריה יש תוספים נפרדים של Workload Identity לרכיבי metrics ו-logger שאפשר להפעיל בנפרד.

שימוש:

  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}
    

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

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

‫gcs-backup ו-gcs-restore

אפשר להשתמש ברכיב הזה של 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 apigeecassandra
      
  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 כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS>:${HOST_PORT}

ביצוע גיבוי

כדי לבצע את הגיבוי, מריצים את הפקודה הבאה:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

כדי להחיל את השינויים ולהפעיל את הגיבוי:

שינויים לשחזור בלבד

  • components/gcs-restore/apigee-datastore-patch.yaml
    • חובה: משנים את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים. התיאור תואם ל-dbStorageBucket שמתואר כאן.
  • components/gcs-restore/job-patch.yaml
    • חובה: משנים את הערך של משתנה הסביבה DATABASE_STORAGE_BUCKET, שיהיה מהצורה gs://BUCKET_NAME ויצביע על קטגוריית Google Cloud Storage שבה צריך לגבות את הנתונים.
    • חובה לשנות את הערך של משתנה הסביבה BACKUP_SNAPSHOT_TIMESTAMP. התיאור תואם לפעולת השחזור:snapshotTimestamp כפי שמתואר כאן.
    • אופציונלי משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

ביצוע השחזור:

למידע נוסף על שחזור גיבויים, ראו שחזור גיבויים | Apigee X | Google Cloud

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

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

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

non-gcs-backup ו-non-gcs-restore

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

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

  • overlays/instances/{INSTANCE_NAME}/datastore

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

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



    אפשר ליצור את הסוד של Kubernetes באמצעות הפקודה הבאה:

    kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \
            --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \
            -n "${APIGEE_NAMESPACE}"
    

    כאשר:

    • ${PATH_TO_SSH_PRIVATE_KEY} – הנתיב לקובץ שמכיל את המפתח הפרטי של SSH
    • ${APIGEE_NAMESPACE} – מרחב השמות של Kubernetes שבו רכיבי Apigee הותקנו. בדרך כלל זה יהיה apigee, אלא אם משנים את זה במפורש במהלך ההתקנה

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

הפעלה:

  • כדי להפעיל גיבוי, צריך לבטל את ההערה בשורה ./components/non-gcs-backup בקובץ datastore kustomization.yaml.
  • כדי לשחזר גיבוי, צריך לבטל את ההערה בשורה ./components/non-gcs-restore בקובץ datastore kustomization.yaml.

שינויים לגיבוי בלבד

  • components/non-gcs-backup/apigee-datastore-patch.yaml
  • components/non-gcs-backup/cron-patch.yaml
    • חובה לשנות את spec.schedule כדי לציין את תדירות הגיבוי. השדה מקבל את פורמט התזמון הרגיל של Crontab. התיאור תואם ללוח הזמנים שמתואר כאן.
    • חובה לשנות את הערך של BACKUP_SERVER_IP. התיאור תואם ל-BACKUP_SERVER_IP כפי שמתואר כאן.
    • חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם ל-BACKUP_STORAGE_DIR כפי שמתואר כאן.
    • אופציונלי: משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

ביצוע גיבוי

כדי לבצע את הגיבוי, מריצים את הפקודה הבאה:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

כדי להחיל את השינויים ולהפעיל את הגיבוי:

שינויים לגיבוי בלבד

  • components/non-gcs-restore/apigee-datastore-patch.yaml
    • חובה לשנות את הערך של BACKUP_SERVER_IP. התיאור תואם לBACKUP_SERVER_IP מה שמתואר כאן.
    • חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם לBACKUP_STORAGE_DIR מה שמתואר כאן.
  • components/non-gcs-restore/job-patch.yaml
    • חובה שינוי הערך של משתנה הסביבה BACKUP_SNAPSHOT_TIMESTAMP. התיאור תואם ל-restore:snapshotTimestamp כפי שמתואר כאן.
    • חובה לשנות את הערך של BACKUP_SERVER_IP. התיאור תואם לBACKUP_SERVER_IP מה שמתואר כאן.
    • חובה לשנות את הערך של BACKUP_STORAGE_DIR. התיאור תואם לBACKUP_STORAGE_DIR מה שמתואר כאן.
    • אופציונלי משנים את הערך של HTTP_PROXY_URL כך שיצביע על שרת proxy שהוגדר. הפורמט יכול להיות כזה:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

ביצוע השחזור:

סקירה כללית על שחזור גיבויים זמינה במאמר סקירה כללית על שחזור של Cassandra.

  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-client

הוראות מפורטות מופיעות במאמר הפעלת לקוחות 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}
    

non-sni-client

מקביל למאמר הקיים How to configure a non-SNI client | Apigee.

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

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

הפעלה:

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

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

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

שימוש:

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

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

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

הפעלה:

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

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

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

שימוש:

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

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

במספר אזורים

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

הפעלה:

ביטול ההערה בשורה './components/multi-region' בקובץ datastore/kustomization.yaml

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

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

    • חובה source.region שם מרכז הנתונים של Cassandra שממנו יתבצע שחזור הנתונים. אפשר לזהות אותו באמצעות הפקודה הבאה באשכול המקור:
    kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'
    
  • components/multi-region/patch.yaml

    • חובה spec.components.properties.multiRegionSeedHost כתובת ה-IP של ה-Pod של אחד מ-Pods של Cassandra של המקור. אנחנו יכולים להשתמש ב:
    kubectl get pods -n ${APIGEE_NAMESPACE} -o wide
    
    • כדי לראות את רשימת כל הפודים ולקבל את כתובת ה-IP של פוד cassandra, משתמשים בפקודה הבאה:
    kubectl get pods -o wide -n apigee
    

    הפלט אמור להיראות כך:

    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
    

מידע נוסף זמין במאמר תנאים מוקדמים ל-GKE בקטע 'פריסה מרובת אזורים ב-GKE, ב-GKE on-prem וב-AKS'.

שימוש:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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. שומרים את הקובץ ויוצאים.

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

הסבר על הסקריפט

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

אפשר להריץ את הפקודה ./tools/apigee-hybrid-setup.sh --help כדי לראות רשימה של דגלים נתמכים ולקבל עזרה נוספת לגבי הסקריפט. בשלב הזה יש תמיכה בדגלים הבאים:

  • --namespace כברירת מחדל, הסקריפט מתקין את כל הרכיבים במרחב השמות apigee. כדי לשנות את ההתנהגות הזו, מציינים את שם מרחב השמות באמצעות הדגל הזה.
  • --org משמש לציון השם של הארגון ב-Apigee. אם לא מציינים שם, ברירת המחדל היא הפרויקט ב-Google Cloud שנבחר כרגע ב-gcloud
  • --envgroup משמש כדי לספק את השם של קבוצת הסביבות בארגון. אם לא מציינים שם, המערכת מנסה לשלוח שאילתה לממשקי ה-API של מישור הבקרה כדי לקבוע את השם של קבוצת הסביבות. אם נמצאות כמה קבוצות סביבות, המערכת מחזירה שגיאה והסקריפט יוצא.
  • --env משמש לציון שם הסביבה בארגון. אם לא מצוין שם, המערכת מנסה לשלוח שאילתה לממשקי ה-API של מישור הבקרה כדי לקבוע את שם הסביבה. אם נמצאות כמה סביבות או שהסביבה לא נכללת בקבוצת הסביבות, המערכת מחזירה שגיאה והסקריפט יוצא.
  • --cluster-name שם אשכול Kubernetes.
  • --cluster-region האזור שבו נמצא אשכול Kubernetes
  • --gcp-project-id מזהה הפרויקט ב-Google Cloud שבו קיים אשכול Kubernetes
  • --ingress-domain מציין את שם המארח או שם הדומיין שישמשו ליצירת אישורי TLS בחתימה עצמית עבור istio ingress-gateway. אם לא מציינים ערך, המערכת מנסה לקבוע את הערך על ידי שליחת שאילתה לממשקי ה-API של מישור הבקרה כדי לקבל את הערך מקבוצת הסביבות. אם היו בעיות בקביעת envgroup או אם הוגדרו כמה שמות מארחים עבור envgroup, השגיאה מוחזרת והסקריפט יוצא.
  • --generate-internal-tls-certs המערכת תיצור סוד של Kubernetes בשם apigee-ca שמכיל אישור וזוג מפתחות שנוצרו על ידינו.
  • --create-ingress-tls-certs ייווצר סוד בשם {ORG_NAME}-{ENV_GROUP_NAME} (שנגזר משם הארגון ומשם קבוצת הסביבות) במרחב השמות istio-system, שיכיל אישור וצמד מפתחות שישמשו לתקשורת TLS. שם הדומיין שמשמש ליצירת האישורים האלה נגזר מהערך שמופיע בהגדרות של קבוצת הסביבות. במקרה של התנגשויות (למשל, אם נמצא כמה דומיינים), יוצגו הודעות שגיאה מתאימות.
  • --create-gcp-sa-and-secrets יוצר חשבון שירות יחיד ב-Google Cloud בפרויקט בענן של Google, מוריד את המפתחות ואז יוצר את הסודות של Kubernetes שמכילים את המפתח. השמות של הסודות מופיעים בחשבונות שירות ב-Google Cloud.
  • --fill-values מחליף את הערכים של org, ‏ env, ‏ envgroup ושמות אחרים בכל מקום שבו הם נדרשים בקובצי ה-YAML השונים.
  • --apply-configuration הפקודה הזו תיצור את רשויות אישורי ההצפנה, הגדרות המשאבים בהתאמה אישית, ווּבּהוּקים, תפקידים ומשאב הבקרה. המשאבים ייווצרו בסדר הנכון והפקודה תיחסם עד שכולם יהיו תקינים.
  • -- rename-directories משנים את השם של הסביבה ושל קבוצת הסביבות לשמות של הסביבה הנכונה ושל קבוצת הסביבות הנכונה.
  • --verbose הצגת פלט מפורט לניפוי באגים.
  • --help הצגת פרטי השימוש.
  • --setup-all כל המשימות שאפשר לבצע באמצעות הסקריפט הזה יופעלו

מבנה התיקיות של הגדרת Apigee Hybrid

כברירת מחדל, התיקייה apigee-hybrid-setup כוללת את המבנה ההיררכי הבא:

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── apigee-ingressgateway-manager
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   ├── datastore
      └── backup-and-restore
          ├── backup
             ├── cronjob.yaml
             └── kustomization.yaml
          ├── common
             ├── kustomization.yaml
             ├── rbac.yaml
             └── tls-certificate.yaml
          └── restore
              ├── job.yaml
              └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
   └── api_references
       ├── v1alpha1.md
       └── v1alpha2.md
├── kokoro
   ├── build.sh
   ├── common.cfg
   ├── continuous.cfg
   ├── presubmit.cfg
   └── release.cfg
├── LICENSE
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── apigee-ingressgateway-manager
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate-patch.yaml
         ├── apigee-serving-cert-patch.yaml
         ├── components
            └── disable-apigee-root-certificate-generation
                └── kustomization.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         ├── envoyfilter-1.11.yaml
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-ingressgateway-manager
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── multi-region
                    ├── cassandra-data-replication.yaml
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── non-gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── non-gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── kustomization.yaml
                         ├── patch.yaml
                         └── service-accounts.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
                  └── workload-identity-metrics
                      ├── kustomization.yaml
                      ├── patch.yaml
                      └── service-accounts.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── certificate-org-envgroup.yaml
   ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
   ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
   ├── secret-gcp-sa-key.yaml
   └── secret-ingress-tls-cert-key.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── apigee-pull-push.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

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

התיקייה שלמעלה מכילה מניפסטים של Kubernetes עבור זמן הריצה של Apigee hybrid, ומשתמשת ב-Kustomize לניהול התצורה. המניפסטים מאורגנים על סמך הרעיון של Kustomize bases & overlays. התיקייה bases מכילה את התצורה המינימלית הנדרשת לכל רכיב של Apigee. התיקייה overlays מכילה כמה תכונות נוספות(תצורות) שמוגדרות כרכיבים. אפשר להפעיל רכיב על ידי ביטול ההערה של הפניה לרכיב בקובץ kustomization.yaml.

דוגמה : כדי להפעיל את gcs-backup עבור מאגר הנתונים של Apigee, הרכיב gcs-backup בוטל כהערה בקובץ customization.yaml שמוצג בהמשך.

נתיב : ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml

namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}

resources:
- apigee-datastore.yaml

components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore

כל ערך שנדרש להתאמה אישית צריך להיות מוגדר בקובץ patch.yaml המתאים ל-gcs-backup. בקובץ שלמטה, המשתמש צריך להגדיר את הערך של CLOUD_STORAGE_BUCKET_PATH

נתיב: $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: apigee-cassandra-backup
  namespace: apigee
spec:
  schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: apigee-cassandra-backup
            env:
            - name: APIGEE_CLOUDPROVIDER
              value: "GCP"
            - name: DATABASE_STORAGE_BUCKET
              value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
            volumeMounts:
            - name: apigee-cassandra-backup
              mountPath: /var/secrets/google
          volumes:
          - name: apigee-cassandra-backup
            secret:
              secretName: "apigee-cassandra-backup-and-restore-svc-account"

באופן דומה, אפשר להפעיל כל תכונה או הגדרה שדורשות התאמות אישיות על ידי ביטול ההערה של הרכיב בקובץ kustomization.yaml של רכיב apigee. בנוסף, צריך להגדיר את הערכים התואמים בשדות בקובץ patch.yaml של הרכיב בהתאם לדרישות.

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

bases

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

שכבות-על

התיקייה הזו מכילה את תבניות הרכיבים של kustomize להגדרות הנוספות

אתחול

namespaces.yaml

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

אישורים

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

rbac

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

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

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

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

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

openshift

מכיל את ההגדרה של SecurityContextConstraints ב-OpenShift.

שלטים רחוקים

apigee-controller
apigee-hybrid-config.yaml

מכיל ConfigMap שמועבר כקלט ב-apigee-controller-manager.yaml. ה-ConfigMap הזה מכיל הגדרות כמו imageHub, ‏ imagePullSecrets, ‏ forwardProxy ועוד.

apigee-controller-deployment.yaml

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

istiod

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

apigee-ingressgateway-manager-deployment-patch.yaml

מכיל שירות ופריסה של Istiod. זהו istiod פרטי שמשמש רק לתרחישי שימוש של Apigee.

instances/{instanceName}

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

מכיל את המשאב המותאם אישית ApigeeDatastore שמנהל את Cassandra.

secrets.yaml

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

redis
apigee-redis.yaml

מכיל את המשאב המותאם אישית ApigeeRedis שמנהל את Redis.

secrets.yaml

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

ארגון
apigee-organization.yaml

הוא מכיל את ApigeeOrganization המשאב המותאם אישית שמנהל רכיבי משנה אחרים כמו connectAgent, ‏ watcherAndSynchronizer, ‏ MART,‏ UDCA ו-Ingress.

secrets.yaml

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

environments

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

dev
apigee-environment.yaml

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

secrets.yaml

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

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

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

secrets.yaml

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

route-config
dev-envgroup
apigee-route-config.yaml

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

secrets.yaml

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

אבחון

diagnostic-collector.yaml

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

כלים

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

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

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



  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. התקנת Vault

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

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

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

      kubectl exec -it vault-0 -- /bin/sh
      
    2. הפעלת שיטת אימות Kubernetes

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

    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.ה)

    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 Hybrid



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

יצירת גיבוי

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

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

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

לא צריך לבצע את השלב הזה בכל פעם, אבל תצטרכו לשדרג את פלטפורמת Kubernetes, כמו Kubernetes,‏ OpenShift ורכיבים כמו cert-manager,‏ Cassandra וכו', אם אין יותר תמיכה בגרסה שלהם בגרסה חדשה יותר של Apigee Hybrid. במסמכי התיעוד יופיעו גרסאות נתמכות של פלטפורמות ורכיבים.

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

מורידים את המאגר ומחליפים את התיקייה bases ואת התיקייה tools בהגדרת apigee hybrid הקיימת בתיקייה חדשה יותר:

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

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

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

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

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

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

  1. שחזור של apigee-hybrid-setup

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

  2. ביטול שינויים ברכיבי Kubernetes

    החלת השינויים ב-CR של apigee

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. Rollback controller

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

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

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

מחיקת סביבה



כדי למחוק את כל המשאבים שקשורים לסביבה מאשכול Kubernetes:

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

    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
    

התקנה של כמה מופעים

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

לדוגמה – בהגדרה של Active-Passive בתרחיש של כמה אזורים, יכול להיות שתרצו להגדיר אזור שני במצב המתנה פעיל עם גדלים והגדרות שונים.

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

apigee-hybrid-setup מבנה התיקיות להגדרה של כמה מופעים.]

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── istiod
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── ingress
          ├── envoyfilter-1.11.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── instances
   └── instance1 (Add the 2nd instance under instances directory similar to instance1)
       ├── datastore
          ├── apigee-datastore.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── environments
          ├── kustomization.yaml
          └── test
              ├── apigee-environment.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
       ├── kustomization.yaml
       ├── organization
          ├── apigee-organization.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── redis
          ├── apigee-redis.yaml
          ├── components
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── route-config
          ├── kustomization.yaml
          └── test-env-group
              ├── apigee-route-config.yaml
              ├── components
                 ├── http-and-non-sni-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 ├── http-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 └── non-sni-client
                     ├── apigee-route.yaml
                     └── kustomization.yaml
              └── kustomization.yaml
       └── telemetry
           ├── apigee-telemetry.yaml
           ├── components
              ├── http-proxy
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── imagepullsecret
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── logger
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── metrics
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── nodeselector
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── workload-identity-logger
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
              └── workload-identity-metrics
                  ├── apigee-workload-identities.yaml
                  ├── kustomization.yaml
                  └── patch.yaml
           └── kustomization.yaml
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── istiod
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-embedded-ingress-controller
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── apigee-workload-identities.yaml
                         ├── kustomization.yaml
                         └── patch.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── apigee-workload-identities.yaml
                     └── kustomization.yaml
                  └── workload-identity-metrics
                      ├── apigee-workload-identities.yaml
                      ├── kustomization.yaml
                      └── patch.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── ingress-certificate.yaml
   ├── ingress-cert-secret.yaml
   └── service-account-key-secret.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

הגדרה של כמה מופעים ב-GKE

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

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

  • הגדרת אשכולות Kubernetes בכמה אזורים(זהים או שונים) עם בלוקים שונים של CIDR
  • הגדרת תקשורת בין אזורים
  • פותחים את הפורטים 7000 ו-7001 של Cassandra בין אשכולות Kubernetes בכל האזורים (יכול להיות שפורט 7000 ישמש כאפשרות גיבוי במהלך פתרון בעיות). אפשר לעיין גם במאמר בנושא הגדרת פורטים.

אפשר להשתמש בכלי כמו ntpdate כדי לוודא שהשעות בשרת מסונכרנות.


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

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



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

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

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. כל אחת מכתובות ה-IP של ה-Pod שמוחזרות מהפקודה הקודמת יכולה להיחשב כמארח ה-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. מתקינים את Hybrid במכונה (באזור) החדשה לפי השלבים שמפורטים במאמר יצירת משאבי אתחול ובקר.

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

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. יוצרים קובץ YAML של משאב מותאם אישית לשכפול נתונים של Cassandra. הקובץ יכול להיות עם כל שם. בדוגמאות הבאות, שם הקובץ יהיה datareplication.yaml. הקובץ צריך להכיל את הפרטים הבאים

    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: CassandraDataReplication
    metadata:
    name: REGION_EXPANSION
    namespace: NAMESPACE
    spec:
    organizationRef: APIGEEORG_VALUE
    force: false
    source:
      region: SOURCE_REGION
    

    כאשר:

    • ‫REGION_EXPANSION הוא השם שאתם נותנים למטא-נתונים האלה. אפשר לבחור שם כמו cassandra-data-replication
    • ‫NAMESPACE הוא אותו מרחב שמות שנבחר למופע השני. בדרך כלל זה 'apigee'.
    • ‫APIGEEORG_VALUE הוא ערך הפלט מהפקודה kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" בשלב הקודם.
    • ‫SOURCE_REGION הוא הערך של מרכז הנתונים של Cassandra מסטטוס כלי הצומת מאשכול המקור.
  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, ‏ Cassandra עדיין פועלת.
  • אימות המחיקה של apigeeds באמצעות פקודה

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

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

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • מריצים exec באחד מ-pods של Cassandra באזור העליון (כאן us-east1)

    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    apigee@apigee-cassandra-default-0:~$
    
  • בודקים את הסטטוס של nodetool. כל הצמתים באזור שנמחק (במקרה הזה us-west1) יופיעו כלא פעילים.

    apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} 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
    
  • מוודאים שהאזור שנמחק לא מופיע במרחבי המפתחות.

  • יוצרים פוד לניפוי באגים ב-Cassandra.

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

    apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
    Password:
    
  • מוודאים שהאזור us-west1 הוסר מכל מרחבי המפתחות

    ddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;
    
    keyspace_name              | durable_writes | replication
    ---------------------------+----------------+-----------------------------------------------------------------------------------
    cache_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      rtc_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_schema |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    quota_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kms_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                         system |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kvm_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
    (11 rows)