オペレーター設定

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

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

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

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

注釈

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

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

重要

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

重要

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

使用可能なオプション

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

|名前 |説明 | | INHERITED_ANNOTATIONS | Cluster メタデータで定義されている場合、ポッドを含む生成されたすべてのリソースに継承されるアノテーション名のリスト | |INHERITED_LABELS | Cluster メタデータで定義されている場合、ポッドを含む生成されたすべてのリソースに継承されるラベル名のリスト | |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 の下で指定されるオペレーターの名前空間のシークレットの名前 | |CERTIFICATE_DURATION | オペレーターの名前空間のシークレットの名前生成された証明書の有効期間を日単位で示します。デフォルトは90 | |EXPIRING_CHECK_THRESHOLD |証明書の有効期限が間もなく識別されるためのしきい値を日単位で決定します。デフォルトは7 | | CREATE_ANY_SERVICE | true に設定すると、クラスターの-any サービスを作成します。デフォルトはfalse|

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 Server

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

  • /debug/pprof/ .使用可能なプロファイルをリストするHTMLページで「/debug/pprof/」の要求に応答します

  • /debug/pprof/cmdline .実行中のプログラムのコマンドラインに、NULLバイトで区切られた引数を使用して応答します。

  • /debug/pprof/profile . pprof形式のcpuプロファイルで応答します。プロファイリングは、GETパラメーターで指定された期間、または指定しない場合は30秒間持続します。

  • /debug/pprof/symbol .要求にリストされているプログラムカウンターを検索し、プログラムカウンターをファンクション名にマッピングするテーブルで応答します。

  • /debug/pprof/trace .バイナリ形式の実行トレースで応答します。トレースは、秒GETパラメーターで指定された期間、または指定しない場合は1秒間持続します。

オペレーターを有効にするには、オペレーター展開を編集し、フラグ --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 <pod name> -- bash

内部に入ったら、次を実行します。

curl localhost:6060/debug/pprof/