簡體   English   中英

如何在Helm子圖中設置與環境相關的values.yaml?

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

我目前正在使用Helm將應用程序部署在Kubernetes集群中。 現在,我還需要能夠針對不同的環境修改values.yaml文件中的某些參數。

對於只有一個級別的簡單圖表,可以通過設置不同的values-local.yaml和values-prod.yaml並將其添加到helm install標志(例如helm install --values values-local.yaml

但是,如果我有第二層子圖,也需要在多個環境之間進行區分,則無法設置自定義values.yaml。

假設以下結構:

| 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

由於Helm在子圖中需要一個values.yaml ,因此這將不起作用。

我現在的解決方法是在subchart / values.yaml中具有if-else-construct並將其設置為父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

但我希望周圍有更好的方法,因此我不必依賴這些自定義標志。

我希望你能在這方面幫助我。

這是我的操作方法(用於參考覆蓋值 ):

  1. 在子圖表(foochart)中,將副本數定義為變量:
    • foochart / values.yaml

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

...
spec:
  replicas: {{ .Values.replicas }}
...
  1. 然后,在主圖表的值文件中:

    • values-local.yaml

foochart:
  replicas: 1
  • 值prod.yaml

foochart:
  replicas: 2

只是一個想法,需要充實一點...

在KubeCon上,我看到了一個演講 ,他們介紹了一個叫做Lostromos的Kubernetes運算符。 這個想法是簡化部署以支持多個不同的環境,並使此類事情的維護更加容易。 它使用自定義資源定義 我想知道在這種情況下是否可以利用Lostromos。 您的子圖表只有一個values.yaml但使用lostromos和CRD來輸入所需的屬性 因此,您將改為部署CRD,而CRD會觸發Lostromos部署您的Helm圖表。

只是一些可以使想法付諸實踐的東西,但似乎值得探討。

我目前正在從穩定/詹金斯獲得圖表,並試圖設置我的values.yaml文件。 我進行了適當的更改,然后嘗試運行'helm install -n --values = stable / jenkins,但是它將繼續安裝默認值,而不是我創建的修改后的yaml文件。 更具體地說,我注釋了yaml文件中的插件要求,因為它導致我的pod狀態保持在Kubernetes上的“ Init:0/1”上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM