保护措施概览
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 ../my-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"