資源管理

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

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

  • requests : 初期要件

  • limits : リソースのニーズが動的に増加した場合の最大使用量

たとえば、次のように 32MiB の RAM (128MiB まで拡張可能) と 50m の CPU (100m まで拡張可能) の初期量を要求できます。

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

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

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

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

  • 保証済み

  • バースト可能

  • 最大限の努力

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

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

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

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

  • マニフェスト ファイルのリソース セクションで、メモリと CPU に必要な値を指定します。このようにして、OOM Killed (「OOM」はメモリ不足を表します) や 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 ドキュメントのページ。