リソース管理¶
一般的な 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)クラスに分割します。
保証
壊れやすい
ベストエフォート
詳細については、Kubernetesドキュメントの Configure Quality of Service for Pods セクションを参照してください。
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サーバー専用に割り当てられるメモリーの量(このパラメーターのデフォルト値は、定義されていない場合)。
shared_buffers の妥当な開始値は、システムのメモリーの25%です。例:
shared_buffers が256 MBの場合、コンテナのメモリサイズの推奨値は1
GBです。これは、ポッド内のすべてのコンテナにKubernetesが常に保持する合計1
GBのメモリがあることを意味します。期待どおりに動作します。詳細については、PostgreSQLドキュメントの Resource Consumption セクションを参照してください。