_pod.tpl 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. {{- define "grafana.pod" -}}
  2. {{- if .Values.schedulerName }}
  3. schedulerName: "{{ .Values.schedulerName }}"
  4. {{- end }}
  5. serviceAccountName: {{ template "grafana.serviceAccountName" . }}
  6. {{- if .Values.securityContext }}
  7. securityContext:
  8. {{ toYaml .Values.securityContext | indent 2 }}
  9. {{- end }}
  10. {{- if .Values.hostAliases }}
  11. hostAliases:
  12. {{ toYaml .Values.hostAliases | indent 2 }}
  13. {{- end }}
  14. {{- if .Values.priorityClassName }}
  15. priorityClassName: {{ .Values.priorityClassName }}
  16. {{- end }}
  17. {{- if ( or .Values.persistence.enabled .Values.dashboards .Values.sidecar.datasources.enabled .Values.sidecar.notifiers.enabled .Values.extraInitContainers) }}
  18. initContainers:
  19. {{- end }}
  20. {{- if ( and .Values.persistence.enabled .Values.initChownData.enabled ) }}
  21. - name: init-chown-data
  22. {{- if .Values.initChownData.image.sha }}
  23. image: "{{ .Values.initChownData.image.repository }}:{{ .Values.initChownData.image.tag }}@sha256:{{ .Values.initChownData.image.sha }}"
  24. {{- else }}
  25. image: "{{ .Values.initChownData.image.repository }}:{{ .Values.initChownData.image.tag }}"
  26. {{- end }}
  27. imagePullPolicy: {{ .Values.initChownData.image.pullPolicy }}
  28. securityContext:
  29. runAsUser: 0
  30. command: ["chown", "-R", "{{ .Values.securityContext.runAsUser }}:{{ .Values.securityContext.runAsGroup }}", "/var/lib/grafana"]
  31. resources:
  32. {{ toYaml .Values.initChownData.resources | indent 6 }}
  33. volumeMounts:
  34. - name: storage
  35. mountPath: "/var/lib/grafana"
  36. {{- if .Values.persistence.subPath }}
  37. subPath: {{ .Values.persistence.subPath }}
  38. {{- end }}
  39. {{- end }}
  40. {{- if .Values.dashboards }}
  41. - name: download-dashboards
  42. {{- if .Values.downloadDashboardsImage.sha }}
  43. image: "{{ .Values.downloadDashboardsImage.repository }}:{{ .Values.downloadDashboardsImage.tag }}@sha256:{{ .Values.downloadDashboardsImage.sha }}"
  44. {{- else }}
  45. image: "{{ .Values.downloadDashboardsImage.repository }}:{{ .Values.downloadDashboardsImage.tag }}"
  46. {{- end }}
  47. imagePullPolicy: {{ .Values.downloadDashboardsImage.pullPolicy }}
  48. command: ["/bin/sh"]
  49. args: [ "-c", "mkdir -p /var/lib/grafana/dashboards/default && /bin/sh /etc/grafana/download_dashboards.sh" ]
  50. resources:
  51. {{ toYaml .Values.downloadDashboards.resources | indent 6 }}
  52. env:
  53. {{- range $key, $value := .Values.downloadDashboards.env }}
  54. - name: "{{ $key }}"
  55. value: "{{ $value }}"
  56. {{- end }}
  57. volumeMounts:
  58. - name: config
  59. mountPath: "/etc/grafana/download_dashboards.sh"
  60. subPath: download_dashboards.sh
  61. - name: storage
  62. mountPath: "/var/lib/grafana"
  63. {{- if .Values.persistence.subPath }}
  64. subPath: {{ .Values.persistence.subPath }}
  65. {{- end }}
  66. {{- range .Values.extraSecretMounts }}
  67. - name: {{ .name }}
  68. mountPath: {{ .mountPath }}
  69. readOnly: {{ .readOnly }}
  70. {{- end }}
  71. {{- end }}
  72. {{- if .Values.sidecar.datasources.enabled }}
  73. - name: {{ template "grafana.name" . }}-sc-datasources
  74. {{- if .Values.sidecar.image.sha }}
  75. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}@sha256:{{ .Values.sidecar.image.sha }}"
  76. {{- else }}
  77. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}"
  78. {{- end }}
  79. imagePullPolicy: {{ .Values.sidecar.imagePullPolicy }}
  80. env:
  81. - name: METHOD
  82. value: LIST
  83. - name: LABEL
  84. value: "{{ .Values.sidecar.datasources.label }}"
  85. - name: FOLDER
  86. value: "/etc/grafana/provisioning/datasources"
  87. - name: RESOURCE
  88. value: "both"
  89. {{- if .Values.sidecar.enableUniqueFilenames }}
  90. - name: UNIQUE_FILENAMES
  91. value: "{{ .Values.sidecar.enableUniqueFilenames }}"
  92. {{- end }}
  93. {{- if .Values.sidecar.datasources.searchNamespace }}
  94. - name: NAMESPACE
  95. value: "{{ .Values.sidecar.datasources.searchNamespace }}"
  96. {{- end }}
  97. {{- if .Values.sidecar.skipTlsVerify }}
  98. - name: SKIP_TLS_VERIFY
  99. value: "{{ .Values.sidecar.skipTlsVerify }}"
  100. {{- end }}
  101. resources:
  102. {{ toYaml .Values.sidecar.resources | indent 6 }}
  103. volumeMounts:
  104. - name: sc-datasources-volume
  105. mountPath: "/etc/grafana/provisioning/datasources"
  106. {{- end}}
  107. {{- if .Values.sidecar.notifiers.enabled }}
  108. - name: {{ template "grafana.name" . }}-sc-notifiers
  109. {{- if .Values.sidecar.image.sha }}
  110. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}@sha256:{{ .Values.sidecar.image.sha }}"
  111. {{- else }}
  112. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}"
  113. {{- end }}
  114. imagePullPolicy: {{ .Values.sidecar.imagePullPolicy }}
  115. env:
  116. - name: METHOD
  117. value: LIST
  118. - name: LABEL
  119. value: "{{ .Values.sidecar.notifiers.label }}"
  120. - name: FOLDER
  121. value: "/etc/grafana/provisioning/notifiers"
  122. - name: RESOURCE
  123. value: "both"
  124. {{- if .Values.sidecar.enableUniqueFilenames }}
  125. - name: UNIQUE_FILENAMES
  126. value: "{{ .Values.sidecar.enableUniqueFilenames }}"
  127. {{- end }}
  128. {{- if .Values.sidecar.notifiers.searchNamespace }}
  129. - name: NAMESPACE
  130. value: "{{ .Values.sidecar.notifiers.searchNamespace }}"
  131. {{- end }}
  132. {{- if .Values.sidecar.skipTlsVerify }}
  133. - name: SKIP_TLS_VERIFY
  134. value: "{{ .Values.sidecar.skipTlsVerify }}"
  135. {{- end }}
  136. resources:
  137. {{ toYaml .Values.sidecar.resources | indent 6 }}
  138. volumeMounts:
  139. - name: sc-notifiers-volume
  140. mountPath: "/etc/grafana/provisioning/notifiers"
  141. {{- end}}
  142. {{- if .Values.extraInitContainers }}
  143. {{ toYaml .Values.extraInitContainers | indent 2 }}
  144. {{- end }}
  145. {{- if .Values.image.pullSecrets }}
  146. imagePullSecrets:
  147. {{- range .Values.image.pullSecrets }}
  148. - name: {{ . }}
  149. {{- end}}
  150. {{- end }}
  151. containers:
  152. {{- if .Values.sidecar.dashboards.enabled }}
  153. - name: {{ template "grafana.name" . }}-sc-dashboard
  154. {{- if .Values.sidecar.image.sha }}
  155. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}@sha256:{{ .Values.sidecar.image.sha }}"
  156. {{- else }}
  157. image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}"
  158. {{- end }}
  159. imagePullPolicy: {{ .Values.sidecar.imagePullPolicy }}
  160. env:
  161. - name: METHOD
  162. value: {{ .Values.sidecar.dashboards.watchMethod }}
  163. - name: LABEL
  164. value: "{{ .Values.sidecar.dashboards.label }}"
  165. - name: FOLDER
  166. value: "{{ .Values.sidecar.dashboards.folder }}{{- with .Values.sidecar.dashboards.defaultFolderName }}/{{ . }}{{- end }}"
  167. - name: RESOURCE
  168. value: "both"
  169. {{- if .Values.sidecar.enableUniqueFilenames }}
  170. - name: UNIQUE_FILENAMES
  171. value: "{{ .Values.sidecar.enableUniqueFilenames }}"
  172. {{- end }}
  173. {{- if .Values.sidecar.dashboards.searchNamespace }}
  174. - name: NAMESPACE
  175. value: "{{ .Values.sidecar.dashboards.searchNamespace }}"
  176. {{- end }}
  177. {{- if .Values.sidecar.skipTlsVerify }}
  178. - name: SKIP_TLS_VERIFY
  179. value: "{{ .Values.sidecar.skipTlsVerify }}"
  180. {{- end }}
  181. resources:
  182. {{ toYaml .Values.sidecar.resources | indent 6 }}
  183. volumeMounts:
  184. - name: sc-dashboard-volume
  185. mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
  186. {{- end}}
  187. - name: {{ .Chart.Name }}
  188. {{- if .Values.image.sha }}
  189. image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}@sha256:{{ .Values.image.sha }}"
  190. {{- else }}
  191. image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
  192. {{- end }}
  193. imagePullPolicy: {{ .Values.image.pullPolicy }}
  194. {{- if .Values.command }}
  195. command:
  196. {{- range .Values.command }}
  197. - {{ . }}
  198. {{- end }}
  199. {{- end}}
  200. volumeMounts:
  201. - name: config
  202. mountPath: "/etc/grafana/grafana.ini"
  203. subPath: grafana.ini
  204. {{- if .Values.ldap.enabled }}
  205. - name: ldap
  206. mountPath: "/etc/grafana/ldap.toml"
  207. subPath: ldap.toml
  208. {{- end }}
  209. {{- range .Values.extraConfigmapMounts }}
  210. - name: {{ .name }}
  211. mountPath: {{ .mountPath }}
  212. subPath: {{ .subPath | default "" }}
  213. readOnly: {{ .readOnly }}
  214. {{- end }}
  215. - name: storage
  216. mountPath: "/var/lib/grafana"
  217. {{- if .Values.persistence.subPath }}
  218. subPath: {{ .Values.persistence.subPath }}
  219. {{- end }}
  220. {{- if .Values.dashboards }}
  221. {{- range $provider, $dashboards := .Values.dashboards }}
  222. {{- range $key, $value := $dashboards }}
  223. {{- if (or (hasKey $value "json") (hasKey $value "file")) }}
  224. - name: dashboards-{{ $provider }}
  225. mountPath: "/var/lib/grafana/dashboards/{{ $provider }}/{{ $key }}.json"
  226. subPath: "{{ $key }}.json"
  227. {{- end }}
  228. {{- end }}
  229. {{- end }}
  230. {{- end -}}
  231. {{- if .Values.dashboardsConfigMaps }}
  232. {{- range (keys .Values.dashboardsConfigMaps | sortAlpha) }}
  233. - name: dashboards-{{ . }}
  234. mountPath: "/var/lib/grafana/dashboards/{{ . }}"
  235. {{- end }}
  236. {{- end }}
  237. {{- if .Values.datasources }}
  238. - name: config
  239. mountPath: "/etc/grafana/provisioning/datasources/datasources.yaml"
  240. subPath: datasources.yaml
  241. {{- end }}
  242. {{- if .Values.notifiers }}
  243. - name: config
  244. mountPath: "/etc/grafana/provisioning/notifiers/notifiers.yaml"
  245. subPath: notifiers.yaml
  246. {{- end }}
  247. {{- if .Values.dashboardProviders }}
  248. - name: config
  249. mountPath: "/etc/grafana/provisioning/dashboards/dashboardproviders.yaml"
  250. subPath: dashboardproviders.yaml
  251. {{- end }}
  252. {{- if .Values.sidecar.dashboards.enabled }}
  253. - name: sc-dashboard-volume
  254. mountPath: {{ .Values.sidecar.dashboards.folder | quote }}
  255. {{ if .Values.sidecar.dashboards.SCProvider }}
  256. - name: sc-dashboard-provider
  257. mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml"
  258. subPath: provider.yaml
  259. {{- end}}
  260. {{- end}}
  261. {{- if .Values.sidecar.datasources.enabled }}
  262. - name: sc-datasources-volume
  263. mountPath: "/etc/grafana/provisioning/datasources"
  264. {{- end}}
  265. {{- if .Values.sidecar.notifiers.enabled }}
  266. - name: sc-notifiers-volume
  267. mountPath: "/etc/grafana/provisioning/notifiers"
  268. {{- end}}
  269. {{- range .Values.extraSecretMounts }}
  270. - name: {{ .name }}
  271. mountPath: {{ .mountPath }}
  272. readOnly: {{ .readOnly }}
  273. subPath: {{ .subPath | default "" }}
  274. {{- end }}
  275. {{- range .Values.extraVolumeMounts }}
  276. - name: {{ .name }}
  277. mountPath: {{ .mountPath }}
  278. subPath: {{ .subPath | default "" }}
  279. readOnly: {{ .readOnly }}
  280. {{- end }}
  281. {{- range .Values.extraEmptyDirMounts }}
  282. - name: {{ .name }}
  283. mountPath: {{ .mountPath }}
  284. {{- end }}
  285. ports:
  286. - name: {{ .Values.service.portName }}
  287. containerPort: {{ .Values.service.port }}
  288. protocol: TCP
  289. - name: {{ .Values.podPortName }}
  290. containerPort: 3000
  291. protocol: TCP
  292. env:
  293. {{- if not .Values.env.GF_SECURITY_ADMIN_USER }}
  294. - name: GF_SECURITY_ADMIN_USER
  295. valueFrom:
  296. secretKeyRef:
  297. name: {{ .Values.admin.existingSecret | default (include "grafana.fullname" .) }}
  298. key: {{ .Values.admin.userKey | default "admin-user" }}
  299. {{- end }}
  300. {{- if and (not .Values.env.GF_SECURITY_ADMIN_PASSWORD) (not .Values.env.GF_SECURITY_ADMIN_PASSWORD__FILE) }}
  301. - name: GF_SECURITY_ADMIN_PASSWORD
  302. valueFrom:
  303. secretKeyRef:
  304. name: {{ .Values.admin.existingSecret | default (include "grafana.fullname" .) }}
  305. key: {{ .Values.admin.passwordKey | default "admin-password" }}
  306. {{- end }}
  307. {{- if .Values.plugins }}
  308. - name: GF_INSTALL_PLUGINS
  309. valueFrom:
  310. configMapKeyRef:
  311. name: {{ template "grafana.fullname" . }}
  312. key: plugins
  313. {{- end }}
  314. {{- if .Values.smtp.existingSecret }}
  315. - name: GF_SMTP_USER
  316. valueFrom:
  317. secretKeyRef:
  318. name: {{ .Values.smtp.existingSecret }}
  319. key: {{ .Values.smtp.userKey | default "user" }}
  320. - name: GF_SMTP_PASSWORD
  321. valueFrom:
  322. secretKeyRef:
  323. name: {{ .Values.smtp.existingSecret }}
  324. key: {{ .Values.smtp.passwordKey | default "password" }}
  325. {{- end }}
  326. {{ if .Values.imageRenderer.enabled }}
  327. - name: GF_RENDERING_SERVER_URL
  328. value: http://{{ template "grafana.fullname" . }}-image-renderer.{{ template "grafana.namespace" . }}:{{ .Values.imageRenderer.service.port }}/render
  329. - name: GF_RENDERING_CALLBACK_URL
  330. value: http://{{ template "grafana.fullname" . }}.{{ template "grafana.namespace" . }}:{{ .Values.service.port }}/
  331. {{ end }}
  332. {{- range $key, $value := .Values.envValueFrom }}
  333. - name: {{ $key | quote }}
  334. valueFrom:
  335. {{ toYaml $value | indent 10 }}
  336. {{- end }}
  337. {{- range $key, $value := .Values.env }}
  338. - name: "{{ tpl $key $ }}"
  339. value: "{{ tpl (print $value) $ }}"
  340. {{- end }}
  341. {{- if .Values.envFromSecret }}
  342. envFrom:
  343. - secretRef:
  344. name: {{ tpl .Values.envFromSecret . }}
  345. {{- end }}
  346. {{- if .Values.envRenderSecret }}
  347. envFrom:
  348. - secretRef:
  349. name: {{ template "grafana.fullname" . }}-env
  350. {{- end }}
  351. livenessProbe:
  352. {{ toYaml .Values.livenessProbe | indent 6 }}
  353. readinessProbe:
  354. {{ toYaml .Values.readinessProbe | indent 6 }}
  355. resources:
  356. {{ toYaml .Values.resources | indent 6 }}
  357. {{- with .Values.extraContainers }}
  358. {{ tpl . $ | indent 2 }}
  359. {{- end }}
  360. {{- with .Values.nodeSelector }}
  361. nodeSelector:
  362. {{ toYaml . | indent 2 }}
  363. {{- end }}
  364. {{- with .Values.affinity }}
  365. affinity:
  366. {{ toYaml . | indent 2 }}
  367. {{- end }}
  368. {{- with .Values.tolerations }}
  369. tolerations:
  370. {{ toYaml . | indent 2 }}
  371. {{- end }}
  372. volumes:
  373. - name: config
  374. configMap:
  375. name: {{ template "grafana.fullname" . }}
  376. {{- range .Values.extraConfigmapMounts }}
  377. - name: {{ .name }}
  378. configMap:
  379. name: {{ .configMap }}
  380. {{- end }}
  381. {{- if .Values.dashboards }}
  382. {{- range (keys .Values.dashboards | sortAlpha) }}
  383. - name: dashboards-{{ . }}
  384. configMap:
  385. name: {{ template "grafana.fullname" $ }}-dashboards-{{ . }}
  386. {{- end }}
  387. {{- end }}
  388. {{- if .Values.dashboardsConfigMaps }}
  389. {{ $root := . }}
  390. {{- range $provider, $name := .Values.dashboardsConfigMaps }}
  391. - name: dashboards-{{ $provider }}
  392. configMap:
  393. name: {{ tpl $name $root }}
  394. {{- end }}
  395. {{- end }}
  396. {{- if .Values.ldap.enabled }}
  397. - name: ldap
  398. secret:
  399. {{- if .Values.ldap.existingSecret }}
  400. secretName: {{ .Values.ldap.existingSecret }}
  401. {{- else }}
  402. secretName: {{ template "grafana.fullname" . }}
  403. {{- end }}
  404. items:
  405. - key: ldap-toml
  406. path: ldap.toml
  407. {{- end }}
  408. {{- if and .Values.persistence.enabled (eq .Values.persistence.type "pvc") }}
  409. - name: storage
  410. persistentVolumeClaim:
  411. claimName: {{ .Values.persistence.existingClaim | default (include "grafana.fullname" .) }}
  412. {{- else if and .Values.persistence.enabled (eq .Values.persistence.type "statefulset") }}
  413. # nothing
  414. {{- else }}
  415. - name: storage
  416. emptyDir: {}
  417. {{- end -}}
  418. {{- if .Values.sidecar.dashboards.enabled }}
  419. - name: sc-dashboard-volume
  420. emptyDir: {}
  421. {{- if .Values.sidecar.dashboards.SCProvider }}
  422. - name: sc-dashboard-provider
  423. configMap:
  424. name: {{ template "grafana.fullname" . }}-config-dashboards
  425. {{- end }}
  426. {{- end }}
  427. {{- if .Values.sidecar.datasources.enabled }}
  428. - name: sc-datasources-volume
  429. emptyDir: {}
  430. {{- end -}}
  431. {{- if .Values.sidecar.notifiers.enabled }}
  432. - name: sc-notifiers-volume
  433. emptyDir: {}
  434. {{- end -}}
  435. {{- range .Values.extraSecretMounts }}
  436. {{- if .secretName }}
  437. - name: {{ .name }}
  438. secret:
  439. secretName: {{ .secretName }}
  440. defaultMode: {{ .defaultMode }}
  441. {{- else if .projected }}
  442. - name: {{ .name }}
  443. projected: {{- toYaml .projected | nindent 6 }}
  444. {{- end }}
  445. {{- end }}
  446. {{- range .Values.extraVolumeMounts }}
  447. - name: {{ .name }}
  448. persistentVolumeClaim:
  449. claimName: {{ .existingClaim }}
  450. {{- end }}
  451. {{- range .Values.extraEmptyDirMounts }}
  452. - name: {{ .name }}
  453. emptyDir: {}
  454. {{- end -}}
  455. {{- if .Values.extraContainerVolumes }}
  456. {{ toYaml .Values.extraContainerVolumes | indent 2 }}
  457. {{- end }}
  458. {{- end }}