インスタンス Pod 構成

予測ボリューム

CloudNativePG は、.spec.projectedVolumeTemplate を介して Postgres ポッド内にカスタム ファイルをマウントすることをサポートしています。これは、追加のデータ ファイルを必要とするいくつかの Postgres 機能と拡張機能に役立ちます。 CloudNativePG では、.spec.projectedVolumeTemplate フィールドは kubernetes の 予測ボリューム テンプレートであり、ユーザーは Postgres ポッドの /projected フォルダーの下に任意のデータをマウントできます。

既存の tls シークレット (sample-secret という名前) をファイルとして Postgres ポッドにマウントする方法の簡単な例を次に示します。 sample-secret のシークレット キー tls.crt と tls.key の値は、Postgres ポッドのパス /projected/certificate/tls.crt と /projected/certificate/tls.key にファイルとしてマウントされます。

apiVersion: postgresql.cnpg.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

Projected Volume テンプレートを使用して Secret と Configmap をマウントする完全な例は、 cluster-example-projected-volume.yaml 配置マニフェストにあります。

環境変数

一部のシステム動作は、環境変数を使用してカスタマイズできます。 1 つの例は LDAPCONF 変数で、カスタム LDAP 構成ファイルを指す場合があります。もう 1 つの例は、PostgreSQL コンテナーで使用されるタイムゾーンを表す TZ 環境変数です。

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

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

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

  env:
  - name: TZ
    value: Australia/Sydney

  storage:
    size: 1Gi

envFrom スタンザは、ConfigMaps または Secrets を参照して、それらのコンテンツを環境変数として使用できます。

apiVersion: postgresql.cnpg.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 Pod のローリング更新がトリガーされます。

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