オペレーター構成

CloudNativePG のオペレーターは、標準のデプロイ マニフェストからインストールされ、構成パラダイムに関する規則に従います。ほとんどの場合はこれで問題ありませんが、次のようにデフォルトの動作を変更したいシナリオがいくつかあります。

  • オペレーターによって作成され、クラスターリソースに設定されているすべてのリソースに継承されるアノテーションとラベルを定義する

  • PostgreSQL の別のデフォルト イメージまたは追加のプル シークレットを定義する

デフォルトでは、オペレーターは cnpg-controller-manager という Kubernetes Deployment として cnpg-system 名前空間にインストールされます。

注釈

以下の例では、オペレーターのデプロイメントのデフォルトの名前と名前空間を想定しています。

オペレーターの動作は、オペレーターのデプロイと同じ名前空間にあり、名前が cnpg-controller-manager-config の ConfigMap /Secret を介してカスタマイズできます。

重要

config の ConfigMap /Secret への変更は、オペレーターによって自動的に検出されないため、リロードする必要があります (以下を参照)。さらに、変更は、構成が再ロードされた後に作成されたリソースにのみ適用されます。

重要

オペレーターは、最初に ConfigMap 値を処理し、次に Secret をこの順序で処理します。その結果、パラメーターが両方の場所で定義されている場合、Secret のパラメーターが使用されます。

利用可能なオプション

オペレーターは、ConfigMap /Secret で定義される次の環境変数を探します。

名前 |説明 —- | ———– INHERITED_ANNOTATIONS | Cluster メタデータで定義されると、ポッドを含むすべての生成されたリソースによって継承されるアノテーション名のリスト INHERITED_LABELS | Cluster メタデータで定義されると、ポッドを含むすべての生成されたリソースによって継承されるラベル名のリスト PULL_SECRET_NAME |オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプル シークレットの名前PVC がサイズ変更状態でスタックしている場合、Postgres ポッドを削除できるようにします。この機能は主に Azure 環境向けです (デフォルト false ) ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES | true に設定すると、オペレーターの更新後にインスタンスマネージャーのインプレース更新が有効になり、クラスターのローリング更新が回避されます (デフォルト false ) MONITORING_QUERIES_CONFIGMAP |作成されたすべてのクラスターに適用される一連のデフォルト クエリ (キー queries で指定) を含む、オペレーターの名前空間内の ConfigMap の名前。作成されたすべてのクラスターに適用される一連のデフォルト クエリ (キー queries で指定) を含む、オペレーターの名前空間内のシークレットの名前

INHERITED_ANNOTATIONS と INHERITED_LABELS の値は、パスのようなワイルドカードをサポートします。たとえば、値 example.com/* は、値 example.com/one と example.com/two の両方に一致します。

PULL_SECRET_NAME パラメーターを使用して追加のプル シークレット名を指定すると、オペレーターはそのシークレットを使用して、作成されたすべての PostgreSQL クラスターのプル シークレットを作成します。そのシークレットは <cluster-name>-pull という名前になります。

オペレーターが PULL_SECRET_NAME シークレットを探す名前空間は、オペレーターをインストールした場所です。オペレーターがそのシークレットを見つけることができない場合、構成パラメーターは無視されます。

警告

以前のバージョンのオペレーターは、PostgreSQL クラスターをデプロイする名前空間内に PULL_SECRET_NAME シークレットをコピーしていました。バージョン「1.11.0」から、以前の説明と一致するように動作が変更されました。以前のバージョンのオペレーターによって作成されたプル シークレットは使用されません。

オペレーター構成マップの定義

以下の例では、後でデプロイされる Cluster オブジェクトによって作成されたリソースによって継承されるラベル/アノテーション名を定義し、in-place updates for the instance manager を有効にすることによって、オペレーターの動作をカスタマイズします。

apiVersion: v1
kind: ConfigMap
metadata:
  name: cnpg-controller-manager-config
  namespace: cnpg-system
data:
  INHERITED_ANNOTATIONS: categories
  INHERITED_LABELS: environment, workload, app
  ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES: true

オペレーター シークレットの定義

以下の例では、後でデプロイされる Cluster オブジェクトによって作成されたリソースによって継承されるラベル/アノテーション名を定義し、in-place updates for the instance manager を有効にすることによって、オペレーターの動作をカスタマイズします。

apiVersion: v1
kind: Secret
metadata:
  name: cnpg-controller-manager-config
  namespace: cnpg-system
type: Opaque
stringData:
  INHERITED_ANNOTATIONS: categories
  INHERITED_LABELS: environment, workload, app
  ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES: true

オペレータを再起動して設定をリロードします

変更を有効にするには、オペレーター ポッドを再作成して構成マップをリロードする必要があります。マニフェストを使用して Kubernetes にオペレーターをインストールした場合は、以下を発行して実行できます。

kubectl rollout restart deployment \
    -n cnpg-system \
    cnpg-controller-manager

一般に、特定の名前空間が指定されている場合、次のコマンドを使用してオペレーター ポッドを削除できます。

kubectl delete pods -n [NAMESPACE_NAME_HERE] \
  -l app.kubernetes.io/name=cloudnative-pg

警告

カスタマイズは、オペレーター デプロイメントのリロード後に作成された Cluster リソースにのみ適用されます。

上記の例に従って、Cluster 定義に categories 注釈と environment 、workload 、または app ラベルのいずれかが含まれている場合、これらはデプロイメントによって生成されたすべてのリソースによって継承されます。

PPROF HTTP サーバー

オペレーターは、localhost:6060 上の次のエンドポイントで PPROF HTTP サーバーを公開できます。

- `/debug/pprof/`. Responds to a request for "/debug/pprof/" with an HTML page listing the available profiles

- `/debug/pprof/cmdline`. Responds with the running programs command line, with arguments separated by NUL bytes.

- `/debug/pprof/profile`. Responds with the pprof-formatted cpu profile. Profiling lasts for duration specified in seconds GET parameter, or for 30 seconds if not specified.

- `/debug/pprof/symbol`. Looks up the program counters listed in the request, responding with a table mapping program counters to function names.

- `/debug/pprof/trace`. Responds with the execution trace in binary form.  Tracing lasts for duration specified in seconds GET parameter, or for 1 second if not specified.

オペレーターを有効にするには、オペレーターのデプロイメントを編集してフラグ --pprof-server=true を追加する必要があります。

これを行うには、次のコマンドを実行します。

kubectl edit deployment -n cnpg-system cnpg-controller-manager

次に、編集ページでコンテナー引数を下にスクロールし、--pprof-server=true を追加します。例:

      containers:
      - args:
        - controller
        - --enable-leader-election
        - --config-map-name=cnpg-controller-manager-config
        - --secret-name=cnpg-controller-manager-config
        - --log-level=info
        - --pprof-server=true # relevant line
        command:
        - /manager
``` 変更を保存すると、デプロイでロールアウトが実行され、新しいポッドで PPROF サーバーが有効になります。

ポッドが実行されたら、次のようにしてコンテナー内で実行できます。

kubectl exec -ti -n cnpg-system – bash

curl localhost:6060/debug/pprof/ ```