Operator configuration
CloudNativePGのオペレーターは、標準の展開マニフェストからインストールされ、構成パラダイムの規則に従います。ほとんどの場合、これで問題ありませんが、次のようなデフォルトの動作を変更する必要があるシナリオもあります。
オペレーターが作成し、クラスターリソースに設定されているすべてのリソースに継承されるアノテーションとラベルの定義
PostgreSQLの別のデフォルトイメージまたは追加のプルシークレットを定義
デフォルトでは、オペレーターはcnpg-controller-manager
と呼ばれるKubernetes Deployment としてcnpg-system
名前空間にインストールされます。
注釈
以下の例では、オペレーター展開のデフォルトの名前と名前空間を想定しています。
オペレーターの動作は、オペレーター展開と同じ名前空間にあり、名前がcnpg-controller-manager-config
を持つConfigMap /Secret を介してカスタマイズできます。
注釈
構成の`ConfigMap` /Secret への変更は、オペレーターによって自動的に検出されません。そのため、リロードする必要があります以下を参照してください。さらに、変更は、構成がリロードされた後に作成されたリソースにのみ適用されます。
注釈
オペレーターは、最初にConfigMap値を処理し、次にSecretをこの順序で処理します。その結果、パラメーターが両方の場所で定義されている場合、シークレットにあるものが使用されます。
使用可能なオプション
オペレーターは、 ConfigMap /Secret
で定義される次の環境変数を探します。
Name |
Description |
|---|---|
CERTIFICATE_DURATION |
生成された証明書の有効期間を日単位で示します。デフォルト90です。 |
CLUSTERS_ROLLOUT_DELAY |
オペレーターのアップグレード中にさまざまなクラスターのロールアウトの間で待機する時間秒単位。この設定は、クラスター全体でアップグレードのタイミングを制御し、アップグレードを分散してシステムへの影響を軽減します。デフォルト値は`0`で、PostgreSQLクラスターのアップグレードの間に遅延がないことを意味します。 |
CREATE_ANY_SERVICE |
true`に設定すると、クラスターの-any`サービスを作成します。デフォルトは`false`です |
ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES |
true`に設定すると、オペレーターの更新後にインスタンスマネージャーのインプレース更新が有効になり、クラスターのローリング更新が回避されますデフォルト `false |
EXPIRING_CHECK_THRESHOLD |
証明書の有効期限が間もなく識別されるためのしきい値を日単位で決定します。デフォルト7です。 |
INCLUDE_PLUGINS |
クラスターの調整に常に含まれるプラグインのコンマ区切りリスト。 |
INHERITED_ANNOTATIONS |
`Cluster`メタデータで定義されている場合、ポッドを含む生成されたすべてのリソースに継承されるアノテーション名のリスト |
INHERITED_LABELS |
`Cluster`メタデータで定義されている場合、ポッドを含む生成されたすべてのリソースに継承されるラベル名のリスト |
INSTANCES_ROLLOUT_DELAY |
オペレーターのアップグレード中に、同じクラスター内の個々のPostgreSQLインスタンスのロールアウトの間で待機する時間秒単位。デフォルト値は`0`で、同じPostgreSQLクラスター内のインスタンスのアップグレードの間に遅延がないことを意味します。 |
KUBERNETES_CLUSTER_DOMAIN |
Kubernetesクラスター内のサービスFQDNのドメインサフィックスを定義します。設定しない場合、デフォルトの「cluster.local」になります。 |
METRICS_CERT_DIR |
オペレーターメトリックサーバーのTLS証明書が保存されているディレクトリ。設定すると、ポート8080でメトリックエンドポイントのTLSが有効になります。ディレクトリには、標準のKubernetes TLSシークレット規則に従って `tls.crt`および`tls.key`ファイルが含まれている必要があります。設定しない場合、メトリックサーバーはTLSなしで動作しますデフォルトの動作。 |
MONITORING_QUERIES_CONFIGMAP |
作成されるすべてのクラスターに適用されるデフォルトのクエリー`queries`の下で指定されるオペレーターの名前空間のConfigMapの名前 |
MONITORING_QUERIES_SECRET |
作成されるすべてのクラスターに適用されるデフォルトのクエリー`queries`の下で指定されるオペレーターの名前空間のシークレットの名前 |
OPERATOR_IMAGE_NAME |
ポッドのブートストラップに使用されるオペレーターイメージの名前。インストール中に指定されたイメージがデフォルトになります。 |
PGBOUNCER_IMAGE_NAME |
新しいプーラーにデフォルトで使用されるPgBouncerイメージの名前。演算子で指定されたバージョンのデフォルト。 |
POSTGRES_IMAGE_NAME |
新しいクラスターにデフォルトで使用されるPostgreSQLイメージの名前。演算子で指定されたバージョンのデフォルト。 |
PULL_SECRET_NAME |
オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前 |
STANDBY_TCP_USER_TIMEOUT |
スタンバイインスタンスからプライマリへのレプリケーション接続の ``TCP_USER_TIMEOUT` socket option <https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-TCP-USER-TIMEOUT>`__ をミリ秒単位で定義します。デフォルトは50005秒です。システムのデフォルトを使用するには、 `0`に設定します。 |
DRAIN_TAINTS |
ノードドレインのインジケーターとして解釈されるテイントキーを指定します。デフォルトでは、 :ref:``kubectl` の`cnpg` プラグインを使用する<kubectl の`cnpg` プラグインを使用する>` 、 Cluster Autoscaler 、および Karpenter node.kubernetes.io/unschedulable、ToBeDeletedByClusterAutoscaler、karpenter.sh/disrupted、`karpenter.sh/disruption`によって一般的に適用されるテイントが含まれます。 |
MONITORING_QUERIES_SECRET |
作成されるすべてのクラスターに適用されるデフォルトのクエリー`queries`の下で指定されるオペレーターの名前空間のシークレットの名前 |
OPERATOR_IMAGE_NAME |
ポッドのブートストラップに使用されるオペレーターイメージの名前。インストール中に指定されたイメージがデフォルトになります。 |
PGBOUNCER_IMAGE_NAME |
新しいプーラーにデフォルトで使用されるPgBouncerイメージの名前。演算子で指定されたバージョンのデフォルト。 |
POSTGRES_IMAGE_NAME |
新しいクラスターにデフォルトで使用されるPostgreSQLイメージの名前。演算子で指定されたバージョンのデフォルト。 |
PULL_SECRET_NAME |
オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前 |
STANDBY_TCP_USER_TIMEOUT |
スタンバイインスタンスからプライマリへのレプリケーション接続の ``TCP_USER_TIMEOUT` socket option <https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-TCP-USER-TIMEOUT>`__ をミリ秒単位で定義します。デフォルトは50005秒です。システムのデフォルトを使用するには、 `0`に設定します。 |
DRAIN_TAINTS |
ノードドレインのインジケーターとして解釈されるテイントキーを指定します。デフォルトでは、 :ref:``kubectl` の`cnpg` プラグインを使用する<kubectl の`cnpg` プラグインを使用する>` 、 Cluster Autoscaler 、および Karpenter node.kubernetes.io/unschedulable、ToBeDeletedByClusterAutoscaler、karpenter.sh/disrupted、`karpenter.sh/disruption`によって一般的に適用されるテイントが含まれます。 |
INHERITED_ANNOTATIONS およびINHERITED_LABELS
の値は、パスのようなワイルドカードをサポートしています。たとえば、値example.com/*
は、値example.com/one およびexample.com/two
の両方と一致します。
PULL_SECRET_NAME
パラメーターを使用して追加のプルシークレット名を指定すると、オペレーターはそのシークレットを使用して、作成されたすべてのPostgreSQLクラスターのプルシークレットを作成します。そのシークレットの名前は<cluster-name>-pull
になります。
オペレーターがPULL_SECRET_NAME
シークレットを検索する名前空間は、オペレーターをインストールした場所です。オペレーターがそのシークレットを見つけることができない場合、構成パラメーターは無視されます。
オペレーター構成マップの定義
次の例では、後でデプロイされるCluster
オブジェクトによって作成されたリソースが継承するラベル/アノテーション名を定義し、
in-place updates for the instancemanager を有効にして、アップグレードを分散することにより、オペレーターの動作をカスタマイズします。
apiVersion: v1
kind: ConfigMap
metadata:
name: cnpg-controller-manager-config
namespace: cnpg-system
data:
CLUSTERS_ROLLOUT_DELAY: 60
ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES: true
INHERITED_ANNOTATIONS: categories
INHERITED_LABELS: environment, workload, app
INSTANCES_ROLLOUT_DELAY: 10
オペレーターシークレットの定義
次の例では、後でデプロイされるCluster
オブジェクトによって作成されたリソースが継承するラベル/アノテーション名を定義し、
in-place updates for the instancemanager を有効にして、アップグレードを分散することにより、オペレーターの動作をカスタマイズします。
apiVersion: v1
kind: Secret
metadata:
name: cnpg-controller-manager-config
namespace: cnpg-system
type: Opaque
stringData:
CLUSTERS_ROLLOUT_DELAY: 60
ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES: true
INHERITED_ANNOTATIONS: categories
INHERITED_LABELS: environment, workload, app
INSTANCES_ROLLOUT_DELAY: 10
オペレーターを再起動して構成をリロードする
変更を有効にするには、オペレーターポッドを再作成して構成マップをリロードする必要があります。マニフェストを使用して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
ラベルのいずれかが含まれている場合、これらはデプロイメントによって生成されたすべてのリソースに継承されます。
プロファイリングツール
オペレーターは、localhost:6060 でpprof
HTTPサーバーを公開できます。これを有効にするには、オペレーターの展開を編集し、フラグ
--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サーバーが有効になります。
注釈
pprofサーバーは、ポート`6060` でプレーンHTTPのみを提供します。
ローカルマシンからpprofエンドポイントにアクセスするには、ポート転送を使用します。
kubectl port-forward -n cnpg-system deploy/cnpg-controller-manager 6060
curl -sS http://localhost:6060/debug/pprof/
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
http://localhost:6060/debug/pprof/ ブラウザーを使用してpprofにアクセスすることもできます。
警告
上記の例では、ローカルテストにのみ`kubectl port-forward` を使用します。これは、運用環境で機能を公開するための意図された方法ではありません**。 pprofを機密デバッグインターフェイスとして扱い、決して公開しないでください。リモートでアクセスする必要がある場合は、適切なネットワークポリシーとアクセス制御で保護してください。