diff --git a/templates/ClusterRole-grafana-SideCar.yaml b/templates/ClusterRole-grafana-SideCar.yaml new file mode 100644 index 0000000..42bf948 --- /dev/null +++ b/templates/ClusterRole-grafana-SideCar.yaml @@ -0,0 +1,18 @@ +{{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled -}} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: graphing + app.kubernetes.io/instance: k8s + app.kubernetes.io/name: grafana + app.kubernetes.io/managed-by: {{ $.Release.Service }} + app.kubernetes.io/part-of: {{ $.Chart.Name }} + app.kubernetes.io/version: {{ $.Chart.Version }} + name: Grafana-Sidecar +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "watch", "list"] +{{- end }} diff --git a/templates/ClusterRoleBinding-Grafana-SideCar.yaml b/templates/ClusterRoleBinding-Grafana-SideCar.yaml new file mode 100644 index 0000000..367f863 --- /dev/null +++ b/templates/ClusterRoleBinding-Grafana-SideCar.yaml @@ -0,0 +1,22 @@ +{{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled -}} +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + app.kubernetes.io/component: graphing + app.kubernetes.io/instance: k8s + app.kubernetes.io/name: grafana + app.kubernetes.io/managed-by: {{ $.Release.Service }} + app.kubernetes.io/part-of: {{ $.Chart.Name }} + app.kubernetes.io/version: {{ $.Chart.Version }} + name: Grafana-Sidecar +roleRef: + kind: ClusterRole + name: Grafana-Sidecar + apiGroup: rbac.authorization.k8s.io +subjects: + - kind: ServiceAccount + name: grafana + namespace: "{{ .Values.nfc_monitoring.grafana.namespace }}" +{{- end }} diff --git a/templates/ConfigMap-GrafanaProvisioning.yaml b/templates/ConfigMap-GrafanaProvisioning.yaml new file mode 100644 index 0000000..6b35943 --- /dev/null +++ b/templates/ConfigMap-GrafanaProvisioning.yaml @@ -0,0 +1,31 @@ +{{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled -}} +--- +# Provisioning config +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: graphing + app.kubernetes.io/instance: k8s + app.kubernetes.io/name: grafana + app.kubernetes.io/managed-by: {{ $.Release.Service }} + app.kubernetes.io/part-of: {{ $.Chart.Name }} + app.kubernetes.io/version: {{ $.Chart.Version }} + name: provisioning-config + namespace: "{{ .Values.nfc_monitoring.grafana.namespace }}" +data: + provisioning.yaml: |- + apiVersion: 1 + providers: + - name: 'configmap-dashboard-provider' + orgId: 1 + folder: '' + folderUid: '' + type: file + disableDeletion: false + updateIntervalSeconds: 10 + allowUiUpdates: false + options: + path: /var/lib/grafana/dashboards + foldersFromFilesStructure: true +{{- end }} diff --git a/templates/Grafana-Grafana.yaml b/templates/Grafana-Grafana.yaml index 737d0b4..8ff2743 100644 --- a/templates/Grafana-Grafana.yaml +++ b/templates/Grafana-Grafana.yaml @@ -55,6 +55,9 @@ spec: spec: affinity: {{- toYaml .Values.nfc_monitoring.grafana.affinity | nindent 12 }} + {{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled }} + automountServiceAccountToken: true + {{ end }} containers: - name: grafana image: "{{ .Values.nfc_monitoring.grafana.image.name }}:{{ .Values.nfc_monitoring.grafana.image.tag }}" @@ -95,9 +98,33 @@ spec: - mountPath: /etc/grafana/provisioning/plugins name: plugin-config readOnly: false + {{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled }} + - mountPath: /etc/grafana/provisioning/dashboards + name: provisioning-config + - mountPath: /var/lib/grafana/dashboards + name: dashboards + + - image: "{{ .Values.nfc_monitoring.additions.dashboard_sidecar.image.name }}:{{ .Values.nfc_monitoring.additions.dashboard_sidecar.image.tag}}" + name: k8s-sidecar + env: + - name: LABEL + value: "{{ .Values.nfc_monitoring.additions.dashboard_sidecar.label_name }}" + - name: LABEL_VALUE + value: "{{ .Values.nfc_monitoring.additions.dashboard_sidecar.label_value }}" + - name: FOLDER + value: /var/lib/grafana/dashboards + - name: NAMESPACE + value: grafana + - name: RESOURCE + value: configmap + volumeMounts: + - mountPath: /var/lib/grafana/dashboards + name: dashboards + {{ end }} + securityContext: + fsGroup: 65534 volumes: - - name: grafana-storage - emptyDir: {} + #- name: grafana-storage - name: plugin-config configMap: # Provide the name of the ConfigMap you want to mount. @@ -106,35 +133,31 @@ spec: items: - key: "oncall-app.yaml" path: "oncall-app.yaml" - # - volumeClaimTemplates: - # - metadata: - # name: data - # labels: - # app.kubernetes.io/name: loki - # app.kubernetes.io/component: logging - # app.kubernetes.io/part-of: {{ $.Chart.Name }} - # app.kubernetes.io/version: {{ $.Chart.Version }} - # app.kubernetes.io/managed-by: {{ $.Release.Service }} - # spec: - # accessModes: - # - "ReadWriteOnce" - # resources: - # requests: - # storage: "5Gi" + {{ if .Values.nfc_monitoring.additions.dashboard_sidecar.enabled }} + - name: dashboards + emptyDir: {} + - name: provisioning-config + configMap: + name: provisioning-config + {{ end }} + - name: grafana-storage + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + pv.beta.kubernetes.io/gid: "65534" + labels: + app.kubernetes.io/name: grafana + app.kubernetes.io/component: graphing + app.kubernetes.io/part-of: {{ $.Chart.Name }} + app.kubernetes.io/version: {{ $.Chart.Version }} + app.kubernetes.io/managed-by: {{ $.Release.Service }} + spec: + accessModes: + - "ReadWriteMany" + resources: + requests: + storage: "5Gi" serviceAccountName: grafana nodeSelector: kubernetes.io/os: linux - - # persistentVolumeClaim: - # metadata: - # labels: - # app.kubernetes.io/component: graphing - # app.kubernetes.io/instance: k8s - # app.kubernetes.io/name: grafana - # app.kubernetes.io/managed-by: {{ $.Release.Service }} - # app.kubernetes.io/part-of: {{ $.Chart.Name }} - # app.kubernetes.io/version: {{ $.Chart.Version }} - # spec: - # resources: - # requests: - # storage: "5Gi" \ No newline at end of file diff --git a/values.yaml b/values.yaml index 9ad1ef0..01fc324 100644 --- a/values.yaml +++ b/values.yaml @@ -195,6 +195,18 @@ nfc_monitoring: matchLabels: app: rook-ceph-mgr + # Add sidcar to grafana pod to load dashboards from configMap + dashboard_sidecar: + + enabled: true + + image: + name: ghcr.io/kiwigrid/k8s-sidecar + tag: '1.24.5' + + label_name: grafana_dashboard + label_value: "1" + loki_instance: image: