オペレーター設定
================
.. raw:: html
CloudNativePGのオペレーターは、標準の展開マニフェストからインストールされ、構成パラダイムの規則に従います。ほとんどの場合、これで問題ありませんが、次のようなデフォルトの動作を変更する必要があるシナリオもあります。
- オペレーターが作成し、クラスターリソースに設定されているすべてのリソースに継承されるアノテーションとラベルの定義
- PostgreSQLの別のデフォルトイメージまたは追加のプルシークレットを定義
デフォルトでは、オペレーターは\ ``cnpg-controller-manager``
と呼ばれるKubernetes ``Deployment`` として\ ``cnpg-system``
名前空間にインストールされます。
.. Note::
以下の例では、オペレーター展開のデフォルトの名前と名前空間を想定しています。
オペレーターの動作は、オペレーター展開と同じ名前空間にあり、名前が\ ``cnpg-controller-manager-config``
を持つ\ ``ConfigMap`` /``Secret`` を介してカスタマイズできます。
.. Important::
構成の`ConfigMap` /`Secret` への変更は、オペレーターによって自動的に検出されません。そのため、リロードする必要があります以下を参照してください。さらに、変更は、構成がリロードされた後に作成されたリソースにのみ適用されます。
.. Important::
オペレーターは、最初にConfigMap値を処理し、次にSecretをこの順序で処理します。その結果、パラメーターが両方の場所で定義されている場合、シークレットにあるものが使用されます。
使用可能なオプション
--------------------
オペレーターは、 ``ConfigMap`` /``Secret``
で定義される次の環境変数を探します。
.. csv-table::
:header: Name,Description
:widths: 10,30
:align: left
:class: longtable
`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」になります。
`MONITORING_QUERIES_CONFIGMAP`,作成されるすべてのクラスターに適用されるデフォルトのクエリー`queries`の下で指定されるオペレーターの名前空間のConfigMapの名前
`MONITORING_QUERIES_SECRET`,作成されるすべてのクラスターに適用されるデフォルトのクエリー`queries`の下で指定されるオペレーターの名前空間のシークレットの名前
`OPERATOR_IMAGE_NAME`,ポッドのブートストラップに使用されるオペレーターイメージの名前。インストール中に指定されたイメージがデフォルトになります。
`POSTGRES_IMAGE_NAME`,新しいクラスターにデフォルトで使用されるPostgreSQLイメージの名前。演算子で指定されたバージョンのデフォルト。
`PULL_SECRET_NAME`,オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前
`STANDBY_TCP_USER_TIMEOUT`,スタンバイインスタンスからプライマリへのレプリケーション接続の ``TCP_USER_TIMEOUT` socket option `__ を定義します。デフォルトは0システムのデフォルトです。
`DRAIN_TAINTS`,ノードドレインのインジケーターとして解釈されるテイントキーを指定します。デフォルトでは、 :ref:``kubectl` の`cnpg` プラグインを使用する<`kubectl` の`cnpg` プラグインを使用する>` 、 `Cluster Autoscaler `__ 、および `Karpenter `__ `node.kubernetes.io/unschedulable`、`ToBeDeletedByClusterAutoscaler`、`karpenter.sh/disrupted`、`karpenter.sh/disruption`によって一般的に適用されるテイントが含まれます。
`PULL_SECRET_NAME`,オペレーターの名前空間で定義され、イメージのダウンロードに使用される追加のプルシークレットの名前
`STANDBY_TCP_USER_TIMEOUT`,スタンバイインスタンスからプライマリへのレプリケーション接続の ``TCP_USER_TIMEOUT` socket option `__ を定義します。デフォルトは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クラスターのプルシークレットを作成します。そのシークレットの名前は\ ``-pull``
になります。
オペレーターが\ ``PULL_SECRET_NAME``
シークレットを検索する名前空間は、オペレーターをインストールした場所です。オペレーターがそのシークレットを見つけることができない場合、構成パラメーターは無視されます。
オペレーター構成マップの定義
----------------------------
次の例では、後でデプロイされる\ ``Cluster``
オブジェクトによって作成されたリソースが継承するラベル/アノテーション名を定義し、
:ref:`in-place updates for the instancemanager <インストールとアップグレード>` を有効にして、アップグレードを分散することにより、オペレーターの動作をカスタマイズします。
.. code:: yaml
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``
オブジェクトによって作成されたリソースが継承するラベル/アノテーション名を定義し、
:ref:`in-place updates for the instancemanager <インストールとアップグレード>` を有効にして、アップグレードを分散することにより、オペレーターの動作をカスタマイズします。
.. code:: yaml
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にオペレーターをインストールしている場合、次のコマンドを発行してそれを行うことができます。
.. code:: shell
kubectl rollout restart deployment \
-n cnpg-system \
cnpg-controller-manager
通常、特定の名前空間を指定すると、次のコマンドでオペレーターポッドを削除できます。
.. code:: shell
kubectl delete pods -n [NAMESPACE_NAME_HERE] \
-l app.kubernetes.io/name=cloudnative-pg
.. Warning::
カスタマイズは、オペレーター展開のリロード後に作成される`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`` を追加する必要があります。
これは、次のコマンドを実行して行うことができます。
.. code:: shell
kubectl edit deployment -n cnpg-system cnpg-controller-manager
次に、この例のように、編集ページでコンテナ引数を下にスクロールし、\ ``--pprof-server=true``
を追加します。
.. code:: yaml
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サーバーが有効になります。
ポッドが実行されたら、次の方法でコンテナ内で実行できます。
.. code:: shell
kubectl exec -ti -n cnpg-system -- bash
内部に入ったら、次を実行します。
.. code:: shell
curl localhost:6060/debug/pprof/