オペレーター設定
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/