調整戦略のストラテジー
宣言型の構成では、システムの望ましい状態を定義します。その後、システムは常にこの状態にできる限り近いままで動作します。詳細については、構成ファイルを使用した Kubernetes オブジェクトの宣言型管理をご覧ください。
Config Connector を使用すると、依存関係の関係にかかわらず、任意の順序でリソースの作成と更新を行うことができます。GKE は、宣言された構成を望ましい状態の結果整合性に移行します。
たとえば、PubSubSubscription
を対応する PubSubTopic
より先に 作成する場合、Config Connector は、関連するサブスクリプションが作成されるまで、トピックの作成を待機します。
Config Connector のインストールが一貫していない期間は、管理するリソースの数とタイプによって異なります。通常、GKE クラスタの変更は数秒で実行されます。ただし、Google Cloud リソースを作成する時間はリソースの種類によって異なります。たとえば、1 つの PubSubTopic
の作成には数秒かかります。Google Cloud リソースは、作成されるまで一貫性を持ちません。たとえば、SQLInstance
と SQLDatabase
を作成する場合、データベースの作成中にシステムは数分間一貫性がありません。
GKE と Config Connector は、更新ごとに、または事前に構成されたデフォルトの間隔に基づく平均のジッター周期後に各リソースを調整します。デフォルトの間隔は、各リソースのリファレンス ページの「Config Connector のデフォルト平均調整間隔(秒)」で確認できます。各リソースへのリンクについては、リソースの概要をご覧ください。調整中にエラーが発生した場合、Config Connector は最大バックオフが 2 分である指数バックオフで再試行します。特定のリソースの [イベント] でエラーを表示できます。
調整間隔の設定
Config Connector 1.102 以降では、Config Connector によって管理されるリソースの平均調整間隔を cnrm.cloud.google.com/reconcile-interval-in-seconds
アノテーションを使用して設定できます。アノテーションの値により、リソース リファレンス ページの「Config Connector のデフォルト平均調整間隔(秒)」のデフォルト値が上書きされます。アノテーションの値は、時間を秒単位で表す正の整数である必要があります。値が 0 に設定されている場合、リソースが UpToDate ステータスに達すると、Config Connector によって調整が開始されなくなります。
たとえば、Config Connector によるリソースの調整頻度を低くして、基盤となる Google Cloud の API 割り当ての問題が発生しないようにするには、平均調整間隔の値を 1 時間に設定します。
cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"
Config Connector によるリソースの調整頻度を高くして、ブレを早期に修正するには、アノテーションに小さな値を設定します。
次のスクリプトを使用して、同じグループ バージョンの種類(GVK)を共有する特定のタイプのすべてのリソースにアノテーションを付けることができます。
#!/bin/bash
KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL
kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"
以下を置き換えます。
RESOURCE_KIND
: アノテーションを付けるリソースの種類。RESOURCE_NAMESPACE
: アノテーションを付けるリソースを含む名前空間。RECONCILE_INTERVAL
: 調整間隔(秒)。
調整間隔を 0 に設定してリソースのブレ補正を無効にできますが、リソースの作動は無効になりません。リソース Spec
に変更を加えると、リソースは再調整されます。
調整間隔を 0 に設定すると、元に戻せなくなります。つまり、値をゼロ以外の値に戻しても、Config Connector はリソースを再調整しません。
調整間隔を 0 に戻す場合は、次の方法を使用できます。
- 調整間隔の値を設定してリソース仕様を変更し、新しい調整を有効にします。
- アノテーション
cnrm.cloud.google.com/deletion-policy: "abandon"
を設定してリソースを破棄し、調整間隔の値を 0 以外に設定してリソースを再作成します。
変更可能だが読み取り不可能であるフィールドは変更時のみ有効
一部の API では、読み取り不可であっても変更可能なフィールド(SQL ユーザーのパスワードなど)が公開されます。これらのフィールドが変更されたかどうかを確認できないため、変更可能だが読み取り不可能であるフィールドは、カスタム リソースが変更された場合にのみ更新されます。
変更不可能であるフィールドを変更してもリソースは再作成されない
リソース内の一部のフィールドは変更不可能であり、削除してからターゲット リソースを再作成しないと、調整できません。
このような場合、Config Connector は、この再作成ではなく、リソースに対して「UpdatedFailed」Kubernetes イベントを発行します。その後、リソースを削除して再作成する必要があります。
イベントの例:
Warning UpdateFailed 37m (x643 over 15d) computeinstance-controller Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]