最新の安定バージョンについては、Spring Cloud Kubernetes 5.0.1 を使用してください!

リーダー選出

Spring Cloud Kubernetes リーダー選出メカニズムは、Kubernetes ConfigMap を使用して Spring Integration のリーダー選出 API を実装します。

複数のアプリケーションインスタンスがリーダーシップをめぐって競合しますが、リーダーシップが与えられるのは 1 つだけです。リーダーシップが付与されると、リーダーアプリケーションはリーダーシップ Context を持つ OnGrantedEvent アプリケーションイベントを受け取ります。アプリケーションは定期的にリーダーシップを獲得しようとし、最初の呼び出し元にリーダーシップが与えられます。リーダーは、クラスターから削除されるか、リーダーシップを放棄するまで、リーダーであり続けます。リーダーの削除が発生すると、前のリーダーは OnRevokedEvent アプリケーションイベントを受け取ります。削除後は、古いリーダーを含め、クラスター内のすべてのインスタンスが新しいリーダーになる可能性があります。

これをプロジェクトに含めるには、次の依存関係を追加します。Fabric8 リーダーの実装

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-kubernetes-fabric8-leader</artifactId>
</dependency>

リーダーの選択に使用される構成マップの名前を指定するには、次のプロパティを使用します。

spring.cloud.kubernetes.leader.config-map-name=leader

リーダー選出情報コントリビューター

Spring Cloud Kubernetes Leader には、Spring Boot の /actuator/info エンドポイントにリーダー選出情報を追加する InfoContributor が含まれています。このコントリビューターは、リーダー ID、ロール、現在のアプリケーションインスタンスがリーダーであるかどうかなど、現在のリーダーに関する情報を提供します。

出力例:

{
  "leaderElection": {
    "leaderId": "my-app-pod-1",
    "role": "my-role",
    "isLeader": true
  }
}

application.[properties | yaml] で management.info.leader.enabled を false に設定することで、この InfoContributor を無効にすることができます。

management.info.leader.enabled=false