ı想在我通过Helm v3创建的deploy.yaml中将代理设置为env变量。在helm模板中添加env的正确格式应该是什么,同时有什么方法可以在values.yaml中传递此值?
- env:
- name: "HTTP_PROXY"
value: "http://<user>:<password>@<ip_addr>:<port>"
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 }}
答案 0 :(得分:1)
考虑到Helm的语法已经在Stack上讨论了几次,所以我只作总结,以减少孤立的问题并将其发布为社区Wiki,因为我在这里没有做太多事情。
如here所述,有几种添加env
的方法。
方法1 。 正确执行此操作的方式(秘密)。
由于您不想公开数据,因此最好将其另存为kubernetes中的内容。
首先,将所有需要的行添加到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
部分中进行更改,就像这样(当然,您可以按照需要的方式合并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 --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
您可以看到秘密用户名的数据已更改为root-user
。
this example已添加到github存储库中。
kubernetes/helm回购中也对此进行了一些讨论。您可以查看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>"