您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
這個主題沒有對應的
Apigee Edge 說明文件。
本文說明如何重設處於 creating 或 releasing 狀態的 Apigee Hybrid 元件。
執行下列指令,列出 Apigee Hybrid 安裝作業的主要元件:
kubectl get crd | grep apigee
apigeeorganization (apigeeorganizations.apigee.cloud.google.com) apigeeenvironment (apigeeenvironments.apigee.cloud.google.com) apigeedatastore (apigeedatastores.apigee.cloud.google.com) apigeetelemetries (apigeetelemetries.apigee.cloud.google.com) apigeeredis (apigeeredis.apigee.cloud.google.com)
執行下列指令,顯示目前狀態:
kubectl get apigeedatastore -n NAMESPACE
正常運作時,每個元件都會處於 running 狀態。
例如:
NAME STATE AGE default running 5d6h
如果安裝失敗,元件可能會停留在 creating (或 releasing) 狀態。例如:
NAME STATE AGE default creating 5d6h
識別問題
如要找出問題原因,請先說明每個元件。元件結構如下:
每個 ApigeeOrganization 自訂資源都由下列階層表示:
ApigeeOrganization/HASHED_VALUE ├─ApigeeDeployment/apigee-connect-agent-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-connect-agent-HASHED_VALUE│ ├─ReplicaSet/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-connect-agent-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-mart-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-mart-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-mart-HASHED_VALUE│ ├─ReplicaSet/apigee-mart-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-mart-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-watcher-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-watcher-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-watcher-HASHED_VALUE│ ├─ReplicaSet/apigee-watcher-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-watcher-HASHED_VALUE-VER-xxxx
每個 ApigeeEnvironment 自訂資源都由下列階層表示:
ApigeeEnvironment/HASHED_VALUE ├─ApigeeDeployment/apigee-runtime-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-runtime-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-runtime-HASHED_VALUE│ ├─ReplicaSet/apigee-runtime-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-runtime-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-synchronizer-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-synchronizer-HASHED_VALUE│ ├─ReplicaSet/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-synchronizer-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-udca-HASHED_VALUE│ ├─HorizontalPodAutoscaler/apigee-udca-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-udca-HASHED_VALUE│ ├─ReplicaSet/apigee-udca-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-udca-HASHED_VALUE-VER-xxxx
請先描述根元件,開始找出問題。例如:
kubectl describe apigeeorganization -n NAMESPACE COMPONENT_NAME
檢查元件的 State 是否為 running:
Replicas:
Available: 1
Ready: 1
Total: 1
Updated: 1
State: running
State: running
Events: <none>
如果這個層級沒有記錄任何事件,請重複執行程序,但這次要使用 apigeedeployments,然後是 ReplicaSet。例如:
kubectl get apigeedeployment -n NAMESPACE AD_NAME>
如果 apigeedeployments 和 ReplicaSet 沒有顯示任何錯誤,請著重處理尚未準備就緒的 Pod:
kubectl get pods -n NAMESPACE
NAME READY STATUS apigee-cassandra-default-0 1/1 Running apigee-connect-agent-apigee-b56a362-150rc2-42gax-dbrrn 1/1 Running apigee-logger-apigee-telemetry-s48kb 1/1 Running apigee-mart-apigee-b56a362-150rc2-bcizm-7jv6w0/2 Running apigee-runtime-apigee-test-0d59273-150rc2-a5mov-dfb290/1 Running
在本範例中,mart 和 runtime 尚未準備就緒。檢查 Pod 記錄,找出錯誤:
kubectl logs -n NAMESPACE POD_NAME
刪除元件
如果這些元件有任何錯誤,請刪除元件並使用 Helm 重新建立環境:
kubectl delete -n apigee apigeeenv HASHED_ENV_NAME
接著建立環境 (進行必要的修正後):
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE \ --dry-run=server
請務必加入顯示的所有設定,包括 --atomic
,以便在動作失敗時回溯。
安裝圖表:
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE
檢查遙控器
如果 Pod 中沒有明顯的錯誤訊息,但元件尚未轉換為 running 狀態,請檢查 apigee-controller 中的錯誤訊息。
kubectl logs -n NAMESPACE $(k get pods -n NAMESPACE | sed -n '2p' | awk '{print $1}') | grep -i error
使用者可以藉此瞭解控制器無法處理要求 (create/delete/update 等) 的原因。
Apigee 資料存放區
Apache Cassandra 是以 StatefulSet 實作,每個 Cassandra 執行個體都包含:
ApigeeDatastore/default├─Certificate/apigee-cassandra-default │ └─CertificateRequest/apigee-cassandra-default-wnd7s ├─Secret/config-cassandra-default ├─Service/apigee-cassandra-default │ ├─EndpointSlice/apigee-cassandra-default-7m9kx │ └─EndpointSlice/apigee-cassandra-default-gzqpr└─StatefulSet/apigee-cassandra-default├─ControllerRevision/apigee-cassandra-default-6976b77bd ├─ControllerRevision/apigee-cassandra-default-7fc76588cb└─Pod/apigee-cassandra-default-0
這個範例顯示一個 Pod,但一般來說,實際工作環境安裝作業會包含三個以上的 Pod。
如果 Cassandra 的狀態為 creating 或 releasing,則必須重設狀態。某些問題 (例如 Cassandra 密碼變更) 和與網路無關的問題可能需要刪除元件。在這種情況下,您很可能無法刪除執行個體 (也就是說,kubectl delete apigeedatastore -n NAMESPACE default)。使用 --force 或 --grace-period=0 也沒有幫助。
reset 的目標是將元件 (apigeedatastore) 的狀態從 creating 或 releasing 變更回 running。以這種方式變更狀態通常無法解決根本問題。在大多數情況下,重設後應該會刪除該元件。
嘗試刪除 (這不會成功):
kubectl delete -n NAMESPACE apigeedatastore default
這個指令通常不會完成。使用 Ctrl+C 終止呼叫。
重設狀態:
在視窗 1 中:
kubectl proxy
在視窗 2 中:
curl -X PATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'移除終結器 (視窗 2):
kubectl edit -n NAMESPACE apigeedatastore default
找出並刪除下列兩行:
finalizers: - apigeedatastore.apigee.cloud.google.com
常見錯誤情境
執行階段不支援 Proxy 設定
這項錯誤可能以兩種方式呈現:
runtime未處於ready狀態。runtime尚未收到最新版 API。
從
synchronizerPod 開始。檢查記錄中的
synchronizer。常見錯誤如下:- 無法連上網路 (連線至
*.googleapi.com) - IAM 存取權不正確 (服務帳戶無法使用或未由 Synchronizer Manager 權限提供)
- 未叫用 setSyncAuthorization API
- 無法連上網路 (連線至
檢查
runtimePod。檢查
runtimePod 的記錄,即可瞭解runtime未載入設定的原因。控制層會嘗試防止大多數設定錯誤進入資料層。如果無法驗證或未正確導入驗證,runtime就無法載入。
控制層中「沒有執行階段 Pod」
從
synchronizerPod 開始。檢查記錄中的
synchronizer。常見錯誤如下:- 無法連上網路 (連線至
*.googleapi.com) - IAM 存取權不正確 (服務帳戶無法使用或未由 Synchronizer Manager 權限提供)
- 未叫用 setSyncAuthorization API。或許設定從未傳送至資料層。
- 無法連上網路 (連線至
檢查
runtimePod。檢查
runtimePod 的記錄,即可瞭解runtime未載入設定的原因。檢查
watcherPod。這個
watcher元件會設定 Ingress (路由),並向控制層回報 Proxy 和 Ingress 的部署狀態。檢查這些記錄檔,找出watcher未回報狀態的原因。常見原因包括overrides.yaml檔案中的名稱與環境名稱和/或環境群組名稱的控制層不符。
控制層未顯示偵錯工作階段
從
synchronizerPod 開始。檢查記錄中的
synchronizer。常見錯誤如下:- 無法連上網路 (連線至
*.googleapi.com) - IAM 存取權不正確 (服務帳戶無法使用或未由 Synchronizer Manager 權限提供)
- 未叫用 setSyncAuthorization API。
- 無法連上網路 (連線至
- 檢查
runtimePod。
檢查 Pod 的記錄,即可瞭解runtime為何未將偵錯記錄傳送至 UDCA。runtime - 檢查 UDCA Pod。
檢查 UDCA 的記錄,即可瞭解 UDCA 無法將偵錯工作階段資訊傳送至控制層的原因。
Cassandra 傳回大型快取回應
下列警告訊息表示 Cassandra 接收的讀取或寫入要求含有較大的酬載,可以放心忽略,因為這個警告門檻設為較低的值,用來指出回應酬載大小。
Batch for [cache_ahg_gap_prod_hybrid.cache_map_keys_descriptor, cache_ahg_gap_prod_hybrid.cache_map_entry] is of size 79.465KiB, exceeding specified threshold of 50.000KiB by 29.465KiB