Resource management¶
典型的なKubernetesクラスターでは、ポッドは無制限のリソースで実行されます。デフォルトでは、必要なだけのCPUとRAMを使用できます。
CloudNativePGを使用すると、管理者は2つのノブを使用して、マニフェストの
resources
セクションを介して、クラスターのポッドによるリソース使用を制御および管理できます。
requests:初期要件limits:リソースのニーズが動的に増加する場合の最大使用量
例、次のように、32MiB(128MiBにスケーラビリティ)のRAMと50mのCPU(100mにスケーラビリティ)の初期RAMを要求できます。
resources:
requests:
memory: "32Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
メモリリクエストと制限はコンテナに関連付けられていますが、ポッドにメモリリクエストと制限があると考えると便利です。ポッドのメモリリクエストは、ポッド内のすべてのコンテナのメモリリクエストの総和です。
ポッドスケジューリングは、制限ではなく要求に基づいています。ポッドは、ポッドのメモリ要求を満たすのに十分なメモリがノードにある場合にのみ、ノードで実行するようにスケジュールされます。
リソースごとに、コンテナを優先度の高いオーダーに3つのQuality of Service(QoS)クラスに分割します。
保証
バースタブル
ベストエフォート
詳細については、Kubernetes文書の Configure Quality of Service for Pods セクションを参照してください。
PostgreSQLワークロードの場合、「保証」QoSを設定することをお勧めします。
Kubernetesのリソース関連の問題を回避するには、クラスターの作成中に「リソース不足」を処理するためのベストプラクティスを参照できます。
マニフェストファイルのリソースセクションで、メモリとCPUに必要な値を指定します。 このようにして、
OOM Killed(「OOM」はOut Of Memoryを表します)およびCPU throttleまたはその他を回避できます。 インスタンスの実行に関するリソース関連の問題。クラスターのポッドを「保証」QoSクラスに割り当てるには、制限と要求を設定する必要があります メモリとCPUの両方を同じ値にします。
必要なPostgreSQLメモリパラメータをポッドリソースと一貫して指定します(あなたがするように) VMまたは物理的マシンのシナリオ-以下を参照)。
nodeSelectorを使用して、専用ノードでデータベースサーバポッドをセットアップします。 「nodeSelector」および「tolerations」フィールドを参照してください APIマニュアルページの “affinityconfiguration" リソース。
次の例マニフェストを参照できます。
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
メガバイトの場合、コンテナメモリサイズの推奨値は1
ギガバイトです。つまり、ポッド内ではすべてのコンテナがKubernetesが常に保存する合計1
ギガバイトのメモリ。コンテナを期待どおりに動作させることができます。詳細については、
PostgreSQL文書の Resource Consumption セクションを参照してください。