123
這次要講用ArgoCD去管理helm的套件,可以通過 UI 安裝 Helm chart,也可以採用宣告式 GitOps 的方式進行安裝。
Helm 只用來通過 helm template
來展開chart。應用程式的生命週期是由 Argo CD 而不是 Helm 來管理的。以下是一個範例:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
project: default
source:
chart: nginx
repoURL: registry-1.docker.io/bitnamicharts # note: the oci:// syntax is not included.
targetRevision: 15.9.0
destination:
name: "in-cluster"
namespace: nginx
當使用多種方式提供helm的value時
優先順序為:parameters
> valuesObject
> values
> valueFiles
> Helm 儲存庫中的 values.yaml
。
Values Files
Helm 可以使用不同的,甚至多個 “values.yaml” 文件來導出其參數。可以使用 --values
參數來指定替代或多個values文件。該參數可以重複使用以支持多個values文件:
在 Argo CD v2.6 之前,values文件必須與 Helm chart位於同一個 Git 儲存庫中。這些文件可以位於不同的位置,此時可以使用相對於 Helm 圖表根目錄的相對路徑來訪問它們。從 v2.6 開始,values文件可以來自與 Helm chart不同的Git 儲存庫。
如果 Helm 在template展開期間傳遞了一個不存在的值文件,它將會報錯。可以使用 --ignore-missing-value-files
來忽略丟失的值文件(即,不傳遞給 Helm)。這在實現應用程式集的默認/覆蓋模式時特別有用。
我這裡建議一律都寫在appliaction設定裡面,不要用額外的參數,這樣比較好管理.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
project: default
source:
chart: nginx
repoURL: registry-1.docker.io/bitnamicharts # note: the oci:// syntax is not included.
targetRevision: 15.9.0
helm:
releaseName: nginx
valueFiles:
- values.yaml
destination:
name: "in-cluster"
namespace: nginx
Values
Argo CD 支援在應用程式清單中直接使用 source.helm.valuesObject
或用source.helm.values
key來實現與values文件等效的功能。我這裡建議用valuesObject,如果用source.helm.values
會用| 去裝vaules值,跑版會看不出來.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
project: default
source:
chart: nginx
repoURL: registry-1.docker.io/bitnamicharts # note: the oci:// syntax is not included.
targetRevision: 15.9.0
helm:
releaseName: nginx
valuesObject:
ingress: true
path: /
hosts:
- mydomain.example.com
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
labels: {}
tls:
- secretName: mydomain-tls
hosts:
- mydomain.example.com
destination:
name: "in-cluster"
namespace: nginx
Helm Parameters
Helm 可以設置參數值,這些值會覆蓋 values.yaml
中的任何值。例如,service.type
是在 Helm 圖表中常見的一個參數:
argocd app set helm-guestbook -p service.type=LoadBalancer
但我建議也是寫在文件裡,不然時間一久就忘了也不好交接.
source:
helm:
parameters:
- name: "service.type"
value: LoadBalancer
Helm Value Precedence
我們這次講到這麼多可以輸入helm value的方法,一定要記得以下優先順序:parameters
> valuesObject
> values
> valueFiles
> Helm 儲存庫中的 values.yaml
。或者更確切地說:
lowest -> valueFiles
-> values
-> valuesObject
highest -> parameters