הכלי הזה להעברת נתונים עוזר להעביר אשכול היברידי מבוסס-apigeectl לאשכול היברידי מבוסס-Helm.
הכלי הזה לא מבצע החלפה בפועל של רכיבי אשכול. היא אידמפוטנטית ואפשר להריץ אותה הרבה פעמים באותו אשכול, כדי להכין בכל פעם קבוצת משנה של רכיבים וארגונים.
אפשר להעביר את כל רכיבי apigee בבת אחת, ואחרי הפעלת הכלי אפשר לבצע פעולות שדרוג של Helm על בסיס כל רכיב בנפרד.
במאמר התקנה וניהול של Apigee hybrid באמצעות תרשימי Helm מוסבר איך לנהל אשכולות היברידיים שהועברו לניהול באמצעות Helm בעזרת הכלי הזה.
דרישות מוקדמות
- Helm גרסה v3.14.2 ומעלה.
-
קובץ
kubeconfigתקין שמפנה לאשכול עם התקנה תקינה של Apigee Hybrid 1.13. - הרשאות לשינוי המטא-נתונים וההערות במשאבי Kubernetes של הרכיבים ההיברידיים שרוצים להעביר.
היקף
הכלי הזה תומך באפשרויות הבאות בזמן הריצה:
-
התאמה אישית של מרחב השמות למשאבי
apigee. מרחב שמות שמוגדר כברירת מחדל:apigee - העברה רק של רכיבים היברידיים נבחרים. ברירת מחדל: כל הרכיבים מועברים
- העברה של ארגון יחיד בלבד
- העברה של סביבה אחת בלבד
-
העברה של קבוצת סביבות אחת (
apigee-virtualhost) בלבד - התאמה אישית של שמות של גרסאות Helm לארגונים, לסביבות ולקבוצות של סביבות.
מגבלות
-
הכלי הזה לא תומך בהתאמה אישית של שמות של מהדורות Helm לרכיבים ההיברידיים הבאים:
apigee-operator,apigee-datastore,apigee-redis,apigee-telemetryו-apigee-ingress-manager. - התאמות אישיות אינטראקטיביות שבוצעו בשמות של מהדורות Helm בארגונים, בסביבות ובקבוצות סביבות לא נשמרות אוטומטית בין הרצות. אפשר לערוך את קובץ ה-temp ולספק אותו כאפשרות בהרצות הבאות.
-
סינון של סביבות וקבוצות סביבות מתבצע רק לפי שם. במקרים מסוימים, יכול להיות שייווצרו כמה סביבות וקבוצות סביבות שיועברו באשכולות של כמה ארגונים.
לדוגמה, באשכול מרובה ארגונים עם ארגונים
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 Chart שפורסם באשכול צריך להיות שם גרסה, שחייב להיות ייחודי במרחב שמות. אין מוסכמות למתן שמות או הגבלות לגבי שמות של מהדורות 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) אם השם שנוצר מתנגש עם שם אחר שנוצר, השם יסתיים ב- |
||
התאמה אישית של שמות גרסאות Helm
כלי ההעברה מאפשר התאמה אישית אינטראקטיבית של שמות הגרסאות של Helm. אם רוצים להתאים אישית את שמות הגרסאות של Helm באופן לא אינטראקטיבי:
-
מריצים את הכלי פעם אחת ויוצאים בהנחיה הראשונה כדי ליצור קובץ זמני שמכיל את שמות הגרסאות שנוצרו אוטומטית. אמורה להופיע שורה כמו:
INFO: 21:32:56 using temp file for release names: /tmp/apigee-helm-migration-1229129207-releaseNames
-
להעביר או להעתיק את הקובץ ואז לערוך אותו. אפשר להעביר את הקובץ הערוך הזה באמצעות האפשרות
-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
שימוש במרחבי שמות בהתאמה אישית
Apigee hybrid מגרסה 1.13 ואילך פועל במרחב שמות יחיד של Kubernetes. כל רכיבי ה-hybrid פועלים במרחב השמות הזה. apigee הוא שם ברירת המחדל. אפשר להשתמש בכל מרחב שמות מותאם אישית עבור הרכיבים האלה.
אם אתם משתמשים במרחב שמות בהתאמה אישית, אתם צריכים לציין אותו באמצעות הדגל --apigee-namespace my_custom_namespace כשאתם מריצים את כלי ההעברה של Helm.
בנוסף, צריך להוסיף את הנכס namespace: my_custom_namespace ברמה העליונה לקובץ ההחלפות.
הוראות
-
מאתרים את כלי ההעברה.
כלי ההעברה כלול בחבילה עם
apigeectlבקטע/tools/migration/. -
מחלקים את הקבצים הדחוסים באמצעות אחת מהפקודות הבאות:
-
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
-
Mac:
-
מפעילים את כלי ההעברה. אם אפשרויות ברירת המחדל מקובלות, מספיק להריץ את הכלי בלי ארגומנטים ולאשר את ההנחיה אם השמות שנוצרו של גרסת ה-Helm משביעי רצון. הנה כמה תרחישים לדוגמה:
-
התקנה פשוטה, באמצעות ברירת המחדל
kubeconfig(~/.kube/config), מרחב השמותapigeeשמוגדר כברירת מחדל ושמות ברירת המחדל של Helm release.הפקודה הבאה אמורה להספיק לרוב ההתקנות, אם לא לכולן. אחרי שמריצים את הכלי, אפשר לבצע פעולות שדרוג של 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.
-
שינויים במאפייני ההגדרה
מבצעים את השינויים הבאים בקובצי ההחלפות:
-
במקום
metrics.aggregator.*, צריך להשתמש ב-metrics.appStackdriverExporter.*. -
ב-Apigee Hybrid שמנוהל באמצעות Helm, נעשה שימוש במאפיינים של
apigeeIngressGatewayכדי להגדיר את כל שערים הכניסה של Apigee באשכול. מאפייניingressGatewaysמבטלים את ההגדרות ב-apigeeIngressGatewayעבור שער הכניסה הספציפי שצוין.- משנים את כל מאפייני
ingressGatewaysשהם גלובליים לכל שערים להעברת נתונים (ingress) באשכול למאפייני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.17.8-asm.20-distroless" -
חשוב לכלול את
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" - אם אתם משתמשים בחשבון שירות נפרד לכל רכיב (התקן ברוב ההתקנות של prod), צריך לציין את חשבון השירות באמצעות המאפיין
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 של Hybrid. עד שהבעיה תיפתר, גיבוי ושחזור של נתוני Cassandra ידרשו פעולות נוספות.
אפשר לפעול לפי השלבים הבאים:
- לפני או אחרי הפעלת הכלי להעברה
- לפני שמתקינים תרשימי Helm
כדי להתקין את התיקון לפתרון העקיף:
- מוודאים ש
kubeconfigהנוכחי מצביע על האשכול שאליו רוצים להעביר את הנתונים. אפשר לבצע את השלבים האלה מכל ספרייה. - יוצרים קובץ בשם
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
- יוצרים קובץ בשם
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
- מריצים את הפקודות הבאות:
kubectlkubectl patch clusterrole apigee-cassandra-backup --patch-file ./migration-operator-patch.yamlkubectl patch clusterrole apigee-cassandra-restore --patch-file ./migration-operator-patch.yamlkubectl patch clusterrolebinding apigee-cassandra-backup --patch-file ./migration-operator-patch.yamlkubectl patch clusterrolebinding apigee-cassandra-restore --patch-file ./migration-operator-patch.yamlkubectl patch -n APIGEE_NAMESPACE cronjob apigee-cassandra-backup --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-backup-tls --patch-file ./migration-datastore-patch.yaml --type mergekubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-svc-account --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-key-file --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-backup-sa --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE job apigee-cassandra-restore --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-restore-tls --patch-file ./migration-datastore-patch.yaml --type mergekubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-svc-account --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-key-file --patch-file ./migration-datastore-patch.yamlkubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-restore-sa --patch-file ./migration-datastore-patch.yaml - מנקים את קובצי התיקון באמצעות הפקודות הבאות:
rm migration-operator-patch.yamlrm 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