簡體   English   中英

Helm:如何避免在升級時重新創建秘密?

[英]Helm: How to avoid recreating secrets on upgrade?

我在這樣的秘密模板中有一些東西:

apiVersion: v1
kind: Secret
metadata:
  # not relevant
type: Opaque
data:
  password: {{ randAlphaNum 32 | b64enc | quote }}

現在,在進行helm upgrade時,秘密被重新創建,但使用它的 pod 不是(它們也不應該,這沒關系)。

這會導致 Pod 在重新啟動或升級時失敗,因為新密碼現在與舊密碼不匹配。

是否可以在秘密存在時跳過重新創建秘密,例如{{- if not(exists theSecret) }}以及如何做到這一點?

您可以在 HELM 中使用查找function來檢查密鑰是否存在

https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function

掌舵圖中的 Function 如下所示: https://github.com/sankalp-r/helm-charts-examples/blob/1081ab5a5af3a1c7924c826c5a2bed4c1988helpers.

{{/*
Example for function
*/}}
{{- define "gen.secret" -}}
{{- $secret := lookup "v1" "Secret" .Release.Namespace "test-secret" -}}
{{- if $secret -}}
{{/*
   Reusing value of secret if exist
*/}}
password: {{ $secret.data.password }}
{{- else -}}
{{/*
    add new data
*/}}
password: {{ randAlphaNum 32 | b64enc | quote }}
{{- end -}}
{{- end -}}

秘密創作將類似於

示例文件: https://github.com/sankalp-r/helm-charts-examples/blob/main/sample_chart/templates/secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: "test-secret"
type: Opaque
data:
{{- ( include "gen.secret" . ) | indent 2 -}}

圖表示例: https://github.com/sankalp-r/helm-charts-examples

{{- $secret := (lookup "v1" "Secret" .Release.Namespace "test-secret" -}}
apiVersion: v1
kind: Secret
metadata:
  name: test-secret
type: Opaque

# 2. If the secret exists, write it back
{{ if $secret -}}
data:
  password: {{ $secret.data.password }}

# 3. If it doesn't exist ... create new
{{ else -}}
stringData:
  password: {{ randAlphaNum 32 | b64enc | quote }}
{{ end }}

暫無
暫無

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

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