Helm 和 Kubernetes:具有随机值的不可变 ConfigMap 的替代品

问题描述 投票:0回答:1

我有一个 StatefulSet 的 ConfigMap,在其中生成一个 uuid,一旦生成,需要在扩展/缩小、卸载、安装等过程中保持不变。几乎是唯一一次应该是重新生成是在卸载+所有持久存储被删除+ConfigMap本身也被删除之后,这种情况很少见。

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: id-store
  annotations:
    helm.sh/resource-policy: keep
  labels:
    {{ .... }}
data:
  uuid: "{{ randAlphaNum 22 }}"
immutable: true

现在这似乎有效,但似乎有点反模式。 Helm 报错:

Error: INSTALLATION FAILED: cannot patch "id-store" with kind ConfigMap: ConfigMap "id-store" is invalid: data: Forbidden: field is immutable when `immutable` is set

部署完成,ConfigMap 正常运行,值保持不变。但是

resource-policy
注释和
immutable: true
的组合可能会导致
helm install --replace
(我们目前不使用)出现问题,并且该错误消息一直存在令人不愉快。我们确实使用
helm upgrade
,而且我不确定这种方法对于该命令是否也会有问题。

我不可能是第一个希望使用 Helm 生成一次值而不重新渲染的人,那么有没有更惯用的方法来实现此目的?

kubernetes kubernetes-helm configmap kubernetes-statefulset
1个回答
0
投票

感谢 David Maze 在评论中提出了链接问题,这个配置图最终看起来与那些非常相似。它只是略有不同,因为在我的情况下,uuid 用于设置 KafkaClusterUuid - 因为 Pod 位于 StatefulSet 中,我需要配置映射始终保留,除非显式删除,以便重新启动或扩展的 Pod 将使用相同的配置映射集群 ID 存储在现有 PVC 中。

apiVersion: v1
kind: ConfigMap
metadata:
  name: id-store
  annotations:
    helm.sh/resource-policy: keep
  labels:
    {{- include "kafka.labels" . | nindent 4 }}
data:
  {{- $deployed_map := lookup "v1" "ConfigMap" .Release.Namespace "id-store" }}
  {{- if or (not $deployed_map) (not $deployed_map.data) }}
  uuid: "{{ randAlphaNum 22 }}"
  {{ else }}
  uuid: {{ index $deployed_map.data "uuid" }}
  {{ end }}

如果没有

immutable: true
,我的问题中的错误消息就会消失,并且运行
helm upgrade
helm install --replace
时似乎也没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.