Resource management
===================

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

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

- ``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 <https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#qos-classes>`_ を参照してください。

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

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

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

- マニフェストファイルのリソースセクションでメモリとCPUの必要な値を指定します。この方法により、\ ``OOM Killed``
  OOMはメモリ不足の略です ``CPU throttle``
  または実行中のインスタンスに関するその他のリソース関連の問題を回避できます。

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

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

- nodeSelectorを使用して、専用ノードにデータベースサーバーポッドをセットアップします。
  APIリファレンスページの :ref:`“affinityconfiguration" <pg4k.v1.md#postgresql-k8s-enterprisedb-io-v1-AffinityConfiguration>` リソースの「nodeSelector」および「tolerations」フィールドを参照してください。

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

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.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 <https://www.postgresql.org/docs/current/runtime-config-resource.html>`_ を参照してください。

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

..  Seealso::
   リソース管理の詳細については、 `Managing Compute Resources for Containers <https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/>`_ を参照してください。

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