リソース管理

一般的なKubernetesクラスターでは、ポッドは無制限のリソースで実行されます。デフォルトでは、必要なだけのCPUとRAMの使用が許可される場合があります。

CloudNativePGを使用すると、管理者は、マニフェストのresources セクションを使用して、2つのノブを使用して、クラスターのポッドによるリソース使用量を制御および管理できます。

  • requests :初期要件

  • limits :最大使用量、リソースニーズが動的に増加する場合

たとえば、次のように32MiB(128MiBにスケーラブル)のRAMの初期量と50mのCPU(100mにスケーラブル)を要求できます。

resources:
  requests:
    memory: "32Mi"
    cpu: "50m"
  limits:
    memory: "128Mi"
    cpu: "100m"

メモリの要求と制限はコンテナに関連付けられていますが、ポッドにはメモリの要求と制限があると考えると便利です。ポッドのメモリ要求は、ポッド内のすべてのコンテナに対するメモリ要求の合計です。

ポッドのスケジューリングは、制限ではなくリクエストに基づいています。ポッドは、ポッドのメモリ要求を満たすのに十分な使用可能なメモリがノードにある場合にのみ、ノードで実行されるようにスケジュールされます。

リソースごとに、コンテナを優先度の高い順に3つのサービス品質(QoS)クラスに分割します。

  • 保証

  • 壊れやすい

  • ベストエフォート

詳細については、 Configure Quality of Service for Pods を参照してください

Kubernetesドキュメントのセクション。

PostgreSQLワークロードの場合、「保証」QoSを設定することをお勧めします。

Kubernetesのリソース関連の問題を回避するには、クラスター作成時の「リソース不足」処理のベストプラクティスを参照できます。

  • マニフェストファイルのresourcesセクションで、メモリとCPUに必要な値を指定します。このようにして、 OOM Killed (「OOM」はOut Of Memoryを表します)およびCPU throttle 、または実行中のインスタンスでのその他のリソース関連の問題を回避できます。

  • クラスターのポッドが「保証」QoSクラスに割り当てられるには、メモリとCPUの両方の制限と要求を同じ値に設定する必要があります。

  • ポッドリソースと一貫して、必要なPostgreSQLメモリパラメーターを指定します(VMまたは物理マシンのシナリオで行うように-以下を参照)。

  • nodeSelectorを使用して、専用ノードにデータベースサーバーポッドをセットアップします。 APIリファレンスページで “affinityconfiguration" リソースの「nodeSelector」および「tolerations」フィールドを参照してください。

次のマニフェストの例を参照できます。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgresql-resources
spec:

  instances: 3

  postgresql:
    parameters:
      shared_buffers: "256MB"

  resources:
    requests:
      memory: "1024Mi"
      cpu: 1
    limits:
      memory: "1024Mi"
      cpu: 1

  storage:
    size: 1Gi

上記の例では、 256MB の値でshared_buffers パラメーターを指定しました-つまり、データをキャッシュするためにPostgreSQLサーバー専用に割り当てられるメモリの量(このパラメーターのデフォルト値は、定義されていない場合、 128MB です)。

shared_buffers の妥当な開始値は、システムのメモリーの25%です。例えば: shared_buffers が256 MBの場合、コンテナのメモリサイズの推奨値は1 GBです。これは、ポッド内のすべてのコンテナに、Kubernetesが常に保持する合計1 GBのメモリがあることを意味し、コンテナが期待どおりに動作します。詳細については、

Resource Consumption を参照してください

PostgreSQLドキュメントのセクション。

Kubernetesドキュメントのページ。