Operator configuration

CloudNativePGの演算子は、標準の展開マニフェストからインストールされ、構成パラダイムよりも慣習に従います。ほとんどの場合これで問題ありませんが、次のようなデフォルトの動作を変更したいシナリオがいくつかあります。

  • 作成されたすべてのリソースに継承されるアノテーションとラベルの定義 演算子によって、クラスタリソースに設定されている PostgreSQL用の別のデフォルトイメージまたは追加のプルシークレットを定義する

デフォルトでは、演算子は cnpg-controller-manager というKubernetes Deployment として cnpg-system namespaceにインストールされます。

注釈

以下の例では、演算子展開のデフォルトの名前と名前空間を想定しています。

演算子のデプロイメントと同じ名前空間にあり、名前としてwith cnpg-controller-manager-config にある ConfigMap / Secret を使用してカスタマイズできます。

重要

構成の ConfigMap / Secret への変更は、演算子によって自動的に検出されないため、再読み込みするニーズがあります(以下を参照)。さらに、変更は構成が再ロードされた後に作成されたリソースにのみ適用されます。

重要

演算子は最初にConfigMap値を処理し、次にシークレットの値をこのオーダーで処理します。その結果、両方の場所でパラメータが定義されている場合、シークレットのパラメーターが使用されます。

利用可能オプション

演算子は、 ConfigMap / Secret で定義される以下の環境変数を探します。

Name

Description

INHERITED_ANNOTATIONS

`Cluster`メタデータで定義されている場合、ポッドを含むすべての生成されたリソースに継承される注釈名のリスト

INHERITED_LABELS

`Cluster`メタデータで定義されている場合、ポッドを含むすべての生成されたリソースに継承されるlabel名のリスト

PULL_SECRET_NAME

オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前

ENABLE_AZURE_PVC_UPDATES

PVCがサイズ変更状態でスタックしている場合、 Postgresポッドを削除できます。この機能は主にAzure環境用です(デフォルトは`false`)

ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES

true`に設定すると、演算子の更新後にインスタンスマネージャのインプレース更新を有効にし、クラスターのローリング更新を回避します(デフォルトの`false)

MONITORING_QUERIES_CONFIGMAP

作成されたすべてのクラスターに適用される一連のデフォルトクエリ(キー`queries`で指定される)を持つオペレーターの名前スペース内のConfigMapの名前

MONITORING_QUERIES_SECRET

作成されたすべてのクラスターに適用される、一連のデフォルトクエリ(キー`queries`で指定される)を持つオペレーターの名前スペース内のシークレットの名前

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

PULL_SECRET_NAME パラメータを使用して追加のプルシークレット名前を指定すると、演算子はそのシークレットを使用して、作成されたPostgreSQLclusterごとにプルシークレットを作成します。その秘密の名前付けは <cluster-name>-pull になります。

演算子が PULL_SECRET_NAME シークレットを探す名前空間は、演算子をインストールした場所です。演算子がその秘密を見つけることができない場合、設定パラメータを無視します。

警告

以前のバージョンの演算子は、 PostgreSQLクラスターをデプロイするネームスペース内に PULL_SECRET_NAME シークレットをコピーしました。バージョン"1.11.0"から、以前の説明とマッチするように動作が変更されました。演算子の以前のバージョンで作成されたプルシークレットは使用されていません。

演算子構成マップの定義

以下の例は、label/注釈名を定義して、後で展開される Cluster オブジェクトによって作成されるリソースに継承されるようにし、in-place updates for the instancemanagerを有効にすることによって、演算子の動作をカスタマイズします。

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

演算子シークレットの定義

以下の例は、label/注釈名を定義して、後で展開される Cluster オブジェクトによって作成されるリソースに継承されるようにし、in-place updates for the instancemanagerを有効にすることによって、演算子の動作をカスタマイズします。

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サーバー

演算子は、 ローカルホスト: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 を追加します。例:edb_notranlate_6変更を保存すると、展開でロールアウトが実行され、新しいポッドでPPROFサーバーが有効になります。

ポッドが実行されたら、次のようにしてコンテナ内で実行できます:kubectl exec -ti -n cnpg-system <pod name> -- bash一度実行に入ると:

curl localhost:6060/debug/pprof/