אם אתם משדרגים מגרסה 1.0 או 1.1 של Apigee Hybrid, אתם צריכים לשדרג קודם לגרסה 1.2 של Apigee Hybrid לפני שתשדרגו לגרסה 1.3.6. אפשר לעיין בהוראות בנושא שדרוג Apigee Hybrid לגרסה 1.2.
סקירה כללית על שדרוג לגרסה 1.3.6.
ההליכים לשדרוג Apigee hybrid מאורגנים בקטעים הבאים:
- הכנה
- ליצור ולעדכן חשבונות שירות.
- תכנון של קבוצות סביבה.
- מעתיקים ומעדכנים את קובץ ההגדרות שבוטלו.
- משדרגים את Istio ואת cert-manager.
- מתקינים את גרסת זמן הריצה ההיברידית 1.3.
- לפנות.
דרישות מוקדמות
- גרסה 1.2 של Apigee Hybrid. אם אתם מעדכנים מגרסה קודמת, תוכלו לעיין בהוראות לשדרוג Apigee Hybrid לגרסה 1.2.
הכנה
- (מומלץ) יוצרים עותק גיבוי של ספריית 1.2
$APIGEECTL_HOME/. לדוגמה:tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME - (מומלץ) מגבים את מסד הנתונים של Cassandra לפי ההוראות במאמר בנושא גיבוי ושחזור של Cassandra.
- כדי לשדרג את פלטפורמת Kubernetes, פועלים לפי השלבים הבאים. אם אתם צריכים עזרה, תוכלו להיעזר במאמרי העזרה של הפלטפורמה:
פלטפורמה שדרוג לגרסה GKE 1.15.x Anthos 1.5 AKS 1.16.x באמצעות Anthos Attached Clusters - אם אתם לא משתמשים ב-Apigee Connect בהתקנה ההיברידית שלכם, אתם צריכים להפעיל את Apigee Connect.
- בודקים אם Apigee Connect API מופעל:
gcloud services list | grep apigeeconnect apigeeconnect.googleapis.com Apigee Connect API
- אם הוא לא מופעל, מפעילים את ה-API:
gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID
$PROJECT_ID הוא מזהה הפרויקט בענן שלכם ב-Google Cloud.
-
בשורת הפקודה, מקבלים את פרטי הכניסה לאימות
gcloud, כמו בדוגמה הבאה:TOKEN=$(gcloud auth print-access-token)
כדי לוודא שהטוקן אוכלס, משתמשים בפקודה
echo, כמו בדוגמה הבאה:echo $TOKEN
האסימון יוצג כמחרוזת מקודדת.
למידע נוסף, ראו סקירה כללית של כלי שורת הפקודה של Google Cloud.
- כדי לבדוק אם Apigee Connect מופעל בארגון:
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
כאשר $ORG_NAME הוא המזהה של הארגון.
אם הפלט מכיל:
"name" : "features.mart.connect.enabled", "value" : "true"Apigee Connect מופעל.
- אם Apigee Connect לא מופעל, צריך להקצות את התפקיד Apigee Connect Agent לחשבון השירות של MART:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/apigeeconnect.Agent - מפעילים את Apigee Connect באמצעות הפקודה הבאה:
curl -H "Authorization: Bearer $TOKEN" -X PUT \ -H "Content-Type: application/json" \ -d '{ "name" : "'"$ORG_NAME"'", "properties" : { "property" : [ { "name" : "features.hybrid.enabled", "value" : "true" }, { "name" : "features.mart.connect.enabled", "value" : "true" } ] } }' \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"אם הפלט מכיל את שני הנכסים הבאים, סימן שהפעלתם את Apigee Connect בהצלחה:
{ "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" }
- בודקים אם Apigee Connect API מופעל:
- יוצרים את חשבון השירות
apigee-watcher. Apigee Watcher הוא חשבון שירות חדש שהוצג בגרסה 1.3. הוא עוקב אחרי הסנכרון כדי לראות אם יש שינויים ברמת הארגון, ומחיל את השינויים האלה כדי להגדיר את Istio ingress.מהספרייה ההיברידית הראשית:
./tools/create-service-account apigee-watcher ./service-accounts
- מקצים את התפקיד Apigee Runtime Agent לחשבון השירות של Watcher:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/apigee.runtimeAgent
כאשר
PROJECT_IDהוא מזהה הפרויקט שלכם ב-Google Cloud. אם כתובות האימייל של חשבון השירות שלכם שונות מהתבנית הזו, צריך להחליף אותן בהתאם.הפלט צריך לכלול רשימה של כל חשבונות השירות והתפקידים שלהם, כולל:
... - members: - serviceAccount:apigee-watcher@hybrid13rc5.iam.gserviceaccount.com role: roles/apigee.runtimeAgent ...
- תכנון קבוצות סביבה לניתוב.
ב-Apigee hybrid 1.3, ניהול הניתוב של נתיב הבסיס מתבצע באמצעות קבוצות סביבה במקום באמצעות
routingRules. אם אתם משתמשים ב-routingRulesבהגדרה ההיברידית שלכם, כדאי לתכנן קבוצות של סביבות שישכפלו את הניתוב שלכם.צריך ליצור לפחות קבוצת סביבות אחת.
- מעדכנים את קובץ השינויים:
- יוצרים עותק של קובץ ההגדרות לשינוי.
- מעדכנים את פסקאות gcp ו-k8sCluster.
מאפייני ההגדרה הבאים הוחלפו בגרסה 1.3 ההיברידית:
- הערך
gcpRegionהוחלף בערךgcp:region - הערך
gcpProjectIDהוחלף בערךgcp:projectID - הערך
gcpProjectIDRuntimeהוחלף בערךgcp:gcpProjectIDRuntime - הערך
k8sClusterNameהוחלף בערךk8s:clusterName - הערך
k8sClusterRegionהוחלף בערךk8s:clusterRegion
לדוגמה, מחליפים את המבנה הבא:
gcpRegion: gcp region gcpProjectID: gcp project ID gcpProjectIDRuntime: gcp project ID k8sClusterName: name k8sClusterRegion: region
עם:
gcp: projectID: gcp project ID region: gcp region gcpProjectIDRuntime: gcp project ID # optional. This is only required if you # want logger/metrics data to be sent in # different gcp project. k8sCluster: name: gcp project ID region: gcp region - הערך
- אם בקובץ ההגדרות שלכם אין מזהה מופע ייחודי, מוסיפים אותו:
# unique identifier for this installation. 63 chars length limit instanceID: ID
כאשר ID הוא מזהה ייחודי של ההתקנה ההיברידית הזו, כמו
my-hybrid-131-installationאוacmecorp-hybrid-131. - מוסיפים את חשבון השירות של Watcher (
apigee-watcher) לקובץ ההגדרות:# Note: the SA should have the "Apigee Runtime Agent" role watcher: serviceAccountPath: "service account file"
- מוסיפים את חשבון השירות של מדדים (
apigee-metrics) לקובץ ההגדרות שמשנות את ברירת המחדל:metrics: serviceAccountPath: "service account file"
- מעדכנים את פסקה
virtualhosts:כדי להחליף אתroutingRulesבקבוצת הסביבות שלכם.-name:מחליפים את השם בשם של קבוצת הסביבות. יכולים להיות לכם כמה רשומות של שמות, אחת לכל קבוצת סביבות.hostAliases:[]מחיקת השורה.- משאירים (או מוסיפים) את הערכים
sslCertPath:ו-sslKeyPath:. - מוחקים את כל הרשומות של
routingRules.
לדוגמה:
virtualhosts: - name: default hostAliases: - "*.acme.com" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key routingRules: - paths: - /foo - /bar - env: my-environmentהופך ל:
virtualhosts: - name: example-env-group sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key - מעדכנים את פסקאות
martו-connectAgent:.- בקטע
mart:מסירים את הערכיםhostAlias:,sslCertPath:ו-sslKeyPath:. - מוסיפים פסקה של
connectAgent:. - בקטע
connectAgent:מוסיפים רשומה שלserviceAccountPath:ומזינים את הנתיב לקובץ של חשבון השירות שהוקצה לו התפקיד Apigee Connect Agent (בדרך כלל חשבון השירות של MART).
לדוגמה:
mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key
הופך ל:
mart: serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json connectAgent: serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json
- בקטע
שדרוג של Istio ו-cert-manager
ב-Apigee hybrid גרסה 1.3 נדרש cert-manager גרסה v0.14.2 כדי לנהל ולאמת אישורים, ונדרשת הפצת Istio שסופקה עם Anthos Service Mesh (ASM) גרסה 1.5.7 (או גרסה חדשה יותר) כדי ליצור ולנהל את שער הכניסה של זמן הריצה.
שדרוג מ-Istio 1.4.6 ל-ASM 1.5.7 (או לגרסה חדשה יותר)
- כדי לצמצם את זמן ההשבתה, לפריסות של Istio ול-HPA צריכות להיות לפחות שתי רפליקות לכל אחת.
מריצים את הפקודות הבאות כדי לקבוע את מספר העותקים:
kubectl -n istio-system get deployments # list of deploymentskubectl -n istio-system get hpa # list of hpa - עורכים כל פריסה שיש לה רק עותק אחד ומגדילים את
replicas:ל-2או יותר:kubectl -n istio-system edit deployment nameלדוגמה:
spec: progressDeadlineSeconds: 600 replicas: 2
- עורכים כל HPA שיש לו רק עותק אחד ומגדילים את
minReplicas:ל-2או יותר:kubectl -n istio-system edit hpa nameלדוגמה:
spec: maxReplicas: 5 minReplicas: 2
- מורידים ומתקינים את ASM לפי הוראות ההתקנה במאמר הורדה והתקנה של ASM.
- אחרי ההתקנה, מריצים את פקודת הגרסה כדי לוודא שגרסה 1.5.x מותקנת בצורה תקינה:
./bin/istioctl version client version: 1.5.8-asm.0 apigee-mart-ingressgateway version: citadel version: 1.4.6 galley version: 1.4.6 ingressgateway version: 1.5.8-asm.0 pilot version: 1.4.6 policy version: 1.4.6 sidecar-injector version: 1.4.6 telemetry version: 1.4.6 pilot version: 1.5.8-asm.0 data plane version: 1.4.6 (1 proxies), 1.5.8-asm.0 (2 proxies)
שדרוג cert-manager
- מחיקת פריסת cert-manager הנוכחית:
kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
- בודקים את הגרסה של Kubernetes:
kubectl version
- מריצים את הפקודה הבאה כדי להתקין את cert-manager מ-Jetstack:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml
התקנת סביבת זמן הריצה ההיברידית
- שמירת מספר הגרסה האחרונה במשתנה:
export VERSION=$(curl -s \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1) - בודקים שהמשתנה אוכלס במספר גרסה. אם רוצים להשתמש בגרסה אחרת, אפשר לשמור אותה במשתנה סביבה. לדוגמה:
echo $VERSION 1.3.6
מורידים את חבילת ההפצה של מערכת ההפעלה:
Mac 64 bit:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_64.tar.gzLinux 64 bit:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_64.tar.gzMac 32 bit:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_32.tar.gzLinux 32 ביט:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_32.tar.gz- משנים את השם של ספריית
apigeectl/הנוכחית לשם של ספריית גיבוי. לדוגמה:mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/ -
מחלצים את התוכן של קובץ ה-gzip שהורדתם לספריית הבסיס ההיברידית. לדוגמה:
tar xvzf filename.tar.gz -C hybrid-base-directory
cdלספריית הבסיס.-
תוכן ה-tar מורחב כברירת מחדל לספרייה עם הגרסה והפלטפורמה בשם שלה. לדוגמה:
./apigeectl_1.0.0-f7b96a8_linux_64. משנים את שם הספרייה ל-apigeectl:mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl - מוחקים את המשרה
apigee-resources-installמ-apigee-system:kubectl -n apigee-system delete job apigee-resources-install
- מוחקים את ה-CRD הישן:
kubectl delete crd apigeetelemetries.apigee.cloud.google.com
- מעדכנים את פסקה
cassandra:בקובץ ההחלפות עם מאפייןexternalSeedHost. הנכס הזה יעזור לוודא שההתקנה החדשה של גרסה 1.3.6 ההיברידית תשתמש באותו אשכול Kubernetes כמו ההתקנה של גרסה 1.2. זהו שלב חד-פעמי שנדרש רק לשדרוג מגרסה היברידית 1.2 לגרסה 1.3.6 (או לגרסה חדשה יותר).- מחפשים אחת מכתובות ה-IP של Cassandra הקיימת באותו אשכול Kubernetes שבו משדרגים את ההתקנה של גרסה 1.2.0.
kubectl -n namespace get pods -o wide
כאשר namespace הוא מרחב השמות של Apigee Hybrid.
רושמים את כתובת ה-IP של צומת Cassandra. לדוגמה:
kubectl -n apigee get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE apigee-cassandra-0 1/1 Running 0 33d 10.68.8.24 gke-example-cluster-rc5-apigee-data-c8bf1234-09kc apigee-cassandra-1 1/1 Running 0 16d 10.68.8.33 gke-example-cluster-rc5-apigee-data-c9221ee7-10kc apigee-cassandra-2 1/1 Running 0 23h 10.68.9.11 gke-example-cluster-rc5-apigee-data-d123e456-11kc
- מוסיפים את הערך של המאפיין
externalSeedHost:cassandra: externalSeedHost: Cassandra_node_IP
כאשר Cassandra_node_IP היא כתובת ה-IP של צומת Cassandra (
10.68.8.24בדוגמה הקודמת).
- מחפשים אחת מכתובות ה-IP של Cassandra הקיימת באותו אשכול Kubernetes שבו משדרגים את ההתקנה של גרסה 1.2.0.
- בספרייה new
apigeectl/, מריצים את הפקודותapigeectl init,apigeectl applyו-apigeectl check-ready:- מפעילים את הגרסה ההיברידית 1.3.6:
apigeectl init -f overrides_1.3.yaml
כאשר overrides_1.3.yaml הוא קובץ overrides.yaml שעבר עריכה.
- בגרסה היברידית 1.3, התחביר של הדגל
--dry-runתלוי בגרסה שלkubectlשמופעלת. בודקים את הגרסה שלkubectl:gcloud version
- בודקים אם יש שגיאות באמצעות הרצה יבשה:
kubectlגרסה 1.17 וגרסאות ישנות יותר:apigeectl apply -f overrides_1.3.yaml --dry-run=true
kubectlגרסה 1.18 ואילך:apigeectl apply -f overrides_1.3.yaml --dry-run=client
- מחילים את השינויים. בוחרים את ההוראות לסביבות ייצור או לסביבות הדגמה/ניסוי, בהתאם להתקנה.
ייצור
בסביבות ייצור, צריך לשדרג כל רכיב היברידי בנפרד ולבדוק את הסטטוס של הרכיב המשודרג לפני שממשיכים לרכיב הבא.
- מחילים את ההחלפות כדי לשדרג את Cassandra:
apigeectl apply -f overrides_1.3.yaml --datastore
- השלמת הבדיקה:
kubectl -n namespace get pods
כאשר namespace הוא מרחב השמות של Apigee Hybrid.
ממשיכים לשלב הבא רק כשהפודים מוכנים.
- מחילים את ההחלפות כדי לשדרג את רכיבי הטלמטריה ובודקים שהשדרוג הושלם:
apigeectl apply -f overrides_1.3.yaml --telemetry
kubectl -n namespace get pods
- מחילים את השינויים כדי לשדרג את הרכיבים ברמת הארגון (MART, Watcher ו-Apigee
Connect) ובודקים שהשדרוג הושלם:
apigeectl apply -f overrides_1.3.yaml --org
kubectl -n namespace get pods
- מחילים את השינויים כדי לשדרג את הסביבות. יש שתי אפשרויות:
- מחילים את השינויים על סביבה אחת בכל פעם ובודקים שהם הושלמו. חוזרים על השלב הזה לכל סביבה:
apigeectl apply -f overrides_1.3.yaml --env env_name
kubectl -n namespace get pods
כאשר env_name הוא שם הסביבה שמשדרגים.
- מחילים את ההגדרות החלופיות על כל הסביבות בבת אחת ובודקים שהן הושלמו:
apigeectl apply -f overrides_1.3.yaml --all-envs
kubectl -n namespace get pods
- מחילים את השינויים על סביבה אחת בכל פעם ובודקים שהם הושלמו. חוזרים על השלב הזה לכל סביבה:
הדגמה/ניסוי
ברוב סביבות ההדגמה או הניסוי, אפשר להחיל את שינויי ברירת המחדל על כל הרכיבים בבת אחת. אם סביבת ההדגמה או הניסוי שלכם גדולה ומורכבת או דומה מאוד לסביבת ייצור, כדאי להשתמש בהוראות לשדרוג סביבות ייצור.
apigeectl apply -f overrides_1.3.yaml
- בודקים את הסטטוס:
apigeectl check-ready -f overrides_1.3.yaml
הוראות נוספות זמינות במאמר הגדרת GKE Hybrid – שלב 5: התקנת GKE Hybrid ב-GKE.
- מחילים את ההחלפות כדי לשדרג את Cassandra:
- אחרי שמסיימים את ההגדרה של hybrid 1.3, מוודאים שכל הצמתים של Cassandra (הישנים והחדשים) הם חלק מאותו אשכול Cassandra. מריצים את הפקודה הבאה באחד מהצמתים של Cassandra:
kubectl -n namespace get podskubectl -n namespace exec old Cassandra pod -- nodetool statusבדוגמת הפלט הבאה, 10.68.8.24 היא מגרסה 1.2.0 והיא כתובת ה-IP של הצומת שבה השתמשתם כ-
externalSeedHost. 10.68.7.11 היא מגרסה 1.3.6:Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.68.8.24 379.41 KiB 256 50.8% 11bbd43b-af64-464b-a96d-0d6dd0521de1 ra-1 UN 10.68.7.11 1.35 MiB 256 49.2% 0b4d9e08-f353-413a-b4a9-7d18a8d07e58 ra-1
אם הם לא באותו אשכול, בודקים את הערך של
externalSeedHost. - אחרי שכל הפודים יפעלו, מסירים את
externalSeedHostמקובץ ההגדרות ששונו ומריצים שוב אתapigeectl applyעם האפשרות--datastore:apigeectl apply --datastore -f overrides_1.3.6.yaml
הסרת המשאבים
אחרי שמוודאים שכל ה-pods פועלים בצורה תקינה ושהנקודות של ASM תקפות להתקנה החדשה, אפשר לנקות:
- משאבים של Hybrid 1.2.
- המופע הישן יותר של Cassandra
- משאבים של Istio 1.4.6.
מחיקת משאבים ב-Hybrid 1.2.0
- מסירים את פרטי הניתוב של המארח הווירטואלי בגרסה 1.2.0:
$APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml
כאשר $APIGEECTL_HOME-v1.2 היא הספרייה שבה גיביתם את הספרייה של
apigeectlבגרסה 1.2. - אם נקודת הקצה עדיין פועלת כמצופה ואימתתם שכל הרכיבים בגרסה 1.3.0 פועלים, מריצים את הפקודה הבאה כדי למחוק את המשאבים של גרסה 1.2.0 של הגרסה ההיברידית:
$APIGEECTL_HOME-v1.2/apigeectl delete -c "mart,connect-agent,synchronizer,runtime,udca,metrics,logger" \ -f 1.2.0_overrides.yaml
הוצאה משימוש של מופע Cassandra ישן יותר
-
cdלספרייהapigeectlשהותקנה לאחרונה. - מריצים את הסקריפט
tools/cas_cleanup.sh.הסקריפט הזה מוציא משימוש את ה-pod הישן של Cassandra מתוך טבעת Cassandra, מוחק את ה-STS הישן ומוחק את ה-PVC.
bash cas_cleanup.sh Apigee namespace
מחיקת משאבים של Istio בגרסה 1.4.6
- מריצים את הפקודה הבאה כדי למחוק את המשאבים האחרונים של Istio v.1.4.6:
kubectl delete all -n istio-system --selector \ 'app in (apigee-mart-istio-ingressgateway, galley, security, istio-nodeagent, istio-mixer, sidecarInjectorWebhook, istio-mixer)'
- מריצים את הפקודות הבאות כדי למחוק משימות ישנות מההתקנה של Istio 1.4.6:
kubectl -n istio-system delete job istio-init-crd-10-1.4.6kubectl -n istio-system delete job istio-init-crd-11-1.4.6kubectl -n istio-system delete job istio-init-crd-14-1.4.6
מזל טוב! השדרוג לגרסה 1.3.6 של Apigee Hybrid בוצע בהצלחה.
- מפעילים את הגרסה ההיברידית 1.3.6: