我正在使用helm 3,并希望将3个secretRefKeys连接到单个Env Var值中。
这是我的cronjob.yaml文件:
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: {{ .Values.cron }}
jobTemplate:
spec:
template:
spec:
initContainers:
- name: PREFIX
valueFrom:
secretKeyRef:
name: {{ .Values.secretName }}
key: prefix
- name: ENV
valueFrom:
secretKeyRef:
name: {{ .Values.secretName }}
key: env
- name: SUFFIX
valueFrom:
secretKeyRef:
name: {{ .Values.secretName }}
key: suffix
- name: URL_FULL
value: $(PREFIX)$(ENV)$(SUFFIX)
containers:
.
.
.
.
.
我希望URL_FULL
的值是串联的prefix
env
suffix
的实际值。
但我使用helm template
命令得到的内容实际上就是我在值中写入的内容:
- name: URL_FULL
value: $(PREFIX)$(ENV)$(SUFFIX)
提前谢谢。
发布于 2021-11-18 14:06:11
没错;当您向Kubernetes API提交pod规范时,它将包含该文字字符串,其中包括$(...)
引用(以及pod块,而不是secrets的值)。
当Kubernetes创建Pod并启动容器时,集群本身将填充所有环境变量并进行字符串连接。如果这是一个部署,您可以通过运行以下命令来验证这一点
kubectl exec deployment/my-deployment -it -- \
sh -c 'echo $URL_FULL'
(在Job或CronJob中,您可能必须检测服务本身才能看到这一点。)
发布于 2021-11-18 15:01:48
正如文档所述,helm template
不会解析这些环境变量,它只会呈现模板。
您将需要部署图表。我举了一个简单的例子:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
volumes:
- name: shared-volume
emptyDir: {}
initContainers:
- name: busybox
image: busybox
volumeMounts:
- name: shared-volume
mountPath: /nginx-data
command: ["/bin/sh"]
# sleep so that we could exec into it
args: ["-c", "sleep 6000"]
env:
- name: PROP_ONE
valueFrom:
secretKeyRef:
key: one
name: secret-sample
- name: PROP_TWO
valueFrom:
secretKeyRef:
key: two
name: secret-sample
- name: PROP_THREE
value: $(PROP_ONE)
containers:
- name: nginx
image: nginx
volumeMounts:
- name: shared-volume
mountPath: /usr/share/nginx/html
然后,您可以执行以下命令:
helm install foo .
然后发出helm ls
以查看它是否在集群中。
即使您现在执行以下操作:
kubectl describe pod nginx | grep PROP_THREE
您将看到引用是:
PROP_THREE: $(PROP_ONE)
如果您确实想要查看env变量,则必须执行容器(我不知道还有其他方法):
kubectl exec -it nginx -c busybox -- /bin/sh
然后:
env | grep PROP_THREE
PROP_THREE=bar
来查看它是否被正确解析。
https://stackoverflow.com/questions/70019030
复制相似问题