升級 Apigee Hybrid

升級至 1.2.0 版

請按照下列步驟將 Apigee Hybrid 升級至 1.2.0 版:

步驟 1:升級 Kubernetes 並下載發布套件

  1. 請按照下列步驟升級 Kubernetes 平台。如需協助,請按照平台的說明文件操作:
    平台 升級至版本
    GKE 1.14.x
    Anthos 1.2
    AKS 1.14.x
  2. 下載適用於您作業系統的版本套件:

    Mac 64 位元:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.2.0/apigeectl_mac_64.tar.gz

    Linux 64 位元

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.2.0/apigeectl_linux_64.tar.gz

    Mac 32 位元:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.2.0/apigeectl_mac_32.tar.gz

    Linux 32 位元

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.2.0/apigeectl_linux_32.tar.gz

步驟 2:重新設定安裝目錄

  1. 找出 Apigee Hybrid 初次安裝時建立的基本安裝目錄。基本目錄是 $APIGEEGTL_HOME 目錄所在的目錄。在以下範例中,基礎目錄為 /Users/myhome/hybrid
    echo $APIGEECTL_HOME
    /Users/myhome/hybrid/apigeectl
  2. 將下載的 gzip 檔案內容解壓縮至 Apigee Hybrid 基礎目錄:

    tar xvzf filename.tar.gz -C path-to-base-directory
  3. cd 至基礎目錄。
  4. 根據預設,tar 內容會解壓縮為名稱中含有版本和平台的目錄。例如:./apigeectl_1.2.0-f7b96a8_linux_64

  5. 重新命名目前的 apigeectl 目錄。舉例來說,如果目前的版本是 1.1.1,請將 apigeectl 目錄重新命名為 apigeectl_1.1.1
  6. 將新解壓縮的安裝目錄重新命名為 apigeectl。這就是環境 $APIGEECTL_HOME 指向的位置。

步驟 3:更新覆寫檔案

  1. 請複製覆寫檔案,並小心儲存舊檔案,以備日後還原使用。在下列步驟中,您將對覆寫檔案進行必要變更,然後再套用至叢集。
  2. 請按照下列說明更新覆寫檔案:

    以下是您必須在覆寫檔案中進行的設定變更摘要。摘要後的表格中會提供完整範例。如您所見,envs[] 屬性與先前版本有重大差異:

    • 屬性 envs[].hostAlias 已移除,並由新屬性 virtualhosts.hostAliases[] 取代。
    • 您必須新增必要的設定屬性 virtualhosts
    • 您必須將 envs[].sslCertPathenvs[].sslKeyPath 屬性從 envs 移至 virtualhosts
    • 您必須新增 virtualhosts.routingRules 設定節。virtualhosts.routingRules 屬性取代先前的 envs[].paths 屬性。如果覆寫檔案中含有 envs[].paths,您必須將其移除。如要進一步瞭解虛擬主機設定,請參閱「設定虛擬主機」。

    下表說明 1.1.1 版本覆寫檔案與 1.2.0 版檔案的差異。這個範例旨在強調您需要為 1.2.0 版做出哪些變更:

    1.1.x 版設定 v1.2.0 設定
    envs:
      - name: test1
        hostAlias: "api.example.com"
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        serviceAccountPaths:
          synchronizer: ./sa/sync.json
          udca: ./sa/udca.json
        paths:
          uri:
            prefixes:
              - /orders
              - /items
      - name: test2
        hostAlias: "api.example.com"
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        serviceAccountPaths:
          synchronizer: ./sa/sync.json
          udca: ./sa/udca.json
        paths:
          uri:
            prefixes:
              - /v0/hello
              - /httpbin
    virtualhosts:
      - name: default
        hostAliases: ["api.example.com"]
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        routingRules:
          - paths:
            - /orders
            - /items
            env: test1
          - paths:
            - /v0/hello
            - /httpbin
            env: test2
    
    envs:
      - name: test1
        serviceAccountPaths:
          synchronizer: ./sa/synchronizer.json
          udca: ./sa/udca.json
      - name: test2
        serviceAccountPaths:
          synchronizer: ./sa/synchronizer.json
          udca: ./sa/udca.json

步驟 4:為叢集套用升級

  1. 如果您在 1.1.1 版安裝中啟用了 Apigee Connect,則必須移除部署:
    1. 首先,列出 Apigee 部署作業:
      kubectl -n namespace get ad
    2. 刪除 Apigee Connect 部署:
      kubectl -n namespace delete ad apigee-connect-name
  2. 列出 Pod:
    kubectl get pods -n namespace
  3. 從叢集中刪除 apigee-cps-setup Pod。使用 pod 的全名,其中包含先前指令傳回的貴機構名稱。例如:
    kubectl -n namespace delete pod apigee-cps-setup-org
  4. 刪除同一個命名空間中的 apigee-cps-create-user Pod:
    kubectl -n namespace delete pod apigee-cps-create-user
  5. 清理混合式執行階段命名空間的已完成工作,其中 namespace 是覆寫檔案中指定的命名空間 (如果您已指定命名空間)。如未指定,預設命名空間為 apigee
    kubectl delete job -n namespace \
      $(kubectl get job -n namespace -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  6. 清理 apigee-system 命名空間的已完成工作:
    kubectl delete job -n apigee-system \
      $(kubectl get job -n apigee-system -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  7. 清理 istio-system 命名空間的已完成工作:
    kubectl delete job -n istio-system \
      $(kubectl get job -n istio-system -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  8. cd./hybrid-files 目錄:
  9. 為新版本初始化 apigeectl
    $APIGEECTL_HOME/apigeectl init -f overrides/overrides-file.yaml
  10. 檢查初始化完成的時間:
    $APIGEECTL_HOME/apigeectl check-ready -f overrides/overrides-file.yaml
  11. check-ready 回覆「所有容器都已就緒」時,您可以嘗試「模擬」安裝。 執行含有 --dry-run=true 旗標的 apply 指令。進行模擬執行作業,可讓您在對叢集進行任何變更前,先檢查是否有任何錯誤:
    $APIGEECTL_HOME/apigeectl apply -f overrides/overrides-file.yaml --dry-run=true
  12. 如果沒有錯誤,您可以將 Apigee 專屬的執行階段元件套用至叢集:
    $APIGEECTL_HOME/apigeectl apply -f overrides/overrides-file.yaml
  13. 重新執行 check-ready,判斷升級何時完成。

復原升級

如要還原先前的升級,請按照下列步驟操作:

  1. 清理混合式執行階段命名空間的已完成工作,其中 namespace 是覆寫檔案中指定的命名空間 (如果您已指定命名空間)。如未指定,預設命名空間為 apigee
    kubectl delete job -n namespace \
      $(kubectl get job -n namespace -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  2. 清理 apigee-system 命名空間的已完成工作:
    kubectl delete job -n apigee-system \
      $(kubectl get job -n apigee-system -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  3. 清理 istio-system 命名空間的已完成工作:
    kubectl delete job -n istio-system \
      $(kubectl get job -n istio-system -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  4. 刪除 Apigee Operators 部署。這項作業不會對您的執行階段流量造成任何影響:
    kubectl -n apigee-system delete deployment apigee-controller-manager
  5. 變更 $APIGEECTL_HOME 變數,讓其指向包含 apigeectl 原始版本的目錄。例如:
    export APIGEECTL_HOME=path-to-original-apigeectl-directory
  6. 在要復原的安裝版本根目錄中,執行 apigeectl init,然後執行 apigeectl apply。請務必使用原始覆寫檔案,以便回溯至所需版本:
      $APIGEECTL_HOME/apigeectl init -f overrides/original-overrides.yaml
      $APIGEECTL_HOME/apigeectl apply -f overrides/original-overrides.yaml