将 Apigee Hybrid 升级到 1.16 版

此过程涉及从 Apigee Hybrid 1.15.x 版升级到 Apigee Hybrid 1.16.0 版。

相对于 Apigee Hybrid v1.15 的更改

请注意以下更改:

  • Seccomp 配置文件:从 1.16 版开始,Apigee Hybrid 现在能够将 Seccomp 配置文件应用于运行时组件,从而显著提升部署的安全性。借助此功能,Apigee 管理员和安全团队可以限制容器化进程可以对宿主机的内核进行的系统调用。通过将容器限制为仅使用必要的系统调用,您可以:
    • 增强安全性:降低容器逃逸和提权的风险。
    • 强制执行最小权限:确保组件仅有权访问其运行所需的精确系统调用。
    • 满足合规性要求:提供关键控制措施,以满足严格的安全合规性要求。
    如需了解详情,请参阅为 pod 安全性配置 Seccomp 配置文件
  • 移除 Apigee Hybrid 中的 UDCA:在 Apigee Hybrid 1.16 版中,已移除统一数据收集代理 (UDCA) 组件。现在,向 Apigee 控制平面发送分析、跟踪和部署状态数据的责任由基于 Google Cloud Pub/Sub 的数据流水线来处理。自 Apigee Hybrid 1.14.0 版以来,基于 Pub/Sub 的数据流水线一直是默认的数据收集机制。
  • apigee-guardrails 服务账号: 在 v1.16.0 中,Apigee Hybrid 引入了 apigee-guardrails Google IAM 服务账号。apigee-operator 图表在安装期间使用此参数来检查您的项目中是否已启用所有必需的 API。

    请参阅:

  • 支持 cert-manager 版本 1.18 和 1.19:Apigee Hybrid v1.16 支持 cert-manager 版本 1.18版本 1.19。在 cert-manager 版本 1.18 中,Certificate.Spec.PrivateKey.rotationPolicy 的默认值发生了变化,可能会影响流量。如果您要从之前的 Apigee Hybrid 版本升级,并且要升级到 cert-manager 版本 1.18 或更高版本,请按照本指南中的升级 cert-manager 程序操作。

如需详细了解 Hybrid 1.16 版中的功能,请参阅 Apigee Hybrid v1.16.0 版本说明

前提条件

升级到 Hybrid 1.16 版之前,请确保您的安装满足以下要求:

在升级到 1.16.0 之前 - 限制和重要注意事项

  • Apigee Hybrid 1.16.0 引入了新的增强型单环境代理限制,可让您在单个环境中部署更多代理和共享流。如需了解每个环境可部署的代理和共享流数量的限制,请参阅限制:API 代理。此功能仅适用于新创建的 Hybrid 组织,无法应用于升级后的组织。如需使用此功能,请执行 Hybrid 1.16.0 的全新安装,然后创建新的组织。

    此功能仅在 2024 年订阅方案中提供,并受该订阅授予的权益的约束。如需详细了解此功能,请参阅增强型个别环境代理限制

  • 升级到 Apigee Hybrid 1.16 版可能需要停机。

    将 Apigee 控制器升级到 1.16.0 版时,所有 Apigee 部署都将执行滚动式重启。为了最大限度地减少滚动重启期间生产混合环境中的停机时间,请确保您至少(在相同或不同的区域/数据中心)运行两个集群。将所有生产流量转移到单个集群并且让您要升级的集群下线,然后继续执行升级过程。对每个集群重复执行此过程。

    Apigee 建议您在开始升级后,应尽快升级所有集群,以降低影响生产的可能性。第一个集群升级后,其余所有集群必须在何时升级是没有限制的。但是,在所有剩余集群升级之前,Cassandra 备份和恢复不能使用混合版本。例如,Hybrid 1.15 的备份不能用于恢复 Hybrid 1.16 实例。

  • 在升级过程中,管理平面的更改无需完全暂停。下面的升级说明中列出了对管理平面更改的所有必需的临时暂停操作。

升级到 1.16.0 版概览

以下各部分介绍升级 Apigee Hybrid 的过程:

  1. 准备升级
  2. 安装 Hybrid 运行时 1.16.0 版

准备升级到 1.16 版

备份 Hybrid 安装

  1. 这些说明将环境变量 APIGEE_HELM_CHARTS_HOME 用于文件系统中安装了 Helm 图表的目录。如果需要,请切换到此目录,然后使用以下命令定义变量:

    Linux

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    Mac OS

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    Windows

    set APIGEE_HELM_CHARTS_HOME=%CD%
    echo %APIGEE_HELM_CHARTS_HOME%
  2. 创建 1.15 版 $APIGEE_HELM_CHARTS_HOME/ 目录的备份副本。您可以使用任何备份过程。例如,您可以使用以下命令创建整个目录的 tar 文件:
    tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.15-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
  3. 按照 Cassandra 备份和恢复中的说明备份 Cassandra 数据库。
  4. 确保您的 TLS 证书和密钥文件(.crt.key 和/或 .pem)位于 $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/ 目录中。

升级 Kubernetes 版本

检查您的 Kubernetes 平台版本,并根据需要将 Kubernetes 平台升级到 Hybrid 1.15 和 Hybrid 1.16 均支持的版本。如需帮助,请参阅该平台的相关文档。

拉取 Apigee Helm 图表。

Apigee Hybrid 图表托管在 Google Artifact Registry 中:

oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts

使用以下 pull 命令将所有 Apigee Hybrid Helm 图表复制到您的本地存储空间:

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.16.0
helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar

为自定义 apigee 命名空间修改 kustomization.yaml

如果您的 Apigee 命名空间不是 apigee,请修改 apigee-operator/etc/crds/default/kustomization.yaml 文件并将 namespace 值替换为您的 Apigee 命名空间。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: APIGEE_NAMESPACE

如果您使用 apigee 作为命名空间,则无需修改该文件。

  • 安装更新后的 Apigee CRD:
    1. 通过运行以下命令使用 kubectl 试运行功能:

      kubectl apply -k  apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run=server
      
    2. 使用试运行命令进行验证后,运行以下命令:

      kubectl apply -k  apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    3. 使用 kubectl get crds 命令验证安装:
      kubectl get crds | grep apigee

      输出内容应如下所示:

      apigeedatastores.apigee.cloud.google.com                    2024-08-21T14:48:30Z
      apigeedeployments.apigee.cloud.google.com                   2024-08-21T14:48:30Z
      apigeeenvironments.apigee.cloud.google.com                  2024-08-21T14:48:31Z
      apigeeissues.apigee.cloud.google.com                        2024-08-21T14:48:31Z
      apigeeorganizations.apigee.cloud.google.com                 2024-08-21T14:48:32Z
      apigeeredis.apigee.cloud.google.com                         2024-08-21T14:48:33Z
      apigeerouteconfigs.apigee.cloud.google.com                  2024-08-21T14:48:33Z
      apigeeroutes.apigee.cloud.google.com                        2024-08-21T14:48:33Z
      apigeetelemetries.apigee.cloud.google.com                   2024-08-21T14:48:34Z
      cassandradatareplications.apigee.cloud.google.com           2024-08-21T14:48:35Z
      
  • 检查集群节点上的标签。 默认情况下,Apigee 会将数据 pod 调度到带有 cloud.google.com/gke-nodepool=apigee-data 标签的节点上,并将运行时 pod 调度到带有 cloud.google.com/gke-nodepool=apigee-runtime 标签的节点上。您可以在 overrides.yaml 文件中自定义节点池标签。

    如需了解详情,请参阅配置专用节点池

  • 设置 apigee-guardrails 服务账号

    从混合版本 v1.16 开始,升级 apigee-operator 图表需要使用 apigee-guardrails 服务账号。

    在以下步骤中,选择您使用的服务账号身份验证类型。

    1. 验证您可以执行 create-service-account。如果您刚刚下载了图表,则 create-service-account 文件可能尚未处于可执行模式。在 APIGEE_HELM_CHARTS_HOME 目录中,运行以下命令:
      ./apigee-operator/etc/tools/create-service-account --help

      如果输出显示 permission denied,则需要使该文件可执行,例如在 Linux、MacOS 或 UNIX 中或者在 Windows 资源管理器中使用 chmod,在 Windows 中使用 icacls 命令。例如:

      chmod +x ./apigee-operator/etc/tools/create-service-account
    2. 创建 apigee-guardrails 服务账号:

      Kubernetes Secret

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      此命令会创建 apigee-guardrails 服务账号并将密钥下载到 service-accounts/ 目录。

      JSON 文件

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir ./apigee-operator/

      此命令会创建 apigee-guardrails 服务账号并将密钥下载到 apigee-operator/ 图表目录。

      保险柜

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      此命令会创建 apigee-guardrails 服务账号并将密钥下载到 service-accounts/ 目录。

      适用于 GKE 的 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      此命令会创建 apigee-guardrails 服务账号并将密钥下载到 apigee-operator/etc/tools/service-accounts/ 目录。您不需要下载的密钥文件,可以将其删除。

      其他平台上的 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      此命令会创建 apigee-guardrails 服务账号并将密钥下载到 service-accounts/ 目录。

    3. apigee-guardrails 服务账号设置身份验证:

      Kubernetes Secret

      使用 service-accounts/ 目录中的 apigee-guardrails 服务账号密钥文件创建 Kubernetes Secret:

      kubectl create secret generic apigee-guardrails-svc-account \
          --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-guardrails.json" \
          -n $APIGEE_NAMESPACE

      请将以下内容添加到 overrides.yaml 文件:

      guardrails:
        serviceAccountRef: apigee-guardrails-svc-account

      JSON 文件

      将以下内容添加到您的 overrides.yaml 文件中,使用 apigee-operator/ 目录中 apigee-guardrails 服务账号密钥文件的路径:

      guardrails:
        serviceAccountPath: $PROJECT_ID-apigee-guardrails.json

      保险柜

      1. 更新保险柜中的 Secret secret/data/apigee/orgsakeys,以添加一个包含 apigee-guardrails 服务账号密钥文件内容的 guardrails 条目。
        vault kv patch secret/apigee/orgsakeys guardrails="$(cat ./service-accounts/hybrid115-apigee-guardrails.json)"
        
      2. 安全防护措施的 Kubernetes 服务账号 (KSA) 名为 apigee-operator-guardrails-sa。将 Guardrails KSA 添加到绑定到 Vault 中 apigee-orgsakeys 角色的组织专属服务账号。
        1. 获取 KSA 绑定的当前列表:
          vault read auth/kubernetes/role/apigee-orgsakeys
          

          输出应采用以下格式:

          Key                                         Value
          ---                                         -----
          alias_name_source                           serviceaccount_uid
          bound_service_account_names                 BOUND_SERVICE_ACCOUNT_NAMES
          bound_service_account_namespace_selector    n/a
          bound_service_account_namespaces            APIGEE_NAMESPACE

          在输出中,BOUND_SERVICE_ACCOUNT_NAMES 是一个以英文逗号分隔的服务账号名称列表。将 apigee-operator-guardrails-sa 添加到名称列表中。例如(为便于阅读,添加了换行符):

          apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
          apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
          rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
          assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
          44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
          agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
          -metrics-apigee-telemetry,apigee-open-telemetry,apigee-synchronizer
          -myhybridorg-dev-ee52aca,apigee-runtime-telemetry-collector-apigee-
          telemetry,apigee-logger-apigee-e-myhybrridorg-dev-ee52aca,apigee-sy
          nchronizer-myhybridog-prod-2d0221c,apigee-runtime-myhybridorg-prod-
          2d0221c,apigee-operator-guardrails-sa
        2. 使用更新后的服务账号名称列表更新 apigee-orgsakeys 角色的绑定:
          vault write auth/kubernetes/role/apigee-orgsakeys \
            bound_service_account_names=UPDATED_BOUND_SERVICE_ACCOUNT_NAMES \
            bound_service_account_namespaces=APIGEE_NAMESPACE \
            policies=apigee-orgsakeys-auth \
            ttl=1m
          
      3. SecretProviderClass 添加“安全措施”
        1. 修改 spc-org.yaml 文件。
        2. spec.parameters.objects 下,添加一个安全措施条目:
                - objectName: "guardrails"
                  secretPath: ""
                  secretKey: ""
        3. 更新您的 SecretProviderClass
          kubectl -n APIGEE_NAMESPACE apply -f spc-org.yaml
          

      适用于 GKE 的 WIF

      安全防护措施的 Kubernetes 服务账号 (KSA) 名为 apigee-operator-guardrails-sa。使用以下命令为 apigee-guardrails Google 服务账号 (GSA) 创建绑定:

      gcloud iam service-accounts add-iam-policy-binding apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$APIGEE_NAMESPACE/apigee-operator-guardrails-sa]" \
          --project $PROJECT_ID

      请将以下内容添加到 overrides.yaml 文件:

      guardrails:
        gsa: apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com

      其他平台上的 WIF

      安全防护措施的 Kubernetes 服务账号 (KSA) 名为 apigee-operator-guardrails-sa。 您需要授予安全防护措施 KSA 模拟 apigee-guardrails Google 服务账号 (GSA) 的权限,并将替换项配置为使用凭据配置文件。

      1. 使用以下命令授予 KSA 模拟 GSA 的权限:

        模板

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/system:serviceaccount:APIGEE_NAMESPACE:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        示例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@my-project.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        其中:

        • PROJECT_ID:您的 Google Cloud 项目 ID。
        • PROJECT_NUMBER:您在其中创建了工作负载身份池的项目的项目编号
        • POOL_ID:工作负载身份池 ID。
        • APIGEE_NAMESPACE:安装了 Apigee Hybrid 的命名空间。
      2. apigee-guardrails 服务账号创建凭据配置文件:
        gcloud iam workload-identity-pools create-cred-config \
          projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
          --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --credential-source-file=/var/run/service-account/token \
          --credential-source-type=text \
          --output-file=apigee-guardrails-credential-configuration.json
            

        其中,WORKLOAD_PROVIDER_ID 是您的工作负载身份池提供方 ID。

      3. 配置 apigee-guardrails 以使用工作负载身份联合,方法如下:

        WIF:密钥

        1. 使用凭证源文件为每个凭证配置文件创建一个新的 Kubernetes Secret。
          kubectl create secret -n APIGEE_NAMESPACE generic guardrails-workload-identity-secret --from-file="client_secret.json=./apigee-guardrails-credential-configuration.json"
        2. serviceAccountRef 的值替换为新 Secret:
          guardrails:
            serviceAccountRef: guardrails-workload-identity-secret

        WIF:文件

        将生成的 apigee-guardrails-credential-configuration.json 文件移至 apigee-operator/ 图表目录。

        请将以下内容添加到 overrides.yaml 文件:

        guardrails:
          serviceAccountPath: apigee-guardrails-credential-configuration.json

        WIF:保险柜

        使用相应的凭据源文件更新保险柜中 guardrails 的服务账号密钥:

        SAKEY=$(cat .apigee-guardrails-credential-configuration.json); kubectl -n APIGEE_NAMESPACE exec vault-0 -- vault kv patch secret/apigee/orgsakeys guardrails="$SAKEY"

        如需了解详情,请参阅 Storing service account keys in Hashicorp Vault

    升级 cert-manager

    Apigee Hybrid v1.16 支持 cert-manager 版本 1.16 到 1.19。cert-manager 1.18 中有一项变更可能会导致流量出现问题。在 cert-manager 版本 1.18 中,Certificate.Spec.PrivateKey.rotationPolicy 的默认值已从 Never 更改为 Always。对于升级后的 Apigee Hybrid 安装,这可能会导致流量出现问题。从较低版本升级到 Hybrid v1.16 时,您必须修改 apigee-ca 证书以弥补此变更,或者将 cert-manager 版本保持在 1.17.x 版或更低版本。

    在将 cert-manager 升级到 1.18 或 1.19 之前,请按照以下步骤修改 apigee-ca 证书,将 Certificate.Spec.PrivateKey.rotationPolicy 的值设置为 Never

    1. 检查 apigee-ca 证书的内容,看看是否已设置 rotationPolicy
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      在输出中查找 spec.privateKey 下的值:

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          # Note: rotationPolicy would appear here if it is set.
          size: 256
        secretName: apigee-ca
      ...
    2. 如果未设置 rotationPolicy 或将其设置为 Always,请修改 apigee-ca 证书,将 rotationPolicy 的值设置为 Never
      1. 首先执行试运行:
        kubectl patch Certificate \
          --dry-run=server \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
      2. 修补证书:
        kubectl patch Certificate \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
    3. 验证 rotationPolicy 的值现在是否已设置为 Never
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      输出应类似如下所示:

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          rotationPolicy: Never
          size: 256
        secretName: apigee-ca
      ...
    4. 升级 cert-manager。以下命令将下载并安装 cert-manager v1.19.2:
      kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.2/cert-manager.yaml

      如需查看受支持的版本列表,请参阅受支持的平台和版本:cert-manager

    请参阅:

    安装 Hybrid 1.16.0 运行时

    1. 如果没有,请转到 APIGEE_HELM_CHARTS_HOME 目录。从该目录运行以下命令。
    2. 升级 Apigee Operator/Controller:

      试运行:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      验证 Apigee Operator 安装:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
      operator   apigee   3          2024-08-21 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.16.0   1.16.0
      

      通过检查可用性来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           7d20h
      
    3. 升级 Apigee 数据存储区:

      试运行:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      通过检查 apigeedatastore 的状态来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    2d
    4. 升级 Apigee 遥测:

      试运行:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      通过检查状态来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   2d
    5. 升级 Apigee Redis:

      试运行:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      通过检查状态来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   2d
    6. 升级 Apigee 入站流量管理器:

      试运行:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      通过检查可用性来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           2d
    7. 升级 Apigee 组织:

      试运行:

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升级图表:

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      通过检查相应组织的状态来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      apigee-my-org-my-env      running   2d
    8. 升级环境。

      一次只能安装一个环境。使用 --set env=ENV_NAME 指定环境。

      试运行:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE \
        --dry-run=server
      
      • ENV_RELEASE_NAME 是用于跟踪 apigee-env 图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。 通常,这与 ENV_NAME 相同。但是,如果环境与环境组具有相同的名称,则您必须为环境和环境组使用不同的版本名称,例如 dev-env-releasedev-envgroup-release。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念
      • ENV_NAME 是您要升级的环境的名称。
      • OVERRIDES_FILE 是 v.1.16.0 的新替换文件

      升级图表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE
      

      通过检查相应环境的状态来验证它已启动并正在运行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                          STATE       AGE   GATEWAYTYPE
      apigee-my-org-my-env          running     2d
    9. 升级环境组 (virtualhosts)。
      1. 一次只能升级一个环境组 (virtualhost)。使用 --set envgroup=ENV_GROUP_NAME 指定环境组。对 override.yaml 文件中提到的每个环境组重复运行以下命令:

        试运行:

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE \
          --dry-run=server
        

        ENV_GROUP_RELEASE_NAME 是您之前安装 apigee-virtualhost 图表时使用的名称。通常为 ENV_GROUP_NAME

        升级图表:

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE
        
      2. 检查 ApigeeRoute (AR) 的状态。

        安装 virtualhosts 会创建 ApigeeRouteConfig (ARC),它会在 Apigee Watcher 从控制平面拉取环境组相关详细信息后在内部创建 ApigeeRoute (AR)。因此,请检查相应 AR 的状态是否为正在运行:

        kubectl -n APIGEE_NAMESPACE get arc
        
        NAME                                STATE   AGE
        apigee-org1-dev-egroup                       2d
        kubectl -n APIGEE_NAMESPACE get ar
        
        NAME                                        STATE     AGE
        apigee-org1-dev-egroup-123abc               running   2d
    10. 确认所有安装都已成功升级后,从 apigee-system 命名空间中删除较旧的 apigee-operator 版本。
      1. 卸载旧的 operator 版本:
        helm delete operator -n apigee-system
        
      2. 删除 apigee-system 命名空间:
        kubectl delete namespace apigee-system
        
    11. 再次在 Apigee 命名空间中升级 operator,以重新安装已删除的集群级资源:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      

    回滚到先前的版本

    如需回滚到先前版本,请使用较早的图表版本以相反的顺序回滚升级过程。从 apigee-virtualhost 开始,然后返回 apigee-operator,接着还原 CRD。

    1. 将所有图表从 apigee-virtualhost 还原为 apigee-datastore。以下命令假定您使用的是先前版本 (v1.15.x) 中的图表。

      对每个环境组运行以下命令:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace apigee \
        --atomic \
        --set envgroup=ENV_GROUP_NAME \
        -f 1.15_OVERRIDES_FILE
      

      对每个环境运行以下命令:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace apigee \
        --atomic \
        --set env=ENV_NAME \
        -f 1.15_OVERRIDES_FILE
      

      还原除 apigee-operator 以外的其余图表。

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade redis apigee-redis/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    2. 创建 apigee-system 命名空间。
      kubectl create namespace apigee-system
      
    3. 将资源注解重新修补到 apigee-system 命名空间。
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-namespace='apigee-system'
      
    4. 如果您也更改了版本名称,请使用 operator 版本名称更新注释。
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-name='operator'
      
    5. apigee-operator 重新安装到 apigee-system 命名空间中。
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    6. 通过重新安装较旧的 CRD 来还原 CRD。
      kubectl apply -k apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    7. 清理 APIGEE_NAMESPACE 命名空间中的 apigee-operator 版本以完成回滚过程。
      helm uninstall operator -n APIGEE_NAMESPACE
      
    8. operator 被卸载时,某些集群级资源(例如 clusterIssuer)会被删除。使用以下命令重新安装它们:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE