我正在尝试为每个命名空间运行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编写一些命令,在广告连播启动后编辑此值?
答案 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