Kubernetes 是否有方法将statefulset名称传递到文件中,该文件将装载到同一statefulset的configmap中?

Kubernetes 是否有方法将statefulset名称传递到文件中,该文件将装载到同一statefulset的configmap中?,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我正在尝试为每个命名空间运行cassandra statefulset的两个副本。我正在将多个cassandra配置装入一个configmap: {{- if .Values.enabled }} kind: ConfigMap apiVersion: v1 metadata: name: {{ template "cassandra.fullname" . }} labels: app: {{ template "cassandra.name" . }} chart:

我正在尝试为每个命名空间运行cassandra statefulset的两个副本。我正在将多个cassandra配置装入一个configmap:

{{- if .Values.enabled }}
kind: ConfigMap
apiVersion: v1
metadata:
  name: {{ template "cassandra.fullname" . }}
  labels:
    app: {{ template "cassandra.name" . }}
    chart: {{ template "cassandra.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
data:
  cassandra.yaml: |
{{ .Files.Get "files/cassandra.yaml" | printf "%s" | indent 4 }}
  cassandra-topology.properties: |
{{ .Files.Get "files/cassandra-topology.properties" | printf "%s" | indent 4 }}
{{- end }
这对任何文件格式都非常有效,我不必通过
kubectl create configmap--from file
解析它,然后将解析后的格式取回并使用它

但是,cassandra.yaml应该在“listen_address:”字段中包含自己的名称/IP。但这是由库伯内特斯管理的。
所以问题是:是否有任何方法/代码可以放在cassandra.yaml中,它稍后将被翻译成pod IP/pod name/pod FQDN,或者我需要为pod编写一些命令,以便在pod启动后编辑该值

您可以使用有状态pod的主机名,也可以在环境变量中使用downwardAPI捕获pod IP。您可以使用cassandra.yaml中的变量

请参考以下您需要包含在pod规范中的示例

      env:
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP

一种简单的方法是编写一个启动脚本,然后从中更新cassandra.yaml文件和start cassandra中的pod ip/name

您能写出准确的代码吗?我曾尝试使用helm{{include}}和template construct以及$(pod.IP),但到目前为止,我的每一次尝试都是作为一个文本字符串装入pod中,没有任何替换。问题不在于向变量添加值,而是以这种方式将变量添加到cassandra.yaml中,它将得到正确的解决。请参阅我文章的最后一句话answer@A.M. ,问题仍然存在吗?尼克:是的,你有什么解决办法吗?