在头盔安装过程中,头盔“预安装”钩子调用脚本

时间:2019-05-22 13:47:06

标签: kubernetes kubernetes-helm

我想使用头盔的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 

3 个答案:

答案 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 中。这将是最简单的选择。