Kubernetes 是否有方法将statefulset名称传递到文件中,该文件将装载到同一statefulset的configmap中?
我正在尝试为每个命名空间运行cassandra statefulset的两个副本。我正在将多个cassandra配置装入一个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:
{{- 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. ,问题仍然存在吗?尼克:是的,你有什么解决办法吗?