11.5. PropertySource reload の使用
アプリケーションによっては、外部プロパティーソースで変更を検出し、内部の状況を更新して、新しい設定を反映する必要があります。Spring Cloud Kubernetes のリロード機能は、関連する ConfigMap または Secret の変更時にアプリケーションのリロードをトリガーできます。
11.5.1. PropertySource reload の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Spring Cloud Kubernetes の PropertySource reload
機能は、デフォルトで無効になっています。
手順
-
クイックスタートの
src/main/resources
ディレクトリーに移動し、bootstrap.yml
ファイルを開きます。 -
spring.cloud.kubernetes.reload.enabled=true
設定プロパティーを変更します。
11.5.2. PropertySource reload のレベル リンクのコピーリンクがクリップボードにコピーされました!
spring.cloud.kubernetes.reload.strategy
プロパティーでは以下のリロードレベルがサポートされます。
- refresh
(デフォルト):
@ConfigurationProperties
または@RefreshScope
アノテーションが付けられた設定 Bean のみがリロードされます。このリロードレベルは、Spring Cloud コンテキストの更新機能を利用します。注記PropertySource reload 機能は、リロードストラテジーが
refresh
に設定されている場合に シンプルな プロパティー (コレクションではない) のみに使用できます。コレクションによって対応されるプロパティーは起動時に変更しないでください。- restart_context
- Spring の ApplicationContext 全体が正常に再起動されます。Bean は新しい設定で再作成されます。
- shutdown
- Spring の ApplicationContext がシャットダウンされ、コンテナーの再起動がアクティベートされます。このレベルを使用する場合は、デーモンでないすべてのスレッドが ApplicationContext にバインドされ、レプリケーションコントローラーまたはレプリカのセットが Pod を再起動するよう設定されているようにしてください。
11.5.3. PropertySource reload の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、リロード機能が有効になっている場合の動作を説明します。
手順
リロード機能がデフォルト設定 (refresh モード) で有効になっていることを仮定します。config map の変更時に以下の Bean が更新されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更の詳細を確認するには、以下のようにメッセージを定期的に出力する別の Bean を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように ConfigMap を使用すると、アプリケーションによって出力されるメッセージを変更できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod に関連する config map の
bean.message
という名前のプロパティーに変更を加えると、プログラムの出力に反映されます。
11.5.4. PropertySource reload の操作モード リンクのコピーリンクがクリップボードにコピーされました!
リロード機能は 2 つの操作モードをサポートします。
- event
-
(デフォルト): Kubernetes API (Web ソケット) を使用して ConfigMap または Secret の変更を監視します。イベントによって設定の再チェックが実行され、変更があった場合はリロードが実行されます。config map の変更をリッスンするには、サービスアカウントに
view
ロールが必要です。より高いレベルのロール (例:edit
) が Secret には必要になります (Secret はデフォルトでは監視されません)。 - ポーリング
-
config map と Secret から定期的に設定を再作成し、設定の変更を確認します。ポーリングの期間は
spring.cloud.kubernetes.reload.period
プロパティーを使用して設定でき、デフォルトは 15 秒 です。監視対象のプロパティーソースと同じロールが必要です。たとえば、ファイルにマウントされた Secret ソースにポーリングを使用する場合は特定の権限は必要ありません。
11.5.5. PropertySource reload 設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
リロード機能の設定には、以下のプロパティーを使用できます。
- spring.cloud.kubernetes.reload.enabled
-
プロパティーソースおよび設定リロードの監視を有効にします。型は
Boolean
で、デフォルトはfalse
です。 - spring.cloud.kubernetes.reload.monitoring-config-maps
-
config map の変更の監視を許可します。型は
Boolean
で、デフォルトはtrue
です。 - spring.cloud.kubernetes.reload.monitoring-secrets
-
Secret の変更の監視を許可します。型は
Boolean
で、デフォルトはfalse
です。 - spring.cloud.kubernetes.reload.strategy
-
リロードの実行時に使用するストラテジー (
refresh
、restart_context
、またはshutdown
)。型はEnum
で、デフォルトはrefresh
です。 - spring.cloud.kubernetes.reload.mode
-
プロパティーソースの変更をリッスンする方法を指定します (
event
またはpolling
)。型はEnum
で、デフォルトはevent
です。 - spring.cloud.kubernetes.reload.period
-
polling
ストラテジーの使用時に変更の検証を行う期間をミリ秒単位で指定します。型はLong
で、デフォルトは15000
です。
以下の点に注意してください。
-
spring.cloud.kubernetes.reload.*
プロパティーは ConfigMap または Secret で使用しないでください。起動時にこのようなプロパティーを変更すると、予期せぬ結果が発生する可能性があります。 -
refresh
レベルの使用時に、プロパティーまたは config map 全体を削除しても、Bean は元の状態に復元されません。