保护措施概览
Apigee Hybrid 保护措施是一种机制,可在潜在问题影响 Hybrid 实例之前提醒客户。换句话说,如果该命令存在 Hybrid 实例的稳定性风险,则 Hybrid 保护措施将停止其轨道中的命令。无论是配置错误还是资源不足,Hybrid 保护措施都会阻止对 Hybrid 实例进行任何修改,直到问题风险消除为止。这样一来,客户就不必花时间来解决通常需要数小时或数天才能解决的问题。
将保护措施与 Apigee Hybrid 搭配使用
如需使用 Hybrid 保护措施,请执行 Hybrid 安装说明中记录的 Hybrid Helm 安装或 Hybrid Helm 升级命令。您无需任何其他命令即可运行保护措施。
如果您针对 Apigee Hybrid 发出 Helm 命令,那么在该 Helm 命令将配置应用于您的 Hybrid 实例之前,会发生以下两种情况:
- Helm 会使用您应用的配置创建临时保护措施 Pod。如果保护措施 Pod 启动到正常运行状态,则 Pod 将根据您应用的配置测试 Hybrid 实例。如果测试通过,则保护措施 pod 会终止,然后您的配置会应用于 Apigee Hybrid 实例。
- 如果测试失败,则保护措施 pod 将保持运行状况不佳的状态,以便对 pod 进行诊断。helm 命令将显示一条错误消息,报告保护措施 pod 失败了。
以下示例展示了在安装 apigee-datastore 组件的过程中,使用保护措施测试从 Hybrid 实例到 Apigee 控制平面的网络连接。您可以对所有 Apigee Hybrid 组件使用相同的序列:
使用以下命令安装 apigee-datastore 组件:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides.yaml
如果存在即时错误,Helm 命令还会显示一条错误消息,其中显示了保护措施检查失败,如以下示例所示:
helm upgrade datastore apigee-datastore/ \
--install \
--namespace apigee \
-f my-overrides.yaml
. . .
Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
* pod apigee-hybrid-helm-guardrail-datastore failed如需查看哪项检查失败以及原因,请查看保护措施 Pod 日志,如以下示例所示:
kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}在此示例中,实际的测试失败消息是此部分:
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}发出 helm 命令时,系统会自动预配保护措施 pod。如果 Apigee 控制平面连接性测试通过,则保护措施 Pod 会在执行结束时终止。
在发出 helm install 命令后,快速检查 Pod 的状态。以下示例输出显示保护措施 Pod 处于正常状态,即控制平面连接性测试已通过:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 2s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3s如果 Apigee 控制平面连接性测试失败,保护措施 Pod 将保持“错误”状态,类似于以下示例输出:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 4s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 5s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 6s暂时停用保护措施
如果您需要停用保护措施检查,请在 Helm 命令中添加 --no-hooks 标志。以下示例展示了 Helm 命令中的 --no-hooks 标志:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ -f overrides.yaml \ --no-hooks
在替换文件中配置保护措施
从 Apigee Hybrid 1.12 版开始,每个图表中都默认配置了保护措施。您可以在 overrides 文件中替换映像网址、标记和映像拉取政策。
例如,以下保护措施映像网址、标记和拉取政策会添加到替换文件中:
# Apigee Ingressgateway
ingressGateway:
image:
pullPolicy: Always
## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "12345_6789abcde"
pullPolicy: Always
将 Kubernetes 容忍与保护措施搭配使用
您还可以在 overrides 文件中的保护措施中添加容忍。如果未在保护措施 overrides 配置下定义任何容忍,保护措施将使用任何全局定义的容忍。
例如,如需专门在 overrides 文件的“保护措施”部分中添加容忍设置,请添加类似于以下节的内容:
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "12345_6789abcde"
pullPolicy: Always
tolerations:
- key: "say"
operator: "Equal"
value: "taunt"
effect: "NoSchedule"
排查保护措施问题
环境变量检查点缺失或为空
如果您在 apigee-operator guradrails Pod 日志中看到 Client.Timeout exceeded 错误,可以按照以下问题排查步骤确定问题根源。
- 创建包含以下内容的新 YAML 文件。您可以随意命名 YAML 文件。
- 使用以下命令应用新 YAML 文件:
- 使用
kubectl exec命令将命令输入传递给 Pod: - 在
apigee-simple-clientPod 中运行以下命令,并检查输出:
apiVersion: v1
kind: Pod
metadata:
labels:
name: apigee-simple-client
spec:
containers:
- name: apigee-simple-client
image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.10.1"
imagePullPolicy: Always
command:
- sleep
- "3650d"
restartPolicy: Never
hostNetwork: false
kubectl apply -n apigee-system -f NEW_YAML_FILE
kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
curl -v -I --proxy http://cspnaproxy1.wlb2.nam.nsroot.net:8882 https://apigee.googleapis.com
如果 curl 命令成功连接到 HTTP 代理并到达 apigee.googleapis.com,则 curl 命令应返回 HTTP 响应代码。如果 curl 命令无法到达代理或无法通过代理连接到 apigee.googleapis.com,则 curl 命令应显示错误。