ガードレイルに関する問題の診断

ガードレールの概要

Apigee ハイブリッド ガードレイルは、ハイブリッド インスタンスに影響する可能性がある問題を事前に検出し、お客様に警告するメカニズムです。つまり、ハイブリッド ガードレイルは、ハイブリッド インスタンスの安定性に影響するコマンドを停止します。構成が正しくない場合やリソースが不足している場合、問題のリスクが解消されるまで、ハイブリッド ガードレイルはハイブリッド インスタンスの変更を防止します。これにより、通常は解決に数時間または数日かかる問題にお客様が時間を費やす必要がなくなります。

Apigee ハイブリッドでのガードレールの使用

ハイブリッド ガードレイルを使用するには、ハイブリッドのインストール手順に記載されている Hybrid Helm のインストール コマンドまたは Hybrid Helm のアップグレード コマンドと同じコマンドを実行します。ガードレイルを実行するために追加のコマンドは必要ありません。

Apigee ハイブリッドに対して Helm コマンドを実行すると、Helm コマンドがハイブリッド インスタンスに構成を適用する前に、次の 2 つの処理が行われます。

  • Helm は、適用された構成で一時的なガードレイル Pod を作成します。ガードレイル Pod が正常な状態にスピンアップすると、Pod は適用された構成に対してハイブリッド インスタンスをテストします。テストに合格すると、ガードレイル Pod が終了し、構成が Apigee ハイブリッド インスタンスに適用されます。
  • テストが失敗した場合、ガードレイル Pod は正常でない状態のままになり、Pod の診断が可能になります。helm コマンドには、ガードレイル Pod の失敗を報告するエラー メッセージが表示されます。

次の例は、apigee-datastore コンポーネントのインストールの一環として、ガードレイルを使用してハイブリッド インスタンスから Apigee コントロール プレーンへのネットワーク接続をテストする方法を示しています。すべての Apigee ハイブリッド コンポーネントに同じシーケンスを使用できます。

次のコマンドを使用して、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 ハイブリッド バージョン 1.12 以降では、各グラフでデフォルトでガードレールが構成されます。overrides ファイルで、イメージ URLタグイメージの pull ポリシーをオーバーライドできます。

たとえば、次のガードレール イメージの URL、タグ、pull ポリシーがオーバーライド ファイルに追加されます。

# 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

Guardrails での Kubernetes toleration の使用

overrides ファイルでの Guardrails に toleration を追加することもできます。Guardrails の overrides 構成で toleration が定義されていない場合、Guardrails はグローバルに定義された toleration を使用します。

たとえば、overrides ファイルの Guardrails セクションに toleration を追加するには、次のスタンザに似たものを追加します。

  # 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"