9.3. ConfigMap PropertySource の使用

Kubernetes には、設定をアプリケーションに渡すための ConfigMap という概念があります。Spring Cloud Kubernetes プラグインは、ConfigMap とのインテグレーションを提供し、Spring Boot が ConfigMap にアクセスできるようにします。

有効な場合、ConfigMap PropertySource はアプリケーションの名前が付いた ConfigMap を Kubernetes で検索します (spring.application.name を参照)。その ConfigMap が見つかった場合は、そのデータを読み取り、以下を行います。

9.3.1. 個々のプロパティーの適用

プロパティーを使用してそのスレッドプール設定を読み取る demo という名前の Spring Boot アプリケーションがあるとします。

  • pool.size.core
  • pool.size.max

これを YAML 形式で ConfigMap に外部化することができます。

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  pool.size.core: 1
  pool.size.max: 16

9.3.2. application.yaml ConfigMap プロパティーの適用

ほとんどの場合で個々のプロパティーは適切に動作しますが、YAML を使用した方が便利であることがあります。ここでは、application.yaml という名前の単一のプロパティーを使用し、YAML を内部に組み込みします。

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yaml: |-
    pool:
      size:
        core: 1
        max:16

9.3.3. application.properties ConfigMap プロパティーの適用

Spring Boot の application.properties ファイルのスタイルで ConfigMap プロパティーを定義することもできます。ここでは、application.properties という名前の単一のプロパティーを使用し、内部にプロパティー設定をリストします。

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.properties: |-
    pool.size.core: 1
    pool.size.max: 16

9.3.4. ConfigMap のデプロイ

ConfigMap をデプロイし、Spring Boot アプリケーションにアクセスできるようにするには、以下の手順を実行します。

手順

  1. Spring Boot アプリケーションで 外部化設定 メカニズムを使用し、ConfigMap プロパティーソースへアクセスします。たとえば、Java Bean に @Configuration アノテーションを付けると、ConfigMap による Bean のプロパティー値のインジェクションが可能になります。
  2. プロジェクトの @Configuration ファイル (または bootstrap.yaml ファイル) で、spring.application.name プロパティーが ConfigMap の名前と一致するよう設定します。
  3. アプリケーションに関連するサービスアカウントの view パーミッションを有効にします (デフォルトでは、default というサービスアカウントになります)。たとえば、view パーミッションを default サービスアカウントに追加するには、以下を実行します。

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)