How to set environment related values.yaml in Helm subcharts?

六月ゝ 毕业季﹏ 提交于 2020-06-24 14:17:10

问题


I am currently deploying my applications in a Kubernetes cluster using Helm. Now I also need to be able to modify some parameter in the values.yaml file for different environments.

For simple charts with only one level this is easy by having different values-local.yaml and values-prod.yaml and add this to the helm install flag, e.g. helm install --values values-local.yaml.

But if I have a second layer of subcharts, which also need to distinguish the values between multiple environments, I cannot set a custom values.yaml.

Assuming following structure:

| chart
   | Chart.yaml
   | values-local.yaml
   | values-prod.yaml
   | charts
      | foo-app
         | Chart.yaml
         | values-local.yaml
         | values-prod.yaml
         | templates
            | deployments.yaml
            | services.yaml

This will not work since Helm is expecting a values.yaml in subcharts.

My workaround right now is to have an if-else-construct in the subchart/values.yaml and set this in as a global variable in the parent values.yaml.

*foo-app/values.yaml*
    {{ - if .Values.global.env.local }}
        foo-app:
          replicas: 1
    {{ else if .Values.global.env.dev}}
        foo-app:
          replicas: 2
    {{ end }}

parent/values-local.yaml
global:
  env:
   local: true

parent/values-prod.yaml
global:
  env:
   prod: true

But I hope there is a better approach around so I do not need to rely on these custom flags.

I hope you can help me out on this.


回答1:


Here is how I would do it (for reference overriding values):

  1. In your child charts (foochart) define the number of replicas as a variable:
    • foochart/values.yaml

...
replicas: 1
...
  • foochart/templates/deployment.yaml

...
spec:
  replicas: {{ .Values.replicas }}
...
  1. Then, in your main chart's values files:

    • values-local.yaml

foochart:
  replicas: 1
  • values-prod.yaml

foochart:
  replicas: 2



回答2:


Just an idea, needs to be fleshed out a bit more...

At KubeCon I saw a talk where they introduced a Kubernetes Operator called Lostromos. The idea was to simplify deployments to support multiple different environments and make maintaining these kinds of things easier. It uses Custom Resource definitions. I wonder if you can leverage Lostromos in this case. Your sub-charts would have a single values.yaml but use lostromos and a CRD to feed in the properties you need. So you would deploy the CRD instead and the CRD would trigger Lostromos to deploy your Helm chart.

Just something to get the ideas going but seemed like it might be worth exploring.




回答3:


I'm currently getting my chart from stable/jenkins and am trying to set my values.yaml file. I have made the appropriate changes and try to run 'helm install -n --values= stable/jenkins but it continues to install the default values instead of the modified yaml file i created. To be more specific, I commented out the plug-in requirements in the yaml file since it has been causing my pod status to stay on 'Init:0/1' on Kubernetes.



来源:https://stackoverflow.com/questions/47590788/how-to-set-environment-related-values-yaml-in-helm-subcharts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!