オペレーター設定¶
CloudNativePGのオペレーターは、標準の展開マニフェストからインストールされ、構成パラダイムの規則に従います。ほとんどの場合、これで問題ありませんが、次のようなデフォルトの動作を変更するシナリオがいくつかあります。
オペレーターが作成し、クラスターリソースに設定されているすべてのリソースによって継承されるアノテーションとラベルを定義する
PostgreSQLの別のデフォルトイメージまたは追加のプルシークレットを定義する
デフォルトでは、オペレーターはcnpg-controller-manager
と呼ばれるKubernetes Deployment としてcnpg-system
名前空間にインストールされます。
注釈
以下の例では、オペレーター展開のデフォルトの名前と名前空間を想定しています。
オペレーターの動作は、オペレーターデプロイメントと同じ名前空間にあり、名前としてcnpg-controller-manager-config
を使用してカスタマイズできます。
重要
構成の`ConfigMap` /Secret への変更は、オペレーターによって自動的に検出されません。そのため、リロードする必要があります(以下を参照)。さらに、変更は、構成がリロードされた後に作成されたリソースにのみ適用されます。
重要
オペレーターは、最初にConfigMap値を処理し、次にSecretの値をこの順序で処理します。その結果、パラメーターが両方の場所で定義されている場合、Secret内のものが使用されます。
利用可能なオプション¶
オペレーターは、 ConfigMap /Secret
で定義される次の環境変数を探します。
名前 |説明—- | ———– INHERITED_ANNOTATIONS | Cluster
メタデータで定義されると、ポッド INHERITED_LABELS |
を含むすべての生成されたリソースに継承されるアノテーション名のリストCluster
メタデータで定義されると、ポッド PULL_SECRET_NAME |
を含むすべての生成されたリソースによって継承されるラベル名のリストオペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前PVCがサイズ変更状態でスタックしている場合、Postgres
Podを削除できます。この機能は主にAzure環境向けです(デフォルトはfalse
) true
に設定すると、オペレーターの更新後のインスタンスマネージャーのインプレース更新が有効になり、クラスターのローリング更新が回避されます
(デフォルト MONITORING_QUERIES_CONFIGMAP
)作成されたすべてのクラスターに適用されるデフォルトのクエリー(キー
queries
で指定)を含むオペレーターの名前空間内のConfigMapの名前作成されたすべてのクラスターに適用されるデフォルトのクエリ(キーqueries
で指定)を持つオペレーターの名前空間内のSecretの名前
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
を追加する必要があります。
これを行うには、次のコマンドを実行します。
次に、編集ページでコンテナー引数を下にスクロールし、--pprof-server=true
を追加します。例:edb_notranlate_6
変更を保存すると、デプロイメントでロールアウトが実行され、新しいポッドでPPROFサーバーが有効になります。
ポッドが実行されたら、次を実行してコンテナ内で実行できます。
kubectl exec -ti -n cnpg-system <pod name> -- bash
内部で実行:
curl localhost:6060/debug/pprof/