Helmを使用してKubernetesクラスターの開発および製品のさまざまな名前空間にデプロイする必要がある単純なSpringブートアプリケーションがあります。
環境ごとに複数のapplication.properties(application-dev.properties、application-prod.properties)ファイルを保持し、values.yamlファイルを介してそれらからconfigmapsを作成することを考えていました。これも環境ごとに異なり、実行時に指定されますヘルムアップグレード。
今問題は、どのようにconfig.mapsから値を消費するかです。たとえば、/ deployment/application.propertiesのように、コンテナー内にプロパティファイルをマウントできることを理解しています。
または、各プロパティをコンテナ内の環境変数として公開します。
しかし、Javaアプリケーションからどのように消費しますか?
また、コンテナイメージを作成する時点では、/ resources /ファイル内に現在のアプリケーション.propertiesが埋め込まれており、これがアプリケーションがデフォルトから使用しているため、アプリケーションがコンテナ内で実行されているときとは逆に、この動作を上書きする必要があります。開発者のデスクトップで手動でビルドして実行します。
Springbootは、環境変数から変数を自動的に推測できます。 application.propertiesまたはapplication.yamlで、$ {MY_ENVIRONMENT_VARIABLE:my-defaultvalue}を使用するだけです。
helmを使用してconfigmapに入力します。配置マニフェストの環境変数としてconfigmapを使用します。
この方法では、イメージ内にdev、int、prodの複数のapplication.propertiesを含める必要はありません。展開全体でそのままにしておく。
そして、ヘルムチャートでは、values.yamlの例values-dev.yamlまたはvalues-int.yamlを複数持つことができます。コマンドラインからヘルム値を動的に設定して、yamlファイルをオーバーライドすることもできます。
私はgithub https://github.com/balchua/demo にデモアプリを持っています。これはこのパターンを使用しています。
Bal Chuaが示唆するように、環境変数を使用することもできます。これを行う場合は、インストール時に--setを使用して特定の値をオーバーライドできます。または、多くの設定がある場合は、「-values」フラグを使用してカスタムのvalues.yamlファイルを渡すことができます。
別のアプローチは、.Files.Glob(例 github )を使用してファイル全体をロードし、ファイルをチャートの一部としてロードすることです。次に、 ファイルを/ configにマウント して、Spring Bootアプリケーションで使用できます。その場合、構成ファイルは、helm values.yamlではなく、Springブート構成ファイルと同じ形式になります。ただし、多くの場合、大きな違いはありません。
シークレットに対して同様の方法を使用して(おそらくパスワードをシークレットに入れたいと思います)、CI/CDでそれを使用する方法についての議論があります https://dzone.com/articles/hunting-treasure- with-kubernetes-configmaps-and-se (これはgithubの例に付随する記事です)。基本的には、コンテンツをエンコードするために、.AsConfigの代わりに.AsSecretsで.Files.Globを使用します。多くのヘルムチャートには、指定されていない場合にランダムパスワードを生成するオプションがありますが、おそらくそれは必要ないでしょう。
ファイルをマウントすることをお勧めします(application.properties
またはapplication.yml
)ConfigMap
内の、Spring Bootが自動的に検出できるファイルシステムのどこかに-その後、アプリはシンプルでシンプルなままです