Instance pod configuration
==========================

予測される量
------------

EDB CloudNativePGクラスターは、 ``.spec.projectedVolumeTemplate``
を介してPostgresポッド内のカスタムファイルのマウントをサポートしています。この機能は、追加のデータファイルを必要とするいくつかのPostgres機能と拡張機能に役立ちます。
EDB CloudNativePGクラスターでは、\ ``.spec.projectedVolumeTemplate``
フィールドは `projected volume <https://kubernetes.io/docs/concepts/storage/projected-volumes/>`_ 

Postgresポッドの\ ``/projected``
フォルダーの下に任意のデータをマウントできるKubernetesのテンプレート。

この単純な例は、既存のTLSシークレット\ ``sample-secret``
名前付けをファイルとしてPostgresポッドにマウントする方法を示しています。
``sample-secret`` の秘密キー\ ``tls.crt`` および\ ``tls.key``
の値は、Postgresポッドのパス\ ``/projected/certificate/tls.crt``
および\ ``/projected/certificate/tls.key``
にファイルとしてマウントされます。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-projected-volumes
   spec:
     instances: 3
     projectedVolumeTemplate:
       sources:
         - secret:
             name: sample-secret
             items:
               - key: tls.crt
                 path: certificate/tls.crt
               - key: tls.key
                 path: certificate/tls.key
     storage:
       size: 1Gi

投影されたボリュームテンプレートを使用して、展開マニフェストにシークレットとConfigMapをマウントする完全な例を見つけることができます。

::

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-projected-volume
   spec:
     instances: 3
     projectedVolumeTemplate:
       sources:
         - secret:
             name: sample-secret
             items:
               - key: tls.crt
                 path: certificate/tls.crt
               - key: tls.key
                 path: certificate/tls.key
         - configMap:
             name: sample-configmap
             items:
               - key: key1
                 path: config/key1
               - key: key2
                 path: config/key2
     storage:
       size: 1Gi

   - --
   apiVersion: v1
   data:
     tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQekNDQWVXZ0F3SUJBZ0lRSHVDY2lKcDVkZis0dHZBcDBrTk9rekFLQmdncWhrak9QUVFEQWpCTk1TTXcKSVFZRFZRUUxFeHB3YjNOMFozSmxjM0ZzTFc5d1pYSmhkRzl5TFhONWMzUmxiVEVtTUNRR0ExVUVBeE1kY0c5egpkR2R5WlhOeGJDMXZjR1Z5WVhSdmNpMWpZUzF6WldOeVpYUXdIaGNOTWpJd09USTVNRGMxTVRBNVdoY05Nakl4Ck1qSTRNRGMxTVRBNVdqQk5NVXN3U1FZRFZRUURFMEp3YjNOMFozSmxjM0ZzTFc5d1pYSmhkRzl5TFhkbFltaHYKYjJzdGMyVnlkbWxqWlM1d2IzTjBaM0psYzNGc0xXOXdaWEpoZEc5eUxYTjVjM1JsYlM1emRtTXdXVEFUQmdjcQpoa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVJRd2lhUm0wSmN4TzlBVlE0MVlqVlRqNUhDSVVFblFQOXNZRXFKCmYvNE1mVm53NkdDOThjNDNmQTVuS2UwSnQ5ZEV3QXREYktkdkRoeDlUTmIzdVY0K280R21NSUdqTUE0R0ExVWQKRHdFQi93UUVBd0lEcURBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREFUQU1CZ05WSFJNQkFmOEVBakFBTUI4RwpBMVVkSXdRWU1CYUFGQjN6cUVKbWFORENoRDdkWGptSWRlNEhUY0pFTUUwR0ExVWRFUVJHTUVTQ1FuQnZjM1JuCmNtVnpjV3d0YjNCbGNtRjBiM0l0ZDJWaWFHOXZheTF6WlhKMmFXTmxMbkJ2YzNSbmNtVnpjV3d0YjNCbGNtRjAKYjNJdGMzbHpkR1Z0TG5OMll6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkMwS2M5WWxYelBpL0lhTkRnWHkwawpYTDJpNlZzSHRORTFxN3MzWXh6Mm53SWhBS2IxUW5EVTlqRnNVK0l5a292TitVU1ZpVm5vU2MvZ2RXWkxmMnhoCjZ2WUsKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
     tls.key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUtucWxVQjFqU2sxWW5VZzAyb0tGbXlRdDJLUEZwaFc0K1lmQUFmUFdRenVvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVU1JbWtadENYTVR2UUZVT05XSTFVNCtSd2lGQkowRC9iR0JLaVgvK0RIMVo4T2hndmZITwpOM3dPWnludENiZlhSTUFMUTJ5bmJ3NGNmVXpXOTdsZVBnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
   kind: Secret
   metadata:
     name: sample-secret
   type: kubernetes.io/tls
   - --
   apiVersion: v1
   data:
     key1: value1
     key2: value2
     key3: value3
   kind: ConfigMap
   metadata:
     name: sample-configmap

エフェメラルボリューム
----------------------

EDB CloudNativePGクラスターは `ephemeral volumes <https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/>`_ に依存しています

社内活動の一部。一時ボリュームは、ポッドの存続期間が唯一の期間存在し、ポッドが再起動されても持続しません。

一時ストレージのボリューム要求テンプレート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

オペレーターはデフォルトで\ ``emptyDir`` ボリュームを使用しますが、
``.spec.ephemeralVolumesSizeLimit field``
を使用してカスタマイズできます。これは、 ``.spec.ephemeralVolumeSource``
フィールドでボリューム要求テンプレートを指定することにより、オーバーライドできます。

次の例では、\ ``1Gi`` エフェメラルボリュームが設定されます。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example-ephemeral-volume-source
   spec:
     instances: 3
     ephemeralVolumeSource:
       volumeClaimTemplate:
         spec:
           accessModes: ["ReadWriteOnce"]
           # example storageClassName, replace with one existing in your Kubernetes cluster
           storageClassName: "scratch-storage-class"
           resources:
             requests:
               storage: 1Gi

``.spec.emphemeralVolumeSource``
と\ ``.spec.ephemeralVolumesSizeLimit.temporaryData``
は同時に指定できません。

共有メモリのボリューム
^^^^^^^^^^^^^^^^^^^^^^

このボリュームは、Postgresの共有メモリ領域として、およびエフェメラルタイプとして使用されますが、メモリに保存されます。クラスター仕様の\ ``.spec.ephemeralVolumesSizeLimit.shm``
フィールドを使用して、サイズの上限を構成できます。このフィールドは、
:ref:`PostgreSQL running with `posix` shared memory dynamic allocation <PostgreSQL Configuration>` の場合にのみ使用します。

環境変数
--------

環境変数を使用して、一部のシステム動作をカスタマイズできます。一例は、カスタムLDAP構成ファイルをポイントできる\ ``LDAPCONF``
変数です。別の例は、PostgreSQLコンテナが使用するタイムゾーンを表す\ ``TZ``
環境変数です。

EDB CloudNativePGクラスターでは、クラスター仕様の\ ``env``
および\ ``envFrom`` スタンザを使用して、カスタム環境変数を設定できます。

この例では、デフォルトのクラスターレベルのタイムゾーンとして\ ``Australia/Sydney``
タイムゾーンを使用してPostgreSQLクラスターを定義します。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3

     env:
     - name: TZ
       value: Australia/Sydney

     storage:
       size: 1Gi

``envFrom``
スタンザは、ConfigMapまたはシークレットを参照して、コンテンツを環境変数として使用できます。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     name: cluster-example
   spec:
     instances: 3

     envFrom:
     - configMapRef:
         name: config-map-name
     - secretRef:
         name: secret-name

     storage:
       size: 1Gi

オペレーターは、次の環境変数を設定することを許可していません。

- ``POD_NAME``

- ``NAMESPACE``

- 名前が\ ``PG`` で始まる環境変数。

``env`` または\ ``envFrom``
セクションを変更すると、PostgreSQLポッドのローリング更新がトリガーされます。

``env`` または\ ``envFrom``
セクションがシークレットまたはConfigMapを参照している場合、オペレーターはそれらの変更を検出せず、ロールアウトをトリガーしません。
kubeletはポッドと同じ動作を使用するため、ポッドのロールアウトを手動でトリガーする必要があります。
