העברה של Apigee Hybrid ל-Helm מ-apigeectl

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

אפשר להעביר את כל הרכיבים של apigee בבת אחת, ואחרי הפעלת הכלי אפשר לבצע פעולות שדרוג של Helm לכל רכיב בנפרד.

במאמר התקנה וניהול של Apigee hybrid באמצעות תרשימי Helm מוסבר איך לנהל אשכולות היברידיים שהעברתם לניהול באמצעות Helm בעזרת הכלי הזה.

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

  • ‫Helm בגרסה 3.14.2 ומעלה.
  • קובץ kubeconfig תקין שמפנה לאשכול עם התקנה תקינה של Apigee Hybrid בגרסה 1.15.
  • הרשאות לשינוי המטא-נתונים וההערות במשאבים ב-Kubernetes של הרכיבים ההיברידיים שרוצים להעביר.

היקף

הכלי הזה תומך באפשרויות הבאות בזמן הריצה:

  • התאמה אישית של מרחב השמות ל-apigee משאבים. מרחב השמות שמוגדר כברירת מחדל: apigee
  • העברה של רכיבים היברידיים נבחרים בלבד. ברירת מחדל: כל הרכיבים מועברים
  • העברה של ארגון אחד בלבד
  • העברה של סביבה אחת בלבד
  • העברה של קבוצת סביבות אחת (apigee-virtualhost) בלבד
  • התאמה אישית של שמות גרסאות Helm לארגונים, לסביבות ולקבוצות סביבה.

מגבלות

  • הכלי הזה לא תומך בהתאמה אישית של שמות גרסאות Helm לרכיבים ההיברידיים הבאים: apigee-operator,‏ apigee-datastore,‏ apigee-redis,‏ apigee-telemetry ו-apigee-ingress-manager.
  • התאמות אישיות אינטראקטיביות שבוצעו בשמות של גרסאות Helm לארגונים, לסביבות ולקבוצות סביבה לא נשמרות באופן אוטומטי בין הפעלות. אפשר לערוך את הקובץ הזמני ולהשתמש בו כאפשרות בהרצות הבאות.
  • הסינון של הסביבה ושל קבוצת הסביבות מתבצע לפי שם בלבד. במקרים מסוימים, יכול להיות שכמה סביבות וקבוצות של סביבות יועברו באשכולות עם כמה ארגונים.

    לדוגמה, באשכול עם כמה ארגונים, עם הארגונים org1 ו-org2, אם הסביבה prod קיימת בשני הארגונים ורק --env=prod צוין, שתי הסביבות יועברו. אם רוצים להעביר רק סביבה אחת, צריך לציין גם מסנן ארגון --org=org1 או --org=org2.

Usage

תחביר

apigee-helm-migration [--apigee-namespace=] [--components=] [--dry-run] [--env=org1] [--env-group=org2] [--org=baz] [--kubeconfig=] [-y] [-v] [-f /path/to/releaseNames.yaml]

שמות של גרסאות Helm שנוצרו

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

תרשים אשכול של ארגון אחד אשכול של כמה ארגונים
apigee-operator operator operator
apigee-datastore datastore datastore
apigee-telemetry telemetry telemetry
apigee-redis redis redis
apigee-ingress-manager ingress-manager ingress-manager
apigee-org ORG_NAME ORG_NAME
apigee-env ENV_NAME[-env[-n]](1) ORG_NAME-ENV_NAME[-env[-n]](1)
apigee-virtualhost (envgroup) VH_NAME[-env-group[-n]](1) ORG_NAME-VH_NAME[-env-group[-n]](1)

(1) לשמות מתווספת הסיומת -env או -env-group אם השם שנוצר מתנגש עם שם אחר שנוצר. אם עדיין יש התנגשות, המערכת מוסיפה את הסיומת -1 או -2 ….

התאמה אישית של שמות גרסאות Helm

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

  1. מריצים את הכלי פעם אחת ויוצאים בהנחיה הראשונה כדי ליצור קובץ זמני שמכיל את שמות הגרסאות שנוצרו אוטומטית. אמורה להופיע שורה כמו זו:
    INFO: 21:32:56 using temp file for release names:  /tmp/apigee-helm-migration-1229129207-releaseNames
  2. צריך להעביר או להעתיק את הקובץ ואז לערוך אותו. אפשר להעביר את הקובץ הערוך הזה עם האפשרות -f כשמריצים את כלי ההעברה. השמות שנוצרים אוטומטית לגרסאות נראים כך:

    orgs:
      example-apigee-org:
        helmReleaseName: example-apigee-org
        envs:
          prod:
            helmReleaseName: prod
        envGroups:
          prod-envgroup:
            helmReleaseName: prod-envgroup

    כדי להתאים אישית את שמות הגרסאות של Helm לארגון, לסביבה או לקבוצת סביבות, עורכים את השדה helmReleaseName של אותו אובייקט. לדוגמה, כדי לשנות את השם של גרסת הארגון ל-custom-org, את השם של גרסת הסביבה ל-custom-env ואת השם של גרסת קבוצת הסביבות ל-custom-group, הקובץ שיתקבל ייראה כך:

    orgs:
      example-apigee-org:
        helmReleaseName: custom-org
        envs:
          prod:
            helmReleaseName: custom-env
        envGroups:
          prod-envgroup:
            helmReleaseName: custom-group

שימוש במרחבי שמות בהתאמה אישית

גרסה 1.13 של Apigee Hybrid וגרסאות חדשות יותר פועלות במרחב שמות יחיד של Kubernetes. כל הרכיבים ההיברידיים פועלים במרחב השמות הזה. ‫apigee הוא שם ברירת המחדל. אפשר להשתמש בכל מרחב שמות מותאם אישית לרכיבים האלה.

אם אתם משתמשים במרחב שמות בהתאמה אישית, אתם צריכים לציין אותו באמצעות הדגל --apigee-namespace my_custom_namespace כשאתם מריצים את כלי ההעברה של Helm.

צריך גם להוסיף את המאפיין ברמה העליונה namespace: my_custom_namespace לקובץ השינויים.

הוראות

  1. מאתרים את כלי ההעברה.

    כלי ההעברה ארוז עם apigeectl ב-/tools/migration/.

  2. מחלצים את הקבצים הדחוסים באמצעות אחת מהפקודות הבאות:

    • Mac:
      tar -xzf apigee-helm-migration_1.0.2_mac_64.tar.gz
    • Linux:
      tar -xzf apigee-helm-migration_1.0.2_linux_64.tar.gz
    • Windows:
      tar -xzf apigee-helm-migration_1.0.2_windows_64.zip
  3. מפעילים את כלי ההעברה. אם אפשרויות ברירת המחדל מקובלות, מספיק להפעיל את הכלי בלי ארגומנטים ולאשר את ההנחיה אם השמות שנוצרו לגרסאות של Helm משביעי רצון. הנה כמה תרחישים לדוגמה:
    • התקנה פשוטה, באמצעות ברירת המחדל של kubeconfig (~/.kube/config), מרחב השמות שמוגדר כברירת מחדל של apigee ושמות ברירת המחדל של גרסאות Helm.

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

      ./apigee-helm-migration
      
    • העברת כל הרכיבים באמצעות מרחב שמות בהתאמה אישית:
      ./apigee-helm-migration --apigee-namespace my_custom_namespace
      
    • העברת הרכיבים operator ו-datastore בלבד:

      ./apigee-helm-migration --components operator,datastore
      
        INFO: 00:22:48 using kubeconfig file  /usr/local/google/home/example/.kube/config
        INFO: 00:22:48 namespace for apigee resources:
        INFO: 00:22:48 	 apigee
        INFO: 00:22:48 processing all organizations in cluster
        INFO: 00:22:48 Components to migrate:
        INFO: 00:22:48 	 operator,datastore
        INFO: 00:22:48 dry-run:
        INFO: 00:22:48 	 false
        Continue with patching apigee resources for Helm migration? [y/n]: y
        INFO: 00:22:52 Processing component:  operator
        INFO: 00:22:54 Processing component:  datastore
        INFO: 00:22:55 Migration successful!
    • הפניה לקובץ kubeconfig ספציפי וציון שם אחר למרחב השמות apigee.

      ./apigee-helm-migration --kubeconfig /abs/path/to/kubeconf --namespace org1_namespace
      
    • העברת כל הרכיבים, אבל רק של ארגון אחד:

      ./apigee-helm-migration --org=some-test-org
      

    כך נראה פלט לדוגמה של העברה מוצלחת:

    INFO: 21:32:55 using kubeconfig file  /usr/local/google/home/example/.kube/config
    INFO: 21:32:55 namespace for apigee resources:
    INFO: 21:32:55 	 apigee
    INFO: 21:32:55 processing all organizations in cluster
    INFO: 21:32:55 processing all components
    INFO: 21:32:55 dry-run:
    INFO: 21:32:55 	 false
    INFO: 21:32:55 cluster Apigee information:
    INFO: 21:32:55 Apigee Organizations found:
    INFO: 21:32:56 	 example-hybrid-dev
    INFO: 21:32:56 Apigee Environments found (org: env):
    INFO: 21:32:56 	 example-hybrid-dev : prod
    INFO: 21:32:56 Apigee EnvGroups(apigeerouteconfigs) found (org: envGroup):
    INFO: 21:32:56 	 example-hybrid-dev : prod-envgroup
    INFO: 21:32:56 using temp file for release names:  /tmp/apigee-helm-migration-1229129207-releaseNames
    INFO: 21:32:56 Helm release names for Apigee orgs/envs/envgroups:
    orgs:
    example-hybrid-dev:
    helmReleaseName: example-hybrid-dev
    envs:
      prod:
        helmReleaseName: prod
    envGroups:
      prod-envgroup:
        helmReleaseName: prod-envgroup
    Make changes to the release names for Apigee orgs/env/envgroups? [y/n]: n
    Continue with patching apigee resources for Helm migration? [y/n]: y
    INFO: 21:32:59 Processing component:  operator
    INFO: 21:33:01 Processing component:  datastore
    INFO: 21:33:01 Processing component:  redis
    INFO: 21:33:02 Processing component:  ingress-manager
    INFO: 21:33:02 Processing component:  telemetry
    INFO: 21:33:03 Processing component:  orgs
    INFO: 21:33:05 Processing component:  envs
    INFO: 21:33:06 Processing component:  env-groups
    INFO: 21:33:07 Migration successful!

    שגיאות אפשריות:

    • שגיאה בניתוח קובץ שמות הגרסאות: צריך לבדוק את קובץ שמות הגרסאות שהועבר.
    • לא נמצאו משאבים: ודאו ש-Apigee Hybrid מותקן במלואו, ושיש לכם הרשאות גישה למשאבי apigee.

שינויים במאפייני ההגדרות האישיות

מבצעים את השינויים הבאים בקובצי השינויים:

  • ב-Apigee Hybrid שמנוהל באמצעות Helm, משתמשים במאפיינים של apigeeIngressGateway כדי להגדיר את כל שערי הכניסה של Apigee באשכול. המאפיינים של ingressGateways מבטלים את ההגדרות של apigeeIngressGateway לשער ה-Ingress הספציפי שצוין.

    ראה apigeeIngressGateway

    • משנים את כל המאפיינים של ingressGateways שהם גלובליים לכל שערי הכניסה באשכול למאפיינים של apigeeIngressGateway. קובץ ההגדרות המבוטלות צריך להכיל לפחות:
      apigeeIngressGateway:
        image:
          url: "PATH_TO_REPOSITORY/apigee-asm-ingress"
          tag: "TAG"
      

      לדוגמה:

      apigeeIngressGateway:
        image:
          url: "gcr.io/apigee-release/hybrid/apigee-asm-ingress"
          tag: "1.15.9"
      
    • חשוב לכלול את ingressGateways.name. צריך ליצור מופע של שער הכניסה. לדוגמה:
    • ingressGateways:
        name: INGRESS_GATEWAY_NAME
      
  • המאפיינים להפעלת Workload Identity השתנו:
    • ‫gcp.workloadIdentity.enabled מחליף את gcp.workloadIdentityEnabled.
    • אם אתם משתמשים בחשבון שירות אחד לכל הרכיבים, אתם יכולים לציין אותו באמצעות: gcp.workloadIdentity.gsa. לדוגמה:
      gcp:
        workloadIdentity:
          enabled: true
          gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
      
    • אם אתם משתמשים בחשבון שירות נפרד לכל רכיב (הסטנדרט ברוב ההתקנות בסביבת הייצור), ציינו את חשבון השירות במאפיין gsa של הרכיב. לדוגמה:
      logger:
        gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
      

    מידע נוסף זמין במאמרים הבאים: gcp.workloadIdentity.enabled, gcp.federatedWorkloadIdentity.enabled, הפעלת Workload Identity ב-GKE או הפעלת איחוד שירותי אימות הזהות של עומסי עבודה ב-AKS וב-EKS.

פתרון בעיות

יש בעיה מוכרת בכלי ההעברה של Helm בגרסה ההיברידית 1.12. עד שהבעיה תיפתר, צריך לבצע שלבים נוספים כדי לגבות ולשחזר את Cassandra.

כדי לעשות את זה, פועלים לפי השלבים הבאים:

  • לפני או אחרי הפעלת כלי ההעברה
  • לפני שמתקינים תרשימי Helm

כדי להתקין את התיקון:

  1. מוודאים ש-kubeconfig הנוכחי מצביע על האשכול שרוצים להעביר. אפשר לבצע את השלבים האלה מכל ספרייה.
  2. יוצרים קובץ בשם migration-operator-patch.yaml עם התוכן הבא:
    # migration-operator-patch.yaml
    metadata:
      annotations:
        meta.helm.sh/release-name: operator
        meta.helm.sh/release-namespace: APIGEE_NAMESPACE
      labels:
        app.kubernetes.io/managed-by: Helm
  3. יוצרים קובץ בשם migration-datastore-patch.yaml עם התוכן הבא:
    # migration-datastore-patch.yaml
    metadata:
      annotations:
        meta.helm.sh/release-name: datastore
        meta.helm.sh/release-namespace: apigee
      labels:
        app.kubernetes.io/managed-by: Helm
  4. מריצים את הפקודות הבאות של kubectl:
    kubectl patch clusterrole apigee-cassandra-backup --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrole apigee-cassandra-restore --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrolebinding apigee-cassandra-backup --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrolebinding apigee-cassandra-restore --patch-file ./migration-operator-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE cronjob apigee-cassandra-backup --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-backup-tls --patch-file ./migration-datastore-patch.yaml --type merge
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-svc-account --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-key-file --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-backup-sa --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE job apigee-cassandra-restore --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-restore-tls --patch-file ./migration-datastore-patch.yaml --type merge
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-svc-account --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-key-file --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-restore-sa --patch-file ./migration-datastore-patch.yaml
  5. מנקים את קובצי התיקונים באמצעות הפקודות הבאות:
    rm migration-operator-patch.yaml
    rm migration-datastore-patch.yaml

השלב הבא

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

הפלט של ‎-help

./apigee-helm-migration --help
Usage of ./apigee-helm-migration:
  -apigee-namespace string
      namespace used for apigee resources (default "apigee")
  -components string
      CSV of components to migrate. If empty then all components are migrated. Valid values are: operator,datastore,redis,ingress-manager,telemetry,orgs,envs,env-groups
  -dry-run
      perform a dry-run
  -env string
      restrict migration to a singular supplied env. If empty then all envs detected in the cluster are migrated
  -env-group string
      restrict migration to a singular supplied envGroup. If empty then all envGroups detected in the cluster are migrated
  -kubeconfig string
      (optional) absolute path to the kubeconfig file (default "/usr/local/google/home/example/.kube/config")
  -org string
      restrict migration to a singular supplied org. If empty then all orgs detected in the cluster are migrated
  -v	Increased logging verbosity
  -y	don't prompt for confirmation or for configuration of Helm releases