שדרוג Apigee Hybrid לגרסה 1.3.6

<0x0A

אם אתם משדרגים מגרסה 1.0 או 1.1 של Apigee Hybrid, אתם צריכים לשדרג קודם לגרסה 1.2 של Apigee Hybrid לפני שתשדרגו לגרסה 1.3.6. אפשר לעיין בהוראות בנושא שדרוג Apigee Hybrid לגרסה 1.2.

סקירה כללית על שדרוג לגרסה 1.3.6.

ההליכים לשדרוג Apigee hybrid מאורגנים בקטעים הבאים:

  1. הכנה
    1. ליצור ולעדכן חשבונות שירות.
    2. תכנון של קבוצות סביבה.
    3. מעתיקים ומעדכנים את קובץ ההגדרות שבוטלו.
  2. משדרגים את Istio ואת cert-manager.
  3. מתקינים את גרסת זמן הריצה ההיברידית 1.3.
  4. לפנות.

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

הכנה

  1. (מומלץ) יוצרים עותק גיבוי של ספריית 1.2 $APIGEECTL_HOME/. לדוגמה:
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME
  2. (מומלץ) מגבים את מסד הנתונים של Cassandra לפי ההוראות במאמר בנושא גיבוי ושחזור של Cassandra.
  3. כדי לשדרג את פלטפורמת Kubernetes, פועלים לפי השלבים הבאים. אם אתם צריכים עזרה, תוכלו להיעזר במאמרי העזרה של הפלטפורמה:
    פלטפורמה שדרוג לגרסה
    GKE ‫1.15.x
    Anthos ‫1.5
    AKS ‫1.16.x באמצעות Anthos Attached Clusters
  4. אם אתם לא משתמשים ב-Apigee Connect בהתקנה ההיברידית שלכם, אתם צריכים להפעיל את Apigee Connect.
    1. בודקים אם Apigee Connect API מופעל:
      gcloud services list | grep apigeeconnect
      
      apigeeconnect.googleapis.com         Apigee Connect API
    2. אם הוא לא מופעל, מפעילים את ה-API:
      gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID

      $PROJECT_ID הוא מזהה הפרויקט בענן שלכם ב-Google Cloud.

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

      TOKEN=$(gcloud auth print-access-token)

      כדי לוודא שהטוקן אוכלס, משתמשים בפקודה echo, כמו בדוגמה הבאה:

      echo $TOKEN

      האסימון יוצג כמחרוזת מקודדת.

      למידע נוסף, ראו סקירה כללית של כלי שורת הפקודה של Google Cloud.

    4. כדי לבדוק אם 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 מופעל.

    5. אם 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
    6. מפעילים את 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"
            }
      
  5. יוצרים את חשבון השירות apigee-watcher. ‫Apigee Watcher הוא חשבון שירות חדש שהוצג בגרסה 1.3. הוא עוקב אחרי הסנכרון כדי לראות אם יש שינויים ברמת הארגון, ומחיל את השינויים האלה כדי להגדיר את Istio ingress.

    מהספרייה ההיברידית הראשית:

    ./tools/create-service-account apigee-watcher ./service-accounts
  6. מקצים את התפקיד 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
      ...
  7. תכנון קבוצות סביבה לניתוב. ב-Apigee hybrid 1.3, ניהול הניתוב של נתיב הבסיס מתבצע באמצעות קבוצות סביבה במקום באמצעות routingRules. אם אתם משתמשים ב-routingRules בהגדרה ההיברידית שלכם, כדאי לתכנן קבוצות של סביבות שישכפלו את הניתוב שלכם.

    צריך ליצור לפחות קבוצת סביבות אחת.

    מידע על קבוצות סביבות

  8. מעדכנים את קובץ השינויים:
    1. יוצרים עותק של קובץ ההגדרות לשינוי.
    2. מעדכנים את פסקאות 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
      
    3. אם בקובץ ההגדרות שלכם אין מזהה מופע ייחודי, מוסיפים אותו:
      # unique identifier for this installation. 63 chars length limit
      instanceID: ID

      כאשר ID הוא מזהה ייחודי של ההתקנה ההיברידית הזו, כמו ‫my-hybrid-131-installation או acmecorp-hybrid-131.

    4. מוסיפים את חשבון השירות של Watcher‏ (apigee-watcher) לקובץ ההגדרות:
      # Note: the SA should have the "Apigee Runtime Agent" role
      watcher:
       serviceAccountPath: "service account file"
    5. מוסיפים את חשבון השירות של מדדים (apigee-metrics) לקובץ ההגדרות שמשנות את ברירת המחדל:
      metrics:
       serviceAccountPath: "service account file"
    6. מעדכנים את פסקה virtualhosts: כדי להחליף את routingRules בקבוצת הסביבות שלכם.
      1. -name: מחליפים את השם בשם של קבוצת הסביבות. יכולים להיות לכם כמה רשומות של שמות, אחת לכל קבוצת סביבות.
      2. hostAliases:[] מחיקת השורה.
      3. משאירים (או מוסיפים) את הערכים sslCertPath: ו-sslKeyPath:.
      4. מוחקים את כל הרשומות של 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
    7. מעדכנים את פסקאות mart ו-connectAgent:.
      1. בקטע mart: מסירים את הערכים hostAlias:,‏ sslCertPath: ו-sslKeyPath:.
      2. מוסיפים פסקה של connectAgent:.
      3. בקטע 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 (או לגרסה חדשה יותר)

  1. כדי לצמצם את זמן ההשבתה, לפריסות של Istio ול-HPA צריכות להיות לפחות שתי רפליקות לכל אחת. מריצים את הפקודות הבאות כדי לקבוע את מספר העותקים:
    kubectl -n istio-system get deployments # list of deployments
    kubectl -n istio-system get hpa # list of hpa
  2. עורכים כל פריסה שיש לה רק עותק אחד ומגדילים את replicas: ל-2 או יותר:
    kubectl -n istio-system edit deployment name

    לדוגמה:

    spec:
      progressDeadlineSeconds: 600
      replicas: 2
  3. עורכים כל HPA שיש לו רק עותק אחד ומגדילים את minReplicas: ל-2 או יותר:
    kubectl -n istio-system edit hpa name

    לדוגמה:

    spec:
      maxReplicas: 5
      minReplicas: 2
    
  4. מורידים ומתקינים את ASM לפי הוראות ההתקנה במאמר הורדה והתקנה של ASM.
  5. אחרי ההתקנה, מריצים את פקודת הגרסה כדי לוודא שגרסה 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

  1. מחיקת פריסת cert-manager הנוכחית:
    kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
  2. בודקים את הגרסה של Kubernetes:
    kubectl version
  3. מריצים את הפקודה הבאה כדי להתקין את cert-manager מ-Jetstack:
    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml 

התקנת סביבת זמן הריצה ההיברידית

  1. שמירת מספר הגרסה האחרונה במשתנה:
    export VERSION=$(curl -s \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1)
  2. בודקים שהמשתנה אוכלס במספר גרסה. אם רוצים להשתמש בגרסה אחרת, אפשר לשמור אותה במשתנה סביבה. לדוגמה:
    echo $VERSION
      1.3.6
  3. מורידים את חבילת ההפצה של מערכת ההפעלה:

    Mac 64 bit:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_64.tar.gz

    Linux 64 bit:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_64.tar.gz

    Mac 32 bit:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_32.tar.gz

    Linux‏ 32 ביט:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_32.tar.gz
  4. משנים את השם של ספריית apigeectl/ הנוכחית לשם של ספריית גיבוי. לדוגמה:
    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/ 
  5. מחלצים את התוכן של קובץ ה-gzip שהורדתם לספריית הבסיס ההיברידית. לדוגמה:

    tar xvzf filename.tar.gz -C hybrid-base-directory
  6. cd לספריית הבסיס.
  7. תוכן ה-tar מורחב כברירת מחדל לספרייה עם הגרסה והפלטפורמה בשם שלה. לדוגמה: ./apigeectl_1.0.0-f7b96a8_linux_64. משנים את שם הספרייה ל-apigeectl:

    mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl
  8. מוחקים את המשרה apigee-resources-install מ-apigee-system:
    kubectl -n apigee-system delete job apigee-resources-install
  9. מוחקים את ה-CRD הישן:
    kubectl delete crd apigeetelemetries.apigee.cloud.google.com
  10. מעדכנים את פסקה cassandra: בקובץ ההחלפות עם מאפיין externalSeedHost. הנכס הזה יעזור לוודא שההתקנה החדשה של גרסה 1.3.6 ההיברידית תשתמש באותו אשכול Kubernetes כמו ההתקנה של גרסה 1.2. זהו שלב חד-פעמי שנדרש רק לשדרוג מגרסה היברידית 1.2 לגרסה 1.3.6 (או לגרסה חדשה יותר).
    1. מחפשים אחת מכתובות ה-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
    2. מוסיפים את הערך של המאפיין externalSeedHost:
      cassandra:
       externalSeedHost: Cassandra_node_IP

      כאשר Cassandra_node_IP היא כתובת ה-IP של צומת Cassandra (10.68.8.24 בדוגמה הקודמת).

  11. בספרייה new apigeectl/, מריצים את הפקודות apigeectl init,‏ apigeectl apply ו-apigeectl check-ready:
    1. מפעילים את הגרסה ההיברידית 1.3.6:
      apigeectl init -f overrides_1.3.yaml

      כאשר overrides_1.3.yaml הוא קובץ overrides.yaml שעבר עריכה.

    2. בגרסה היברידית 1.3, התחביר של הדגל --dry-run תלוי בגרסה של kubectl שמופעלת. בודקים את הגרסה של kubectl:
      gcloud version
    3. בודקים אם יש שגיאות באמצעות הרצה יבשה:

      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
    4. מחילים את השינויים. בוחרים את ההוראות לסביבות ייצור או לסביבות הדגמה/ניסוי, בהתאם להתקנה.

      ייצור

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

      1. מחילים את ההחלפות כדי לשדרג את Cassandra:
        apigeectl apply -f overrides_1.3.yaml --datastore
      2. השלמת הבדיקה:
        kubectl -n namespace get pods

        כאשר namespace הוא מרחב השמות של Apigee Hybrid.

        ממשיכים לשלב הבא רק כשהפודים מוכנים.

      3. מחילים את ההחלפות כדי לשדרג את רכיבי הטלמטריה ובודקים שהשדרוג הושלם:
        apigeectl apply -f overrides_1.3.yaml --telemetry
        kubectl -n namespace get pods
      4. מחילים את השינויים כדי לשדרג את הרכיבים ברמת הארגון (MART, ‏ Watcher ו-Apigee Connect) ובודקים שהשדרוג הושלם:
        apigeectl apply -f overrides_1.3.yaml --org
        kubectl -n namespace get pods
      5. מחילים את השינויים כדי לשדרג את הסביבות. יש שתי אפשרויות:
        • מחילים את השינויים על סביבה אחת בכל פעם ובודקים שהם הושלמו. חוזרים על השלב הזה לכל סביבה:
          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

      הדגמה/ניסוי

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

      1. apigeectl apply -f overrides_1.3.yaml
      2. בודקים את הסטטוס:
        apigeectl check-ready -f overrides_1.3.yaml

      הוראות נוספות זמינות במאמר הגדרת GKE Hybrid – שלב 5: התקנת GKE Hybrid ב-GKE.

    5. אחרי שמסיימים את ההגדרה של hybrid 1.3, מוודאים שכל הצמתים של Cassandra (הישנים והחדשים) הם חלק מאותו אשכול Cassandra. מריצים את הפקודה הבאה באחד מהצמתים של Cassandra:
      kubectl -n namespace get pods
      kubectl -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.

    6. אחרי שכל הפודים יפעלו, מסירים את 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. מסירים את פרטי הניתוב של המארח הווירטואלי בגרסה 1.2.0:
      $APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml

      כאשר $APIGEECTL_HOME-v1.2 היא הספרייה שבה גיביתם את הספרייה של apigeectl בגרסה 1.2.

    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 ישן יותר

    1. cd לספרייה apigeectl שהותקנה לאחרונה.
    2. מריצים את הסקריפט tools/cas_cleanup.sh.

      הסקריפט הזה מוציא משימוש את ה-pod הישן של Cassandra מתוך טבעת Cassandra, מוחק את ה-STS הישן ומוחק את ה-PVC.

      bash cas_cleanup.sh Apigee namespace

    מחיקת משאבים של Istio בגרסה 1.4.6

    1. מריצים את הפקודה הבאה כדי למחוק את המשאבים האחרונים של 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)'
    2. מריצים את הפקודות הבאות כדי למחוק משימות ישנות מההתקנה של Istio 1.4.6:
      kubectl -n istio-system delete job istio-init-crd-10-1.4.6
      kubectl -n istio-system delete job istio-init-crd-11-1.4.6
      kubectl -n istio-system delete job istio-init-crd-14-1.4.6

    מזל טוב! השדרוג לגרסה 1.3.6 של Apigee Hybrid בוצע בהצלחה.