API サーバーのリクエスト時間制限の確認

通常の処理時間とリソース保護の要件に合わせて API サーバーの時間制限を設定してください。

説明

--request-timeout が長すぎると、kube-apiserver は遅いリクエストを長時間維持します。異常なリクエストや長い処理が、API サーバーのリソースを不要に占有する場合があります。

適切なタイムアウトは障害の拡大を抑え、リソース保護に役立ちます。現在のデフォルトは 1 分ですが、watch など一部のリクエストには別の制限が適用される場合があります。正常な処理を不要に中断しない値を選んでください。

想定される影響

  • 長いリクエストが API サーバーの接続やリソースを占有し続ける場合があります。
  • 異常な通信や過負荷からの回復が遅れるおそれがあります。
  • 短すぎる制限は正常な処理を中断する場合があります。

対処方法

  • 実際の処理時間と運用要件に合わせて --request-timeout を設定してください。
  • watch など別の制限があるリクエストと通常のリクエストを区別して確認してください。
  • 負荷とタイムアウトエラーを監視し、正常なリクエストが完了することをテストしてください。

例

従来の v1.6.0 イメージを残した、コマンド引数比較用の抜粋です。このバージョンのデプロイを推奨するものではありません。対応するバージョンと実際の制御プレーン設定に適用し、必要な証明書や接続設定を別途用意してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args: ["--request-timeout=6m"]

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args: ["--request-timeout=300s"]

補足:

  • 変更前: 通常のリクエストのデフォルト制限を 6 分に設定します。この長さが実際に必要か確認してください。
  • 変更後: 300 秒、つまり 5 分に短縮します。例示の値であり、現在のデフォルトの 1 分より長いため、すべての環境への推奨値ではありません。

参考資料