我想使用头盔的pre-install
钩子
https://github.com/helm/helm/blob/master/docs/charts_hooks.md
在其文档中,您需要使用注释,该注释很清楚,但是 有什么不清楚的怎么结合呢?
apiVersion: ...
kind: ....
metadata:
annotations:
"helm.sh/hook": "pre-install"
对于我来说,我需要执行一个bash脚本,该脚本创建一些env变量,我应该在哪里将这个挂机前脚本放在可以使用头盔的图表中
在安装之前?
我想我需要在templates
文件夹中创建一个名为pre-install.yaml
的文件吗?如果是,在图表安装过程中应该在哪里放置用于创建env变量的命令?
更新
我需要在pre-install
中执行的命令如下:
export DB=prod_sales
export DOMAIN=www.test.com
export THENANT=VBAS
答案 0 :(得分:2)
Helm钩子会启动其他Kubernetes对象,通常是Job,它将启动一个单独的Pod。环境变量设置仅会影响当前进程及其以后在同一Docker容器中同一Pod中启动的子进程。也就是说:您不能使用诸如Helm预安装挂钩或Kubernetes initContainers之类的机制来设置环境变量。
如果您只想像问题中显示的那样将环境变量设置为固定的字符串,则可以directly set that in a Pod spec。如果变量是变量,但是您不想在Pod规范中对其进行硬编码,则也可以put them in a ConfigMap and then set environment variables from that ConfigMap。您还可以使用Helm模板从安装时配置中注入设置。
env:
- name: A_FIXED_VARIABLE
value: A fixed value
- name: SET_FROM_A_CONFIG_MAP
valueFrom:
configMapKeyRef:
name: the-config-map-name
key: someKey
- name: SET_FROM_HELM
value: {{ .Values.environmentValue | quote }}
根据您显示的特定值,“ Helm值”路径可能是最简单的。您可以运行类似
的命令helm install --set db=prod_sales --set domain=www.test.com ...
,然后可以访问模板中的.Values.db
,.Values.domain
,等。
如果该值实际上是动态的,并且您无法通过其他任何方式设置,则可以使用Docker入口点脚本在容器启动时进行设置。在this answer中,我描述了与之等效的通用Docker,包括入口点脚本设置。
答案 1 :(得分:1)
您可以以arc *项目中的内置舵图为例,here是源代码。
* Arc-一种用于Laravel项目的引导程序,可以对使用此PHP框架编写的现有应用程序进行Dockerize / Kubernetize。
答案 2 :(得分:0)
您可以将 ENV 放在模板文件夹下的 POD.yaml 中。这将是最简单的选择。