有没有一种方法可以将statefulset名称传递到文件中,该文件已针对同一statefulset挂载到configmap中?

时间:2019-12-18 09:42:49

标签: kubernetes kubernetes-helm

我正在尝试为每个命名空间运行2个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 <name> --from-file <file>进行解析,然后再将解析后的格式重新使用即可。

但是,cassandra.yaml在“ listen_address:”字段中应包含其自己的名称/ IP。但这是由kubernetes管理的。 所以问题是:我可以在cassandra.yaml中放入任何方式/代码,然后将其翻译为pod-IP / pod-name / pod-FQDN,还是我需要为pod编写一些命令,在广告连播启动后编辑此值?

1 个答案:

答案 0 :(得分:0)

您可以使用有状态容器的主机名,也可以使用环境变量中的DownwardAPI捕获容器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文件中的pod ip /名称并启动cassandra