使用保护措施诊断问题

保护措施概览

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"