[解決済み] Helmチャートで環境変数を取得する方法
質問
Helm チャートの templates ディレクトリにある deployment.yaml ファイルに、Helm を使って実行するコンテナ用の環境変数をいくつか設定しています。
ここで、Helmを実行するマシンからローカルに環境変数を取得できるようにしたいので、その方法で秘密を隠すことができます。
Helm を使用してアプリケーションを実行するときに、どのようにこれを渡して helm にローカルに環境変数を取得させるのでしょうか。
deployment.yamlファイルの一部です。
...
...
spec:
restartPolicy: Always
containers:
- name: sample-app
image: "sample-app:latest"
imagePullPolicy: Always
env:
- name: "USERNAME"
value: "app-username"
- name: "PASSWORD"
value: "28sin47dsk9ik"
...
...
helmを実行するときに、ローカル環境変数からUSERNAMEとPASSWORDの値を引き出すにはどうすればよいでしょうか?
これは可能ですか?もし可能であれば、どのようにすればよいのでしょうか?
どのように解決するのですか?
以下の方法があります。
export
を実行しながら、その変数を使用することができます。
helm install
.
その前に、チャートを修正して、値が
set
になるように修正する必要があります。
テンプレート・フィールドの設定方法を知っている場合は、この部分をスキップしてください。
データを公開したくないので、kubernetesにシークレットとして保存しておくとよいでしょう。
まず、以下の2行を
Values
ファイルに追加し、この二つの値を外部から設定できるようにします。
username: root
password: password
ここで
secret.yaml
ファイルを
template
ファイルを作成し、そのファイルに次のコードをコピーします。
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-auth
data:
password: {{ .Values.password | b64enc }}
username: {{ .Values.username | b64enc }}
ここで、デプロイメントの yaml テンプレートを調整し、以下の部分を変更します。
env
セクションを次のように変更します。
...
...
spec:
restartPolicy: Always
containers:
- name: sample-app
image: "sample-app:latest"
imagePullPolicy: Always
env:
- name: "USERNAME"
valueFrom:
secretKeyRef:
key: username
name: {{ .Release.Name }}-auth
- name: "PASSWORD"
valueFrom:
secretKeyRef:
key: password
name: {{ .Release.Name }}-auth
...
...
について、テンプレートを正しく修正した場合
--set
フラグを設定する必要があります。
が正しく設定されていれば、環境変数で設定することができます。
$ export USERNAME=root-user
helm install を実行する際にこの変数を使用します。
$ helm install --set username=$USERNAME ./mychart
これを実行すると
helm install
で
dry-run
モードでは、変更を確認することができます。
$ helm install --dry-run --set username=$USERNAME --debug ./mychart
[debug] Created tunnel using local port: '44937'
[debug] SERVER: "127.0.0.1:44937"
[debug] Original chart version: ""
[debug] CHART PATH: /home/maruf/go/src/github.com/the-redback/kubernetes-yaml-drafts/helm-charts/mychart
NAME: irreverant-meerkat
REVISION: 1
RELEASED: Fri Apr 20 03:29:11 2018
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
username: root-user
COMPUTED VALUES:
password: password
username: root-user
HOOKS:
MANIFEST:
---
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: irreverant-meerkat-auth
data:
password: password
username: root-user
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: irreverant-meerkat
labels:
app: irreverant-meerkat
spec:
replicas: 1
template:
metadata:
name: irreverant-meerkat
labels:
app: irreverant-meerkat
spec:
containers:
- name: irreverant-meerkat
image: alpine
env:
- name: "USERNAME"
valueFrom:
secretKeyRef:
key: username
name: irreverant-meerkat-auth
- name: "PASSWORD"
valueFrom:
secretKeyRef:
key: password
name: irreverant-meerkat-auth
imagePullPolicy: IfNotPresent
restartPolicy: Always
selector:
matchLabels:
app: irreverant-meerkat
secretのusernameのデータが
root-user
.
私は この例では を github リポに追加しました。
にもいくつかの議論があります。 kubernetes/helm のレポでもこの件に関して議論されています。こちらでは この問題 をご覧ください。
関連
-
[解決済み] CronJobによって作成された完了したKubernetesジョブを自動的に削除する方法とは?
-
[解決済み] Kubernetesのポッドを年齢でソートする
-
[解決済み] kubernetesポッド内のすべてのコンテナをきれいにリストアップする方法とは?
-
[解決済み] k8sのConfigMapやSecretを既存のものを削除せずに更新する方法
-
[解決済み] Kubernetesからすべてのリソースを一度に削除するには?
-
[解決済み] Pod内のコンテナからPod自身のIPアドレスを知るには?
-
[解決済み] バージョン "extensions/v1beta1" の種類 "Deployment" に一致するものはありません。
-
[解決済み] helm list : 名前空間 "kube-system" のconfigmapをリストアップできない。
-
[解決済み] ネームスペースの全リソースをリストアップする
-
[解決済み] Kubernetesです。PersistentVolumeClaim (pvc)を削除できない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] CronJobによって作成された完了したKubernetesジョブを自動的に削除する方法とは?
-
[解決済み] Kubernetesのポッドを年齢でソートする
-
[解決済み] kubernetesポッド内のすべてのコンテナをきれいにリストアップする方法とは?
-
[解決済み] k8sのConfigMapやSecretを既存のものを削除せずに更新する方法
-
[解決済み] Kubernetesからすべてのリソースを一度に削除するには?
-
[解決済み] Pod内のコンテナからPod自身のIPアドレスを知るには?
-
[解決済み] バージョン "extensions/v1beta1" の種類 "Deployment" に一致するものはありません。
-
[解決済み] helm list : 名前空間 "kube-system" のconfigmapをリストアップできない。
-
[解決済み] ネームスペースの全リソースをリストアップする
-
[解決済み] Kubernetesです。PersistentVolumeClaim (pvc)を削除できない。