使用 Helm 图表安装和管理 Apigee Hybrid

本文档将指导您完成使用 Helm 图表安装 Apigee Hybrid v1.10 的分步过程。

版本

Apigee Hybrid Helm 图表用于 Apigee Hybrid v1.10.x。如需查看 Hybrid 版本列表,请参阅 Apigee Hybrid 版本历史记录

前提条件

范围

支持的 Kubernetes 平台和版本

平台 版本
GKE 1.24、1.25、1.26
AKS 1.24、1.25、1.26
EKS 1.24、1.25、1.26
OpenShift 4.11、4.12

限制

  • Helm 图表不完全支持 CRD;因此,我们将使用 kubectl -k 命令来安装和升级它们。我们的目标是遵循有关 Kubernetes 管理的社区和 Google 最佳实践。通过 Helm 进行的 CRD 部署尚未达到社区状态,在社区状态时我们会看到广泛的支持或对此模型的请求。因此,应使用 kubectl 管理 Apigee CRD,如本文档中所述。
  • apigeectl 中,我们在 overrides.yaml 中一直使用服务账号和证书文件。但是,Helm 不支持引用图表目录之外的文件。为服务账号和证书文件选择以下选项之一:
    • 在每个图表目录中放入相关文件的副本
    • 在每个图表目录中为每个文件或文件夹创建符号链接。Helm 将打开图表目录之外的符号链接,但将输出如下警告:
      apigee-operator/gsa -> ../gsa
    • 使用 Kubernetes Secret。例如,对于服务账号:
      kubectl create secret generic SECRET_NAME \
        --from-file="client_secret.json=CLOUD_IAM_FILE_NAME.json" \
        -n apigee
      

支持的 Kubernetes 平台和版本

如需查看支持的平台的列表,请参阅 Apigee Hybrid 支持的平台表中的 v1.10 列。

所需权限

下表列出了 Kubernetes 和 Apigee 所需的资源和权限。

如需过滤此表格,请选择一个类别、输入搜索字词,或点击列标题进行排序。

类别 资源 资源类型 Kubernetes RBAC 权限
Datastore apigeedatastores.apigee.cloud.google.com Apigee create delete patch update
Datastore certificates.cert-manager.io Kubernetes create delete patch update
Datastore cronjobs.batch Kubernetes create delete patch update
Datastore jobs.batch Kubernetes create delete patch update
Datastore secrets Kubernetes create delete patch update
环境 apigeeenvironments.apigee.cloud.google.com Apigee create delete patch update
环境 secrets Kubernetes create delete patch update
环境 serviceaccounts Kubernetes create delete patch update
入站流量管理器 certificates.cert-manager.io Kubernetes create delete patch update
入站流量管理器 configmaps Kubernetes create delete patch update
入站流量管理器 deployments.apps Kubernetes create delete patch update
入站流量管理器 horizontalpodautoscalers.autoscaling Kubernetes create delete patch update
入站流量管理器 issuers.cert-manager.io Kubernetes create delete patch update
入站流量管理器 serviceaccounts Kubernetes create delete patch update
入站流量管理器 services Kubernetes create delete patch update
运算符 apigeedatastores.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeedatastores.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeedatastores.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeedeployments.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeedeployments.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeedeployments.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeeenvironments.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeeenvironments.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeeenvironments.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeeissues.apigee.cloud.google.com Apigee create delete get list watch
运算符 apigeeorganizations.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeeorganizations.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeeorganizations.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeeredis.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeeredis.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeeredis.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeerouteconfigs.apigee.cloud.google.com Apigee get list
运算符 apigeeroutes.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeeroutes.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeeroutes.apigee.cloud.google.com/status Apigee get patch update
运算符 apigeetelemetries.apigee.cloud.google.com Apigee create delete get list patch update watch
运算符 apigeetelemetries.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 apigeetelemetries.apigee.cloud.google.com/status Apigee get list patch update
运算符 cassandradatareplications.apigee.cloud.google.com Apigee get list patch update watch
运算符 cassandradatareplications.apigee.cloud.google.com/finalizers Apigee get patch update
运算符 cassandradatareplications.apigee.cloud.google.com/status Apigee get patch update
运算符 *.networking.x.k8s.io Kubernetes get list watch
运算符 apiservices.apiregistration.k8s.io Kubernetes create delete get list patch update watch
运算符 certificates.cert-manager.io Kubernetes create delete get list patch update watch
运算符 certificates.cert-manager.io/finalizers Kubernetes create delete get list patch update watch
运算符 certificatesigningrequests.certificates.k8s.io Kubernetes create delete get update watch
运算符 certificatesigningrequests.certificates.k8s.io/approval Kubernetes create delete get update watch
运算符 certificatesigningrequests.certificates.k8s.io/status Kubernetes create delete get update watch
运算符 clusterissuers.cert-manager.io Kubernetes create get watch
运算符 clusterrolebindings.rbac.authorization.k8s.io Kubernetes create delete get list patch update watch
运算符 clusterroles.rbac.authorization.k8s.io Kubernetes create delete get list patch update watch
运算符 configmaps Kubernetes create delete get list patch update watch
运算符 configmaps/status Kubernetes get patch update
运算符 cronjobs.batch Kubernetes create delete get list patch update watch
运算符 customresourcedefinitions.apiextensions.k8s.io Kubernetes get list watch
运算符 daemonsets.apps Kubernetes create delete get list patch update watch
运算符 deployments.apps Kubernetes get list watch
运算符 deployments.extensions Kubernetes get list watch
运算符 destinationrules.networking.istio.io Kubernetes create delete get list patch update watch
运算符 endpoints Kubernetes get list watch
运算符 endpointslices.discovery.k8s.io Kubernetes get list watch
运算符 events Kubernetes create delete get list patch update watch
运算符 gateways.networking.istio.io Kubernetes create delete get list patch update watch
运算符 horizontalpodautoscalers.autoscaling Kubernetes create delete get list patch update watch
运算符 ingressclasses.networking.k8s.io Kubernetes get list watch
运算符 ingresses.networking.k8s.io/status Kubernetes all verbs
运算符 issuers.cert-manager.io Kubernetes create delete get list patch update watch
运算符 jobs.batch Kubernetes create delete get list patch update watch
运算符 leases.coordination.k8s.io Kubernetes create get list update
运算符 namespaces Kubernetes get list watch
运算符 nodes Kubernetes get list watch
运算符 peerauthentications.security.istio.io Kubernetes create delete get list patch update watch
运算符 persistentvolumeclaims Kubernetes create delete get list patch update watch
运算符 persistentvolumes Kubernetes get list watch
运算符 poddisruptionbudgets.policy Kubernetes create delete get list patch update watch
运算符 pods Kubernetes create delete get list patch update watch
运算符 pods/exec Kubernetes create
运算符 replicasets.apps Kubernetes create delete get list patch update watch
运算符 replicasets.extensions Kubernetes get list watch
运算符 resourcequotas Kubernetes create delete get list patch update watch
运算符 rolebindings.rbac.authorization.k8s.io Kubernetes create delete get list patch update watch
运算符 roles.rbac.authorization.k8s.io Kubernetes create delete get list patch update watch
运算符 secrets Kubernetes batch create delete get list patch update watch
运算符 securitycontextconstraints.security.openshift.io Kubernetes create get list
运算符 serviceaccounts Kubernetes create delete get list patch update watch
运算符 services Kubernetes batch create delete get list patch update watch
运算符 signers.certificates.k8s.io Kubernetes approve
运算符 statefulsets.apps Kubernetes create delete get list patch update watch
运算符 subjectaccessreviews.authorization.k8s.io Kubernetes create get list
运算符 tokenreviews.authentication.k8s.io Kubernetes create
运算符 virtualservices.networking.istio.io Kubernetes create delete get list patch update watch
组织部门 apigeeorganizations.apigee.cloud.google.com Apigee create delete patch update
组织部门 secrets Kubernetes create delete patch update
组织部门 serviceaccounts Kubernetes create delete patch update
Redis apigeeredis.apigee.cloud.google.com Apigee create delete patch update
Redis secrets Kubernetes create delete patch update
遥测 apigeetelemetry.apigee.cloud.google.com Apigee create delete patch update
遥测 secrets Kubernetes create delete patch update
遥测 serviceaccounts Kubernetes create delete patch update
虚拟主机 apigeerouteconfigs.apigee.cloud.google.com Apigee create delete patch update
虚拟主机 secrets Kubernetes create delete patch update

另请参阅:

准备安装

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

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

拉取 Apigee Helm 图表

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

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.10.4
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 Hybrid

安装顺序概览

组件安装从左到右依次进行,如下图所示。图中垂直堆叠的组件可以一起安装,并且可以按任意顺序安装。安装任何组件后,您可以随时单独更新该组件;例如副本、内存、CPU 等。

安装顺序:依次是证书管理器、CRD、Apigee operator;然后是堆叠组件:redis、数据存储区、遥测、Ingress 管理器;然后是组织;然后是堆叠组件:环境和虚拟主机

准备使用 Helm 图表安装 Apigee Hybrid

  1. 创建将用于 apigee 资源的命名空间。这应与 overrides.yaml 文件中的命名空间字段匹配。如果 overrides.yaml 中没有此命名空间,则默认为 apigee
    1. 检查命名空间是否已存在:

      kubectl get namespace apigee

      如果命名空间存在,则输出包括:

        NAME     STATUS   AGE
        apigee   Active   1d
    2. 如果命名空间尚不存在,请创建该命名空间:

      kubectl create namespace apigee
  2. 创建服务账号并为其分配适当的 IAM 角色。Apigee Hybrid 使用以下服务账号:

    服务账号 IAM 角色
    apigee-cassandra Storage Object Admin
    apigee-logger Logs Writer
    apigee-mart Apigee Connect Agent
    apigee-metrics Monitoring Metric Writer
    apigee-runtime 无需角色
    apigee-synchronizer Apigee Synchronizer Manager
    apigee-udca Apigee Analytics Agent
    apigee-watcher Apigee Runtime Agent

    Apigee 在 apigee-operator/etc/tools 目录中提供了一个工具 create-service-account

    APIGEE_HELM_CHARTS_HOME/
    └── apigee-operator/
        └── etc/
            └── tools/
                └── create-service-account
    

    此工具会创建服务账号、将 IAM 角色分配给每个账号,并为每个账号下载 JSON 格式的证书文件。

    1. 创建一个目录,用于下载服务账号证书文件。您将在以下命令中的 SERVICE_ACCOUNTS_PATH 处指定该目录。
    2. 您可以使用单个命令通过以下选项创建所有服务账号:
      APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account --env prod --dir SERVICE_ACCOUNTS_PATH
      
    3. 列出替换文件的服务账号名称:
      ls service-accounts
      
      my_project-apigee-cassandra.json    my_project-apigee-runtime.json
      my_project-apigee-logger.json       my_project-apigee-synchronizer.json
      my_project-apigee-mart.json         my_project-apigee-udca.json
      my_project-apigee-metrics.json      my_project-apigee-watcher.json

      如需了解详情,请参阅以下内容:

  3. 在安装之前,请查看 overrides.yaml 文件以验证设置:
    instanceID: UNIQUE_ID_TO_IDENTIFY_THIS_CLUSTER
    namespace: apigee # required for Helm charts installation
    
    # By default, logger and metrics are enabled and requires below details
    # Google Cloud project and cluster
    gcp:
      projectID: PROJECT_ID
      region: REGION
    
    k8sCluster:
      name: CLUSTER_NAME
      region: REGION
    
    org: ORG_NAME
    
    envs:
    - name: "ENV_NAME"
      serviceAccountPaths:
        runtime: "PATH_TO_RUNTIME_SVC_ACCOUNT"
        synchronizer: "PATH_TO_SYNCHRONIZER_SVC_ACCOUNT"
        udca: "PATH_TO_UDCA_SVC_ACCOUNT"
    
    ingressGateways:
    - name: GATEWAY_NAME # maximum 17 characters, eg: "ingress-1". See Known issue 243167389.
      replicaCountMin: 1
      replicaCountMax: 2
      svcType: LoadBalancer
    
    virtualhosts:
    - name: ENV_GROUP_NAME
      selector:
        app: apigee-ingressgateway
        ingress_name: GATEWAY_NAME
      sslSecret: SECRET_NAME
    
    mart:
      serviceAccountPath: "PATH_TO_MART_SVC_ACCOUNT"
    
    logger:
      enabled: TRUE_FALSE # lowercase without quotes, eg: true
      serviceAccountPath: "PATH_TO_LOGGER_SVC_ACCOUNT"
    
    metrics:
      enabled: TRUE_FALSE # lowercase without quotes, eg: true
      serviceAccountPath: "PATH_TO_METRICS_SVC_ACCOUNT"
    
    udca:
      serviceAccountPath: "PATH_TO_UDCA_SVC_ACCOUNT"
    
    connectAgent:
      serviceAccountPath: "PATH_TO_MART_SVC_ACCOUNT"
    
    watcher:
      serviceAccountPath: "PATH_TO_WATCHER_SVC_ACCOUNT"

    这与您将用于此 Helm 安装的替换配置相同。如需了解更多设置,请参阅配置属性参考文档

    如需查看更多替换文件示例,请参阅第 6 步:配置 Hybrid 运行时

  4. 启用同步器访问权限。这是安装 Apigee Hybrid 的前提条件。
    1. 使用以下命令检查同步器访问权限是否已启用:

      export TOKEN=$(gcloud auth print-access-token)
      
      curl -X POST -H "Authorization: Bearer $TOKEN" \
        -H "Content-Type:application/json" \
        "https://apigee.googleapis.com/v1/organizations/ORG_NAME:getSyncAuthorization" \
        -d ''
      

      输出内容应如下所示:

      {
        "identities":[
           "serviceAccount:SYNCHRONIZER_SERVICE_ACCOUNT_ID"
        ],
        "etag":"BwWJgyS8I4w="
      }
    2. 如果输出不包含服务账号 ID,请启用同步器访问权限。您的账号必须具有 Apigee Organization Admin IAM 角色 (roles/apigee.admin) 才能执行此任务。

      curl -X POST -H "Authorization: Bearer $TOKEN" \
        -H "Content-Type:application/json" \
        "https://apigee.googleapis.com/v1/organizations/ORG_NAME:setSyncAuthorization" \
        -d '{"identities":["'"serviceAccount:SYNCHRONIZER_SERVICE_ACCOUNT_ID"'"]}'
      

      如需了解详情,请参阅 Apigee Hybrid 安装文档中的第 7 步:启用同步器访问权限

  5. 使用以下命令安装 Cert Manager:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
    
  6. 安装 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                    2023-10-09T14:48:30Z
      apigeedeployments.apigee.cloud.google.com                   2023-10-09T14:48:30Z
      apigeeenvironments.apigee.cloud.google.com                  2023-10-09T14:48:31Z
      apigeeissues.apigee.cloud.google.com                        2023-10-09T14:48:31Z
      apigeeorganizations.apigee.cloud.google.com                 2023-10-09T14:48:32Z
      apigeeredis.apigee.cloud.google.com                         2023-10-09T14:48:33Z
      apigeerouteconfigs.apigee.cloud.google.com                  2023-10-09T14:48:33Z
      apigeeroutes.apigee.cloud.google.com                        2023-10-09T14:48:33Z
      apigeetelemetries.apigee.cloud.google.com                   2023-10-09T14:48:34Z
      cassandradatareplications.apigee.cloud.google.com           2023-10-09T14:48:35Z
      
  7. 检查集群节点上的现有标签。默认情况下,Apigee 会将数据 Pod 安排到带有 cloud.google.com/gke-nodepool=apigee-data 标签的节点上,并将运行时 Pod 安排到带有 cloud.google.com/gke-nodepool=apigee-runtime 标签的节点上。您可以在 overrides.yaml 文件中自定义节点池标签。

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

安装 Apigee Hybrid Helm 图表

  1. 安装 Apigee Operator/Controller:

    helm upgrade operator apigee-operator/ \
      --install \
      --create-namespace \
      --namespace apigee-system \
      --atomic \
      -f overrides.yaml
    

    验证 Apigee Operator 安装:

    helm ls -n apigee-system
    
    NAME           NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    operator    apigee-system   3               2023-06-26 00:42:44.492009 -0800 PST    deployed        apigee-operator-1.10.4   1.10.4

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

    kubectl -n apigee-system get deploy apigee-controller-manager
    
    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    apigee-controller-manager   1/1     1            1           7d20h
  2. 安装 Apigee 数据存储区:

    helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

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

    kubectl -n apigee get apigeedatastore default
    
    NAME      STATE       AGE
    default   running    2d
  3. 安装 Apigee 遥测:

    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

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

    kubectl -n apigee get apigeetelemetry apigee-telemetry
    
    NAME               STATE     AGE
    apigee-telemetry   running   2d
  4. 安装 Apigee Redis:

    helm upgrade redis apigee-redis/ \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

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

    kubectl -n apigee get apigeeredis default
    
    NAME      STATE     AGE
    default   running   2d
  5. 安装 Apigee 入站流量管理器:

    helm upgrade ingress-manager apigee-ingress-manager/ \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

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

    kubectl -n apigee get deployment apigee-ingressgateway-manager
    
    NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
    apigee-ingressgateway-manager   2/2     2            2           2d
  6. 安装 Apigee 组织:

    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

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

    kubectl -n apigee get apigeeorg
    
    NAME                      STATE     AGE
    apigee-org1-xxxxx          running   2d
  7. 安装环境。

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

    helm upgrade apigee-env-ENV_NAME apigee-env/ \
      --install \
      --namespace apigee \
      --atomic \
      --set env=ENV_NAME \
      -f overrides.yaml
    

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

    kubectl -n apigee get apigeeenv
    
    NAME                          STATE       AGE   GATEWAYTYPE
    apigee-org1-dev-xxx            running     2d
  8. 创建 TLS 证书。您必须在 Apigee Hybrid 配置中为运行时入站网关提供 TLS 证书。
    1. 创建证书。在生产环境中,您需要使用签名证书。您可以使用证书和密钥对或 Kubernetes Secret。

      对于演示和测试安装,运行时网关可以接受自签名凭据。在以下示例中,openssl 用于生成自签名凭据:

      openssl req -nodes -new -x509 \
        -keyout PATH_TO_CERTS_DIRECTORY/keystore_ENV_GROUP_NAME.key \
        -out PATH_TO_CERTS_DIRECTORY/keystore_ENV_GROUP_NAME.pem \
        -subj '/CN='YOUR_DOMAIN'' -days 3650
      

      如需了解详情,请参阅第 5 步:创建 TLS 证书

    2. 创建 Kubernetes Secret 以引用证书:

      kubectl create secret generic NAME \
        --from-file="cert=PATH_TO_CRT_FILE" \
        --from-file="key=PATH_TO_KEY_FILE" \
        -n apigee
      
  9. 安装虚拟主机。

    一次只能安装一个环境组 (virtualhost)。使用 --set envgroup=ENV_GROUP_NAME 指定环境组:

    # repeat the following command for each env group mentioned in the overrides.yaml file
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace apigee \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides.yaml
    

    这会创建 ApigeeRouteConfig (ARC),当 Apigee watcher 从控制平面拉取环境组相关详细信息时,ARC 会在内部创建 ApigeeRoute (AR)。因此,请检查相应 AR 的状态是否为 running:

    kubectl -n apigee get arc
    
    NAME                                STATE   AGE
    apigee-org1-dev-egroup                       2d
    kubectl -n apigee get ar
    
    NAME                                        STATE     AGE
    apigee-org1-dev-egroup-xxxxxx                running   2d

Helm 图表和 Apigee Hybrid 的其他应用场景

Cassandra 备份和恢复

  1. 如需启用备份,请执行以下操作:
    1. overrides.yaml 文件中更新 Cassandra 备份详细信息:

      cassandra:
        backup:
          enabled: true
          serviceAccountPath: PATH_TO_GSA_FILE
          dbStorageBucket: BUCKET_LINK
          schedule: "45 23 * * 6"
    2. apigee-datastore 图表运行 Helm 升级命令:

      helm upgrade datastore apigee-datastore/ \
        --namespace apigee \
        --atomic \
        -f overrides.yaml
      
  2. 同样,如需启用恢复,请执行以下操作:
    1. overrides.yaml 文件中更新 Cassandra 恢复详细信息:

      cassandra:
        restore:
          enabled: true
          snapshotTimestamp: TIMESTAMP
          serviceAccountPath: PATH_TO_GSA_FILE
          cloudProvider: "CSI"
    2. apigee-datastore 图表运行 Helm 升级命令:

      helm upgrade datastore apigee-datastore/ \
        --namespace apigee \
        --atomic \
        -f overrides.yaml
      

如需详细了解 Cassandra 备份和恢复,请参阅 Cassandra 备份概览

多区域扩展

使用 Helm 图表的多区域设置需要与当前 apigeectl 过程相同的前提条件。如需了解详情,请参阅多区域部署的前提条件

为多区域配置 Hybrid 的过程与现有过程中一直到配置多区域种子主机以及设置 Kubernetes 集群和上下文的过程相同。

配置第一个区域

按照以下步骤配置第一个区域,并准备配置第二个区域:

  1. 按照为多区域配置 Apigee Hybrid 中的步骤在平台上配置多区域种子主机。
  2. 对于创建的第一个区域,获取 apigee 命名空间中的 Pod:

    kubectl get pods -o wide -n apigee
    
  3. 确定此区域中 Cassandra 的多区域种子主机地址,例如 10.0.0.11
  4. 为第二个区域准备 overrides.yaml 文件,并添加种子主机 IP 地址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      clusterName: CLUSTER_NAME
      hostNetwork: false

    请替换以下内容:

    • SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如 10.0.0.11
    • DATACENTER_NAME 替换为数据中心名称,例如 dc-2
    • RACK_NAME 替换为机架名称,例如 ra-1
    • CLUSTER_NAME 替换为您的 Apigee 集群的名称。默认情况下,值为 apigeecluster。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。此值在所有区域必须相同。

配置第二个区域

如需设置新区域,请执行以下操作:

  1. 在区域 2 中安装 cert-manager

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
    
  2. 为您的服务账号创建 Kubernetes Secret。
  3. 为您的入站流量证书创建 Kubernetes Secret。
  4. 将证书从现有集群复制到新集群。 Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
    1. 将上下文设置为原始命名空间:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 将当前命名空间配置导出到文件:

      kubectl get namespace apigee -o yaml > apigee-namespace.yaml
      
    3. apigee-ca Secret 导出到文件:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 将上下文设置为新区域的集群名称:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:

      kubectl apply -f apigee-namespace.yaml
      
    6. 将密钥导入新集群:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  5. 现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):

    helm upgrade operator apigee-operator \
      --install \
      --create-namespace \
      --namespace apigee-system \
      --atomic
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace apigee \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade apigee-env-ENV_NAME apigee-env/ \
      --install \
      --namespace apigee \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace apigee \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  6. 安装所有组件后,在新数据中心的所有 Pod 上设置 Cassandra。如需查看相关说明,请参阅为多区域配置 Apigee Hybrid,选择您的平台,滚动到设置新区域,然后找到第 5 步:
  7. 数据复制完成且通过验证后,更新种子主机:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新应用更改以更新 apigee 数据存储区 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace apigee \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      

以私密方式托管映像

您可以选择以私密方式托管映像,而不是依赖于公共 Google Cloud 存储库。您可以在替换文件中添加 Hub 详细信息,而不是替换每个组件:

hub: PRIVATE_REPO

例如,如果提供以下 Hub,它会自动解析映像路径:

hub: private-docker-host.com

解析为:

## an example of internal component vs 3rd party
containers:
- name: apigee-udca
  image: private-docker-host.com/apigee-udca:1.10.4
  imagePullPolicy: IfNotPresent

containers:
- name: apigee-ingressgateway
  image: private-docker-host.com/apigee-asm-ingress:1.17.2-asm.8-distroless
  imagePullPolicy: IfNotPresent

在命令行中显示托管在 Google Cloud 存储库中的 Apigee 映像列表:

./apigee-operator/etc/tools/apigee-pull-push.sh --list

容忍

如需使用 Kubernetes 的污点和容忍功能,您必须为每个 Apigee Hybrid 组件定义 tolerations 替换属性。 以下组件支持定义容忍:

  • ao
  • apigeeIngressGateway
  • cassandra
  • cassandraSchemaSetup
  • cassandraSchemaValidation
  • cassandraUserSetup
  • connectAgent
  • istiod
  • logger
  • mart
  • metrics
  • mintTaskScheduler
  • redis
  • runtime
  • synchronizer
  • udca
  • Watcher

如需详细了解这些组件,请参阅配置属性参考文档

例如,将容忍应用于 Apigee operator 部署:

ao:
  tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
    tolerationSeconds: 3600

将容忍应用于 Cassandra StatefulSet:

cassandra:
  tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
    tolerationSeconds: 3600