考虑到 Helm 的语法已经在 Stack 上讨论过几次,我将把它总结一下,以便减少孤立的问题并将其发布为社区 wiki,因为我在这里没有做太多.
正如here 所讨论的那样,有几种可能的方法可以添加env。
方式 1。 这样做的正确方法(秘密)。
由于您不想公开数据,因此最好将其保存为 kubernetes 中的秘密。
首先,在Values 文件中添加所有需要的行,以便可以从外部设置这些值。
例子:
username: root
password: password
然后,在您的 template 文件夹中添加一个 secret.yaml 文件,并将所需的数据复制到该文件中。
例子:
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-auth
data:
password: {{ .Values.password | b64enc }}
username: {{ .Values.username | b64enc }}
现在调整您的部署 yaml 模板并在 env 部分进行更改,如下所示(当然您可以按照您需要的方式组合 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
方式 2。 export 变量并在运行helm install时使用它。
在此之前,您必须修改您的图表,以便在安装时该值可以是set。
如果您为--set 标志正确修改了模板,
您可以使用环境变量进行设置。
$ export USERNAME=root-user
现在在运行 helm install 时使用这个变量,
$ helm install --set username=$USERNAME ./mychart
如果您在dry-run 模式下运行此helm install,您可以验证更改,
$ 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
可以看到username in secret的数据变成了root-user。
this example 已添加到 github 仓库中。
kubernetes/helm repo 中也对此进行了一些讨论。您可以查看this issue 了解所有其他使用环境变量的方法。
方式 3。在 Yaml 中直接硬编码值(更快,但不是那么安全/易于维护)。
spec:
restartPolicy: Always
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
{{- toYaml .Values.resources | nindent 12 }}
env:
- name: "HTTP_PROXY"
value: "http://<user>:<password>@<ip_addr>:<port>"