升級 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 回覆「All containers are 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