コンテンツにスキップ

krr

はじめに

本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。


01. krr の仕組み

アーキテクチャ

Prometheus のメトリクスから各コンテナに最適な CPU/メモリの設定値を算出できる。

kkr を含めたさまざまなメトリクスを監視する場合、開発元が同じ robusta を使用する。


設計思想

krr では、CPU の .spec.containers[*].resources.limits キー値の設定はアンチパターンとして扱っている。

そのため、未設定を推奨している。

理由として、CPU を制限してしまうと、コンテナがどんな状況であってもコンテナに CPU を割り当てない。

これにより、コンテナがハードウェアリソース不足を起こす可能性が高くなるためである。

# Podのspec.containers内の設定例(数値は例示)
resources:
  requests:
    cpu: "100m"
    memory: "128Mi"
  limits:
    # CPUの上限を設定せず、メモリの上限だけを設定する
    memory: "128Mi"


アルゴリズム

CPU は、99%の CPU 処理が余裕を持てるように数値を算出する。

メモリは、過去一週間の最大値に 5%のバッファーを加えて、数値を算出する。


02. CLI

simple

シンプル戦略に基づいて、最適な CPU/メモリの設定値を算出する。

$ krr simple

┏━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃ Number ┃ Namespace   ┃ Name                                           ┃ Pods ┃ Old Pods ┃ Type        ┃ Container               ┃ CPU Diff ┃ CPU Requests            ┃ CPU Limits           ┃ Memory Diff ┃ Memory Requests           ┃ Memory Limits        ┃
┡━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│     1. │ foo         │ foo-pod                                        │ 0    │ 1        │ Job         │ foo                      │          │ 500m -> ? (No data)     │ unset -> ? (No data) │             │ 256Mi -> ? (No data)      │ unset -> ? (No data) │
├────────┼─────────────┼────────────────────────────────────────────────┼──────┼──────────┼─────────────┼─────────────────────────┼──────────┼─────────────────────────┼──────────────────────┼─────────────┼───────────────────────────┼──────────────────────┤
│     2. │ bar         │ bar-pod                                        │ 1    │ 0        │ Deployment  │ bar                     │ +10m     │ (+10m) unset -> 10m     │ unset                │ +100Mi      │ (+100Mi) unset -> 100Mi   │ unset -> 100Mi       │
├────────┼─────────────┼────────────────────────────────────────────────┼──────┼──────────┼─────────────┼─────────────────────────┼──────────┼─────────────────────────┼──────────────────────┼─────────────┼───────────────────────────┼──────────────────────┤
│     3. │ baz         │ baz-pod                                        │ 2    │ 0        │ Deployment  │ baz-1                   │ +20m     │ (+10m) unset -> 10m     │ unset                │ +200Mi      │ (+100Mi) unset -> 100Mi   │ unset -> 100Mi       │
│     4. │             │                                                │      │          │             │ baz-2                    │ +20m     │ (+10m) unset -> 10m     │ unset                │ +200Mi      │ (+100Mi) unset -> 100Mi   │ unset -> 100Mi       │
│     5. │             │                                                │      │          │             │ baz-3                    │ +20m     │ (+10m) unset -> 10m     │ unset                │ +200Mi      │ (+100Mi) unset -> 100Mi   │ unset -> 100Mi       │
├────────┼─────────────┼────────────────────────────────────────────────┼──────┼──────────┼─────────────┼─────────────────────────┼──────────┼─────────────────────────┼──────────────────────┼─────────────┼───────────────────────────┼──────────────────────┤
...