リソース管理
============
.. raw:: html
一般的なKubernetesクラスターでは、ポッドは無制限のリソースで実行されます。デフォルトでは、必要なだけCPUとRAMを使用できます。
CloudNativePGを使用すると、管理者は、マニフェストの\ ``resources``
セクションを介して、クラスターのポッドによるリソース使用を制御および管理できます。
- ``requests`` 初期要件
- ``limits`` 最大使用量、リソースニーズが動的に増加した場合
たとえば、次のように32MiB 128MiBまでスケーラブルなRAMの初期量と50mのCPU
100mまでスケーラブルを要求できます。
.. code:: yaml
resources:
requests:
memory: "32Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
メモリ要求と制限はコンテナに関連付けられますが、ポッドにメモリ要求と制限があると考えると便利です。ポッドのメモリ要求は、ポッド内のすべてのコンテナのメモリ要求の合計です。
ポッドのスケジューリングは、制限ではなく要求にもとづいています。ポッドのメモリ要求を満たすだけの十分な使用可能なメモリがノードにある場合にのみ、ポッドはノードで実行されるようにスケジュールされます。
リソースごとに、コンテナを優先度の高い順に3つのサービス品質QoSクラスに分割します。
- *保証*
- *バースト可能*
- *ベストエフォート*
詳細については、 `Configure Quality of Service for Pods `_ を参照してください。
Kubernetesドキュメントのセクション。
PostgreSQLワークロードの場合、「保証」QoSを設定することをお勧めします。
.. Note::
サービス品質が「保証」に設定されている場合、CloudNativePGは、 `PostgreSQL documentation `_ に従って、 `postmaster` プロセスの`PG_OOM_ADJUST_VALUE` を`0` に設定します。これにより、 `postmaster` は`-997` の低いアウトオブメモリOOMスコアを維持できますが、その子プロセスは`0` のOOMスコア調整で実行されます。その結果、OOMキラーがトリガーされると、`postmaster` より前に子プロセスを終了します。この動作は、PostgreSQLインスタンスをできるだけ長く生かし続けるのに役立ち、エビクションが発生した場合のクリーンシャットダウン手順を有効にします。
Kubernetesのリソース関連の問題を回避するには、クラスターの作成中に「リソース不足」処理のベストプラクティスを参照できます。
- マニフェストファイルのリソースセクションでメモリとCPUの必要な値を指定します。この方法により、\ ``OOM Killed``
および\ ``CPU throttle``
または実行中のインスタンスに関するその他のリソース関連の問題を回避できます。
- クラスターのポッドを「保証」QoSクラスに割り当てるには、メモリとCPUの両方の制限と要求を同じ値に設定する必要があります。
- ポッドリソースと一貫して必要なPostgreSQLメモリパラメーターを指定しますVMまたは物理マシンのシナリオで行うように、以下を参照してください。
- nodeSelectorを使用して、専用ノードにデータベースサーバーポッドをセットアップします。
APIリファレンスページの :ref:`“affinityconfiguration" ` リソースの「nodeSelector」および「tolerations」フィールドを参照してください。
次のマニフェストの例を参照できます。
.. code:: yaml
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です。これは、ポッド内ですべてのコンテナが合計1
GBのメモリを持つことを意味し、Kubernetesが常に保持し、コンテナができることを意味します予想通りに動作します。詳細については、
`Resource Consumption `_ を参照してください。
PostgreSQLドキュメントのセクション。
.. Seealso::
リソース管理の詳細については、 `Managing Compute Resources for Containers `_ を参照してください。
Kubernetesドキュメントのページ。