升级 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 版所做的更改:

    v1.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. 列出 Pods:
    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 is ready”时,您可以试用“dry run”安装。使用 --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