我正在尝试使用 helm 在 kubernetes 中部署一个 rest api 应用程序。一些配置文件中包含凭据,我想在部署期间用 Kubernetes 机密替换 helm 模板中的变量。
有没有人有一个指向我可以探索的文档的指针?
答案 0 :(得分:1)
如果您希望直接将 ENV
部署到部署文件,您也可以这样做,前提是环境变量很少,但是创建秘密并将它们全部注入的最佳实践进入部署。
这里分享一个直接的例子,将秘密注入到部署中
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: "{{ .Chart.Name }}-deployment"
labels:
chart: '{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}'
spec:
replicas: {{ .Values.replicaCount }}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
selector:
matchLabels:
app: "{{ .Chart.Name }}-selector"
version: "current"
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
template:
metadata:
labels:
app: "{{ .Chart.Name }}-selector"
version: "current"
spec:
containers:
- name: "{{ .Chart.Name }}"
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.servicePort}}
resources:
requests:
cpu: "{{ .Values.image.resources.requests.cpu }}"
memory: "{{ .Values.image.resources.requests.memory }}"
env:
- name: PORT
value : "{{ .Values.service.servicePort }}"
{{- if .Values.image.livenessProbe }}
livenessProbe:
{{ toYaml .Values.image.livenessProbe | indent 10 }}
{{- end }}
{{- if .Values.image.readinessProbe }}
readinessProbe:
{{ toYaml .Values.image.readinessProbe | indent 10 }}
{{- end }}
values.yaml
image:
repository: nodeserver
tag: 1.0.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 300Mi
readinessProbe: {}
# Example (replace readinessProbe: {} with the following):
# readinessProbe:
# httpGet:
# path: /ready
# port: 3000
# initialDelaySeconds: 3
# periodSeconds: 5
livenessProbe: {}
# Example (replace livenessProbe: {} with the following)::
# livenessProbe:
# httpGet:
# path: /live
# port: 3000
# initialDelaySeconds: 40
# periodSeconds: 10
service:
name: Node
type: NodePort
servicePort: 3000
可以看到deployment.yaml里面的代码块
env:
- name: PORT
value : "{{ .Values.service.servicePort }}"
它正在从 values.yaml
文件中获取值
service:
name: Node
type: NodePort
servicePort: 3000
如果您不想更新 values.yaml
文件,您也可以使用该命令重写该值
helm install chart my-chart -n namespace-name --set service.servicePort=5000
答案 1 :(得分:0)
在您的模板文件夹中创建一个 Secret 模板。然后,您可以通过 helm cli 传递值。
例如,这是我的 secret.yaml
文件。
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: {{ .Values.password | b64enc }}
现在,我可以将 password
的值设置如下:
helm install my-chart-instance my-chart -n my-namespace --set password=my-secret-value