我想使用带有自定义 configmap 的 helm 部署 kafka-exporter,我的 values.yaml 文件如下所示:
# kafkaServer:
# - kafka0.svc.cluster.local:9092
# - kafka1.svc.cluster.local:9092
# - kafka2.svc.cluster.local:9092
service:
annotations:
prometheus.io/path: /metrics
prometheus.io/scrape: "true"
prometheus:
serviceMonitor:
enabled: true
namespace: observability
additionalLabels:
release: prometheus
deployment.yaml 图表如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "prometheus-kafka-exporter.fullname" . }}
labels:
app: {{ template "prometheus-kafka-exporter.name" . }}
chart: {{ template "prometheus-kafka-exporter.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ template "prometheus-kafka-exporter.name" . }}
release: {{ .Release.Name }}
template:
metadata:
annotations:
{{ toYaml .Values.annotations | indent 8 }}
labels:
app: {{ template "prometheus-kafka-exporter.name" . }}
release: {{ .Release.Name }}
spec:
{{- if .Values.securityContext }}
securityContext:
{{- toYaml .Values.securityContext | nindent 8 }}
{{- end }}
serviceAccountName: {{ template "prometheus-kafka-exporter.serviceAccountName" . }}
containers:
- args:
- '--verbosity={{ .Values.verbosity }}'
{{- if .Values.sarama.logEnabled }}
- '--log.enable-sarama'
{{- end }}
{{- range $server := .Values.kafkaServer }}
- '--kafka.server={{ $server }}'
{{- end }}
{{- if .Values.kafkaBrokerVersion }}
- '--kafka.version={{ .Values.kafkaBrokerVersion }}'
{{- end }}
{{- if .Values.tls.enabled }}
- '--tls.enabled'
{{- if .Values.tls.mountPath }}
- '--tls.ca-file={{ .Values.tls.mountPath }}/ca.crt'
- '--tls.cert-file={{ .Values.tls.mountPath }}/tls.crt'
- '--tls.key-file={{ .Values.tls.mountPath }}/tls.key'
{{- end }}
{{- if .Values.tls.insecureSkipVerify }}
- '--tls.insecure-skip-tls-verify'
{{- else if .Values.tls.serverName }}
- '--tls.server-name={{ .Values.tls.serverName }}'
{{- end }}
{{- end }}
{{- if .Values.sasl.enabled }}
- '--sasl.enabled'
{{- if not .Values.sasl.handshake }}
- '--sasl.handshake=false'
{{- end }}
{{- if .Values.sasl.scram.enabled }}
- '--sasl.username=$(SCRAM_USERNAME)'
- '--sasl.password=$(SCRAM_PASSWORD)'
- '--sasl.mechanism={{ .Values.sasl.scram.mechanism }}'
{{- end }}
{{- if .Values.sasl.kerberos.enabled }}
- '--sasl.service-name={{ .Values.sasl.kerberos.serviceName }}'
- '--sasl.kerberos-config-path={{ .Values.sasl.kerberos.mountPath }}/kerberos.conf'
- '--sasl.realm={{ .Values.sasl.kerberos.realm }}'
- '--sasl.keytab-path={{ .Values.sasl.kerberos.mountPath }}/kerberos.keytab'
- '--sasl.kerberos-auth-type={{ .Values.sasl.kerberos.kerberosAuthType }}'
{{- end }}
{{- if .Values.server.tls.enabled }}
- '--server.tls.ca-file={{ .Values.server.tls.mountPath }}/ca.crt'
- '--server.tls.cert-file={{ .Values.server.tls.mountPath }}/tls.crt'
- '--server.tls.key-file={{ .Values.server.tls.mountPath }}/tls.key'
- '--server.tls.mutual-auth-enabled={{ .Values.server.tls.mutualAuthEnabled }}'
{{- end }}
{{- end }}
{{- if .Values.extraArgs }}
{{- range .Values.extraArgs }}
- {{ . }}
{{- end }}
{{- end }}
env:
{{- range $env := .Values.env }}
- name: {{ $env.name }}
value: {{ $env.value }}
{{- end }}
{{- if .Values.sasl.scram.enabled }}
- name: SCRAM_USERNAME
valueFrom:
secretKeyRef:
name: {{ template "prometheus-kafka-exporter.saslScramSecretName" . }}
key: username
- name: SCRAM_PASSWORD
valueFrom:
secretKeyRef:
name: {{ template "prometheus-kafka-exporter.saslScramSecretName" . }}
key: password
{{- end }}
name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: exporter-port
containerPort: 9308
protocol: TCP
{{- if .Values.liveness.enabled }}
livenessProbe:
{{- toYaml .Values.liveness.probe | trim | nindent 12 }}
{{- end }}
{{- if .Values.readiness.enabled }}
readinessProbe:
{{- toYaml .Values.readiness.probe | trim | nindent 12 }}
{{- end }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.containerSecurityContext }}
securityContext:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- if or (.Values.tls.mountPath) (.Values.sasl.kerberos.mountPath) }}
volumeMounts:
{{- if .Values.tls.mountPath }}
- mountPath: {{ .Values.tls.mountPath }}
name: kafka-certs
readOnly: true
{{- end }}
{{- if .Values.sasl.kerberos.mountPath }}
- mountPath: {{ .Values.sasl.kerberos.mountPath }}
name: kerberos
readOnly: true
{{- end }}
{{- if .Values.server.tls.mountPath }}
- mountPath: {{ .Values.server.tls.mountPath }}
name: server-certs
readOnly: true
{{- end }}
{{- end }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
{{- if or (.Values.tls.mountPath) (.Values.sasl.kerberos.mountPath) }}
volumes:
{{- if .Values.tls.mountPath }}
- name: kafka-certs
secret:
secretName: {{ .Values.tls.secretName }}
{{- end }}
{{- if .Values.sasl.kerberos.mountPath }}
- name: kerberos
secret:
secretName: {{ .Values.sasl.kerberos.secretName }}
{{- end }}
{{- if .Values.server.tls.mountPath }}
- name: server-certs
secret:
secretName: {{ .Values.server.tls.secretName }}
{{- end }}
{{- end }}
我想像这样使用配置映射:
apiVersion: v1
data:
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka0.svc.cluster.local:9092
KAFKA_CLUSTERS_0_NAME: kafka0
KAFKA_CLUSTERS_1_BOOTSTRAPSERVERS: kafka1.svc.cluster.local:9092
KAFKA_CLUSTERS_1_NAME: kafka1
KAFKA_CLUSTERS_2_BOOTSTRAPSERVERS: kafka2.svc.cluster.local:9092
KAFKA_CLUSTERS_2_NAME: kafka2
kind: ConfigMap
metadata:
name: kafka-configmap
namespace: default
configmap 将来会有越来越多的kafkaServers,所以我想做更多的动态,我如何用自定义configmap 更新deployment.yaml 文件?
感谢您的任何建议。
我尝试用 configMapKeyRef 更新 deployment.yaml 文件,但每次只需要一个值