リソース管理¶
一般的な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ドキュメントのページ。