リソースプランナーと自動スケーリング
簡単な要約
安定したスケーリングは4つのサポートでサポートされています:1.リクエスト/制限とQoSクラスを修正します。
2.正しいスタッキング(トポロジー、親和性、優先順位、優先順位)。
3.マルチレベル自動スケーリング:HPA/VPA/KEDA+クラスタ/ノード自動スケーラー+ウォームプール。
4.アンチフラッピングと予算を備えたSLO指向のロジック(レイテンシ/キュー深さ)。
基本リソースモデル
リクエスト/制限とQoSクラス
リクエスト=スケジューラの保証;制限=ランタイムの天井。
QoS:保証(CPU/メモリによるreq=lim)、 Burstable(部分的に)、BestEffort(何も)。
堅いSLOを用いる生産サービス-保証される/破烈;background-Burstable/BestEffort。
CPU/メモリ/IO/ネットワーク
CPU-弾性(時間共有)、メモリ-ハード(超過するとOOMキル)。
IO/ネットワークでは、limits/priorities (cgroups/TC)を個別に設定し、それ以外の場合は"noisy neighbors'を設定します。
GPU/アクセラレータ
ベクトル(GPU=1、プロファイル経由のVRAM)を尋ね、批判にはnodeSelector/tainsとPodPriorityを使用します。
推論のため-バッチサイズとモデル加熱。
スケジューリングポリシー
優先順位、優先順位、PDB
クリティカルパス(支払い、ログイン)のPriorityClassは、プリエンプションが許可されます。
PodDisruptionBudgetは、避難/更新時に最小限の手掛かりを保護します。
アフィニティ/トポロジー
コロケーション/デコロケーションのためのnode/podアフィニティ(たとえば、レプリカを1つのホストに置かない)。
topologySpreadConstraints は/AZゾーンにハースを整列します。
NUMA/topology:低遅延が重要なピンCPU/hugepages。
Teyinthsおよび許容
別のプール:'prod'、 'batch'、 'gpu'、 'system'。批判は隣人の数を減らします。
自動スケーリング: レベルと信号
1) HPA(水平ポッドオートスケーラー)
メトリクス別にポッドのレプリカをスケール:CPU/メモリ/カスタム (Prometheus Adapter)。
良好な信号:レイテンシp95/p99、キュー長/遅延、ポッドあたりのRPS、コンシューマラグ。
アンチフラッピング:安定化(stabilizationWindow)、最小ステップ、クールダウン。
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: api }
minReplicas: 6 maxReplicas: 120 behavior:
scaleUp:
stabilizationWindowSeconds: 60 policies: [{ type: Percent, value: 100, periodSeconds: 60 }]
scaleDown:
stabilizationWindowSeconds: 300 policies: [{ type: Percent, value: 20, periodSeconds: 60 }]
metrics:
- type: Pods pods:
metric:
name: http_server_request_duration_seconds_p95 target:
type: AverageValue averageValue: "0.25" # 250ms
2) VPA(垂直ポッドオートスケーラー)
実際の消費のための要求/制限を調整します(推奨事項を更新します)。
モード:'Off'、 'Auto'(再起動)、'Initial'(開始時のみ)。
練習:on 'Off'→collect statistics→apply to releases。
3) KEDA/キューベーススケーリング
外部信号に反応する:Kafka lag、 SQS depth、 Redis length、 Prometheus。
イベント/キュー消費者(EDA)に最適です。
yaml apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: { name: consumer-scale }
spec:
scaleTargetRef: { name: txn-consumer }
minReplicaCount: 2 maxReplicaCount: 200 cooldownPeriod: 120 pollingInterval: 5 triggers:
- type: kafka metadata:
bootstrapServers: broker:9092 consumerGroup: tx-cg topic: payments lagThreshold: "10000"
4)クラスタ/ノードオートスケーラー(CA)+ウォームプール
CAは欠陥/過剰のノードを追加/削除します。
暖かいプール:予熱されたノード/準備されたイメージ(コールドスタートのスピードアップ)。
ピークの場合-事前にステップスケーリングと拡大minNodes。
反応速度と温暖化
SLO反応遅延:フロントレイヤー≤ 1〜2分、バックエンド/DB-個別に事前に。
ウォームアップ:TLS/DNS/接続、ロードモデル、キャッシュのウォームアップおよびJIT。
イベントへのコールドパスを「ポンピング」するためのシャドウロード。
アンチフラッピングと安定性
メトリックのヒステリシス、平滑化(exp。 medium)。
HPAの安定化ウィンドウ、'scaleDown'の大きい。
「saw」の代わりにステップスケーリング。レプリカを変更するためのrate-limit。
予算スケーリング:毎分追加されるトラフィック/レプリカの%を制限します。
観測可能性とSLO
主なSLI:- p95/99レイテンシ、エラーレート、スループット、キュー深度/遅延、CPU/メモリ飽和、ポッド保留時間、ノード圧力。
- 成長保留中のポッド、予定外のイベント、IP/サブネット不足、画像プルロング、立ち退き。
- トレイル:p99テールのテールベースのサンプリング→スケーリング時にボトルネックが表示されます。
FinOps: 弾性コスト
メトリクス:$/1000 RPS、 $/ms p95、 $/hour reserve。
ミックス:オンデマンド+予約+スポット(非評価用)。
自動スケールのしきい値は、エラーのコストに関連しています。時々、暖かい在庫を保つことは有益です。
iGaming/Fintechの特異性
マッチ/トーナメントピーク:事前に'minReplicas'とminNodesを上げ、ウォームプールをオンにしてキャッシュ/モデルをウォームアップします。
支払の消費者:lag+idempotencyによるKEDA、劣化の外部トリガーとしてのプロバイダ制限(PSP)。
Antibot:別のプール、ルールのクイックスケール、「グレー」ルート。
規制:コンプライアンスサービスのPDBは、バッチよりも優先度が高くなります。
チェックシート
デザイン・デザイン
- データのプロファイリングによって指定された要求/制限;QoSを選択しました。
- PriorityClass、 PDB、 tains/tolerationsおよびtopologySpread-設定。
- CPUだけでなくSLOメトリックによるHPA。
- 推奨事項を収集するためのVPAから'Off' ('Auto'への移行が計画されています)。
- KEDA/イベントロードキュー。
- CA+暖かいプール、イメージはキャッシュされます(イメージの前引き)。
Operation(オペレーション)
- 安定化ウィンドウとクールダウンが設定されています(フラップは除く)。
- 保留中/予定外、遅延、p95、エラー率へのアラート。
- Runbooks: 「no nodes」、 「image does not stretch」、 「OOM/evict'、」 retray storm'。
- 容量レビュー毎月:スケールvs計画/コストの事実。
よくある間違い
HPAはCPU→IO/データベース限界のlat-regressionのみで動作します。
PDBと優先順位の欠如→批判が最初になります。
緊張のない同じプールでの批判とバッチの混合→「騒々しい隣人」。
ゼロ加熱→ピーク時に寒さが始まります。
積極的な'scaleDown'→のこぎりとスラッシュコンテナ。
KEDAは、偶像性のない→嵐の中でメッセージを複製します。
ミニプレイブック
1)ピークイベント前(T-30分)
1.'minReplicas '/minNodesを増やし、ウォームプールをアクティブにします。
2.CDN/DNS/TLS/接続をウォームアップし、モデルをロードします。
3.ボットの灰色のルート/制限を含める。
4.チェックダッシュボード:保留中/遅延/p95。
2)ノード不足(予定外)
1.CA、クラウドクォータ、サブネット/IPを確認します。
2.一時的にバッチ制限を低減し、優先順位を低くするためのプリエンプションを有効にします。
3.一時的に大きなインスタンスタイプまたはセカンドプールを上げます。
3)キューの遅れの成長
1.KEDA:トリガーによるスケールアップ。2)消費者の限界を高める。
2.idempotency-keysとbackpressureプロデューサーを有効にします。
4)レプリカを見ました
1.安定/冷却を高めて下さい;2)ステップスケーリングへのスイッチ;
2.指数平均でメトリックを滑らかにします。
コンフィグベビーベッド
VPA(推奨事項のコレクション):yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: { name: api-vpa }
spec:
targetRef: { apiVersion: "apps/v1", kind: Deployment, name: api }
updatePolicy: { updateMode: "Off" } # собираем рекомендации
クラスターオートスケーラー(フラグのアイデア、コンセプト):
--balance-similar-node-groups
--expander=least-waste
--max-empty-bulk-delete=10
--scale-down-utilization-threshold=0.5
--scale-down-delay-after-add=10m
トポロジースプレッド:
yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
[結果]
効率的なスケジューラと自動スケーリングは、正しい要求/制限+スマートスタッキング+マルチレベルスケーリング(HPA/VPA/KEDA/CA)+ウォームアップとアンチフラップ、SLOとミリ秒のコストに関連しています。IaCのポリシーを修正し、「正しい」メトリクス(レイテンシ/ラグ)で観察し、ピークの下で暖かいストックを保ちます。プラットフォームは弾力性があり、予測可能で経済的です。