【发布时间】:2021-11-19 22:09:00
【问题描述】:
我有一个 Kubernetes Statefulset,我使用 envFrom 从 ConfigMaps 和 Secrets 添加环境变量,方法是在“extra-values.yaml”文件中定义 configMapRefs 和 secretRefs,并将该文件包含在我的 helm install 命令中.
Statefulset.yamlsn-p:
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-name
Helm 安装命令:
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 命令的正确语法和参数,尽管经过数小时的研究、试验和错误,以及反复敲打头颅。救命!
【问题讨论】:
-
你说了很多没有的工作,但你没有在你的问题中包含你做了什么尝试以及结果如何为您制作。无论如何,您正在寻找
kubectl -n WHATEVER patch -p '{"spec":{"template":{"spec":{"containers":[{"name":"WHATEVER", "envFrom":[{"configMapRef":{"name": "my-configmap-name"}}, ...]}]}}}}' statefulset/WHATEVER对吗? -
为什么不使用
helm upgrade -f extra-values.yaml添加值(然后系统的当前状态可以记录在源代码管理中)?为什么要安装一个部分配置的系统,然后完成配置这个特定的工作流程? -
@DavidMaze,我没想过要使用
helm upgrade,但这也行得通,而且语法比kubectl patch更简单,谢谢!为了回答您的第二个问题,Kubernetes 应用程序是在客户现场安装的,然后根据客户的环境进行配置。
标签: kubernetes kubernetes-helm kubectl kubernetes-statefulset