我有一个Kubernetes Statefulset和im,使用envFrom从ConfigMaps和Secrets添加环境变量,方法是在'extra-values.yaml‘文件中定义configMapRefs和secretRefs,并将该文件包含在我的helm install命令中。
Statefulset.yaml代码片段:
apiVersion: apps/v1
kind: StatefulSet
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: {{ .Chart.Name | lower}}
envFrom:
{{- if .Values.envFrom }}
{{- toYaml .Values.envFrom | nindent 10}}
{{- end }}values.yaml文件只有一个没有子项的envFrom:行,extra-values.yaml文件包含configMapRefs和secretRefs:
envFrom:
- configMapRef:
name: my-configmap-name
- configMapRef:
name: another-configmap-name
- secretRef:
name: my-secret-name
- secretRef:
name: second-secret-nameHelm install命令:
helm install myapp /some-folder/myapps-chart-folder -f extra-values.yaml我要做的是安装不带extra-values.yaml文件的myapp,然后使用kubectl patch命令将configMapRefs和secretRefs添加到statefulset及其pod中。
我可以手动执行kubectl edit statefulset来进行这些更改,这将使用正确的环境变量终止并重新启动pod。
但是我无论如何也找不出kubectl patch命令的正确语法和参数,尽管我花了几个小时的研究、试验和错误,以及反复的头破血流。帮助!
发布于 2021-09-29 13:41:37
感谢mdaniel的回答,它包含了我遗漏的线索。基本上,我完全忽略了containers元素是一个array的事实(因为我的statefulset只指定了一个容器,duh)。在我尝试的所有kubectl patch命令变体中,我没有将containers视为数组,也从未指定容器名称,因此kubectl patch从未真正拥有正确的信息来执行操作。
因此,正如所建议的那样,有效的命令如下所示:
kubectl patch statefulset my-statefulset -p '{"spec": {"template": {"spec": {"containers": [{"name":"the-container-name", "envFrom": [{"configMapRef":{"name":"my-configmap-name"}}, {"configMapRef":{"name":"another-configmap-name"}}] }] }}}}'https://stackoverflow.com/questions/69352026
复制相似问题