GKEからコンテナに対して環境変数を渡す
やりたいこと
application.ymlでlocal用の設定とstg用の設定を使い分けるようにしたい場合がある。
application.yml
spring:
profiles:
active: ${APPLICATION_ENV:local}
${APPLICATION_ENV:local}で環境変数「APPLICATION_ENV」に値がない場合、デフォルトではlocalの設定を使用する(application-local.ymlを読み込む)。
GKE上でアプリを動作させる場合、「APPLICATION_ENV」にstgを設定してapplication-stg.ymlを読み込みたい。
ConfigMapを作成する
ConfigMapとは
ConfigMapとはデータをキーバリュー形式で保存できる機能。コンテナから設定(環境変数とか)としてConfigMapを参照できる。
ConfigMapを作成する
作り方として色々あるが、私は次のやり方で作成した。
Cloud Shellを起動して下記ファイルを作成する。
hoge@cloudshell:~$ vi config.yml
config.yml(ConfigMapの元)
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
APPLICATION_ENV: stg
ConfigMap作成
hoge@cloudshell:~$ kubectl apply -f config.yml
GCP上のKubernetes Engine >> ConfigMapとSecretに対象のConfigMapが作成されていることを確認する。
ワークロードでConfigMapを読み込むようにする
デプロイメントを編集してワークロードを更新する。
Kubernetes Engine >> ワークロード >> 対象のワークロードを選択 >> YAMLタブをクリック
編集モードでデプロイメントのyamlに - env以下を設定して保存する
spec:
containers:
- env:
- name: APPLICATION_ENV
valueFrom:
configMapKeyRef:
key: APPLICATION_ENV
name: env-config
以上で環境変数をコンテナが読み込める。