使用 Helm 資訊套件安裝及管理 Apigee Hybrid

<0x0

本文將逐步說明如何使用 Helm Chart 安裝 Apigee Hybrid 1.10 版。

版本

Apigee Hybrid Helm 圖表適用於 Apigee Hybrid 1.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 Chart 不完全支援 CRD,因此我們會使用 kubectl -k 指令安裝及升級 CRD。我們致力於遵循社群和 Google 的 Kubernetes 管理最佳做法。透過 Helm 部署 CRD 尚未達到社群狀態,因此我們尚未看到廣泛支援或要求這類模型。因此,管理 Apigee CRD 時,應使用本文所述的 kubectl
  • apigeectl中,我們已在整個服務帳戶和憑證中使用檔案;不過,Helm 不支援參照資訊套件目錄外的檔案。apigeectloverrides.yaml請為服務帳戶和憑證檔案選擇下列其中一個選項:
    • 將相關檔案的副本放入每個圖表目錄
    • 在每個圖表目錄中,為每個檔案或資料夾建立符號連結。Helm 會追蹤圖表目錄外的符號連結,但會輸出類似以下的警告:
      apigee-operator/gsa -> ../gsa
    • 使用 Kubernetes 密鑰。舉例來說,服務帳戶的權限可能如下:
      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
Env apigeeenvironments.apigee.cloud.google.com Apigee create delete patch update
Env secrets Kubernetes create delete patch update
Env serviceaccounts Kubernetes create delete patch update
Ingress 管理員 certificates.cert-manager.io Kubernetes create delete patch update
Ingress 管理員 configmaps Kubernetes create delete patch update
Ingress 管理員 deployments.apps Kubernetes create get delete patch update
Ingress 管理員 horizontalpodautoscalers.autoscaling Kubernetes create delete patch update
Ingress 管理員 issuers.cert-manager.io Kubernetes create delete patch update
Ingress 管理員 serviceaccounts Kubernetes create delete patch update
Ingress 管理員 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 create 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.5
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 等。

安裝順序:cert-manager,然後是 CRD,接著是 Apigee 運算子,然後是堆疊元件:redis、datastore、遙測、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. 建立 Apigee 運算子資源使用的 apigee-system 命名空間。
    1. 檢查命名空間是否已存在:

      kubectl get namespace apigee-system
    2. 如果命名空間不存在,請建立命名空間:

      kubectl create namespace apigee-system
  3. 建立服務帳戶,並指派適當的 IAM 角色。Apigee Hybrid 會使用下列服務帳戶:

    服務帳戶 IAM 角色
    apigee-cassandra Storage 物件管理員
    apigee-logger 記錄寫入者
    apigee-mart Apigee Connect 代理人
    apigee-metrics Monitoring 指標寫入者
    apigee-runtime 無須具備任何角色
    apigee-synchronizer Apigee 同步處理工具管理員
    apigee-udca Apigee 數據分析代理人
    apigee-watcher Apigee 執行階段代理人

    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

      如需詳細資訊,請參閱:

  4. 安裝前,請查看 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:設定混合式執行階段」。

  5. 啟用同步處理工具存取權。這是安裝 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 機構管理員 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:啟用同步處理工具存取權」。

  6. 使用下列指令安裝 Cert Manager:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
    
  7. 安裝 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
      
  8. 檢查叢集節點上的現有標籤。 根據預設,Apigee 會在標籤為 cloud.google.com/gke-nodepool=apigee-data 的節點上排定資料 Pod,並在標籤為 cloud.google.com/gke-nodepool=apigee-runtime 的節點上排定執行階段 Pod。您可以在 overrides.yaml 檔案中自訂節點集區標籤。

    詳情請參閱「 設定專屬節點集區」。

安裝 Apigee Hybrid Helm 資訊套件

  1. 安裝 Apigee Operator/Controller:

    helm upgrade operator apigee-operator/ \
      --install \
      --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.5   1.10.5

    檢查可用性,確認該服務是否正常運作:

    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 Ingress 管理工具:

    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 設定中,為執行階段 Ingress 閘道提供 TLS 憑證。
    1. 建立憑證。在實際工作環境中,您需要使用已簽署的憑證。您可以使用憑證和金鑰組,也可以使用 Kubernetes 密鑰。

      如要示範及測試安裝作業,執行階段閘道可以接受自行簽署的憑證。在下列範例中,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 密鑰來參照憑證:

      kubectl create secret generic NAME \
        --from-file="cert=PATH_TO_CRT_FILE" \
        --from-file="key=PATH_TO_KEY_FILE" \
        -n apigee
      
  9. 安裝虛擬主機。

    一次只能安裝一個環境群組 (虛擬主機)。使用 --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 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

    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

搭配 Apigee Hybrid 使用 Helm Chart 的其他用途

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 程序相同的先決條件。詳情請參閱多區域部署的 先決條件

設定多區域的混合式叢集程序,與現有程序相同,直到設定多區域種子主機,以及設定 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,例如 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. 將現有叢集的憑證複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。 因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace apigee -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      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
      
  3. 現在請使用 Helm Chart,透過下列 Helm Chart 指令在新區域中安裝 Apigee Hybrid (如區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --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
    
  4. 安裝所有元件後,請在新資料中心的所有 Pod 上設定 Cassandra。如需操作說明,請參閱「 為多個區域設定 Apigee Hybrid」,選取您的平台,捲動至「設定新區域」,然後找到步驟 5。
  5. 資料複製完成並通過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 移除 multiRegionSeedHost: 10.0.0.11

      建立資料複製作業後,就不再需要 multiRegionSeedHost 項目,且 Pod IP 預計會隨時間變更。

    2. 重新套用變更,更新 apigee datastore CR:

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

私下代管圖片

您可以選擇自行私下代管映像檔,不必依賴公開的 Google Cloud 存放區。您不必覆寫每個元件,而是可以在覆寫中新增中樞詳細資料:

hub: PRIVATE_REPO

舉例來說,如果提供下列中樞,系統會自動解析圖片路徑:

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.5
  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 的 Taints and Tolerations 功能,您必須為每個 Apigee Hybrid 元件定義 tolerations 覆寫屬性。下列元件支援定義容許度:

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

如要進一步瞭解這些元件,請參閱 設定屬性參考資料

舉例來說,如要將容許度套用至 Apigee 運算子部署作業,請執行下列步驟:

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

使用 Helm 解除安裝 Apigee Hybrid

如要解除安裝特定更新或版本,可以使用 helm [uninstall/delete] RELEASE-NAME -n NAMESPACE 指令。

請按照下列步驟,從叢集完整解除安裝 Apigee Hybrid:

  1. 刪除虛擬主機。針對每個虛擬主機執行下列指令:
    helm -n apigee delete VIRTUALHOST_RELEASE-NAME
    
  2. 刪除環境。針對每個環境執行下列指令:
    helm -n apigee delete ENV_RELEASE-NAME
    
  3. 刪除 Apigee 機構:
    helm -n apigee delete ORG_RELEASE-NAME
    
  4. delete telemetry:
    helm -n apigee delete TELEMETRY_RELEASE-NAME
    
  5. 刪除 Redis:
    helm -n apigee delete REDIS_RELEASE-NAME
    
  6. 刪除 Ingress 管理工具:
    helm -n apigee delete INGRESS_MANAGER_RELEASE-NAME
    
  7. 刪除資料儲存庫:
    helm -n apigee delete DATASTORE_RELEASE-NAME
    
  8. 刪除運算子。
    1. 請務必先刪除所有 CR,再執行下列操作:
      kubectl -n apigee get apigeeds, apigeetelemetry, apigeeorg, apigreeenv, arc, apigeeredis
      
    2. 刪除 Apigee Operator:
      helm -n apigee-system delete OPERATOR_RELEASE-NAME
      
  9. 刪除 Apigee Hybrid CRD:
    kubectl delete -k  apigee-operator/etc/crds/default/