From 286d2827ad1c30f95814494425bcda96a8a9874d Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 19 Sep 2023 15:05:49 +0930 Subject: [PATCH] feat: grafana deployment !1 --- templates/ConfigMap-Grafana.yaml | 130 ++++++++++++++++++++++++++ templates/Grafana-Grafana.yaml | 130 ++++++++++++++++++++++++++ templates/Service-Grafana.yaml | 30 ++++++ templates/ServiceAccount-Grafana.yaml | 14 +++ templates/ServiceMonitor-Grafana.yaml | 37 ++++++++ 5 files changed, 341 insertions(+) create mode 100644 templates/ConfigMap-Grafana.yaml create mode 100644 templates/Grafana-Grafana.yaml create mode 100644 templates/Service-Grafana.yaml create mode 100644 templates/ServiceAccount-Grafana.yaml create mode 100644 templates/ServiceMonitor-Grafana.yaml diff --git a/templates/ConfigMap-Grafana.yaml b/templates/ConfigMap-Grafana.yaml new file mode 100644 index 0000000..eeb28f4 --- /dev/null +++ b/templates/ConfigMap-Grafana.yaml @@ -0,0 +1,130 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-config + namespace: "{{ .Values.nfc_monitoring.grafana.namespace }}" + 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 }} +data: + prometheus.yaml: |- + { + "apiVersion": 1, + "datasources": [ + { + "access":"proxy", + "editable": true, + "name": "prometheus", + "orgId": 1, + "type": "prometheus", + "url": "http://prometheus-config-map.monitoring.svc:9090", + "version": 1 + } + ] + } + + oncall-app.yaml: |- + apiVersion: 1 + apps: + - type: grafana-oncall-app + name: grafana-oncall-app + disabled: false + jsonData: + #user: admin + grafanaUrl: http://grafana.monitoring.svc:3000 + onCallApiUrl: http://oncall.monitoring.svc:8080 + secureJsonData: + #password: admin + onCallInvitationToken: yaD3a6dkYV0CFinTlMPb42Mi9 + #http://127.0.0.1:8080/integrations/v1/alertmanager/yaD3a6dkYV0CFinTlMPb42Mi9/ + + +--- + +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: grafana-alertmanager + namespace: monitoring +data: + alertmanager.yaml: |- + { + "template_files": {}, + "template_file_provenances": {}, + "alertmanager_config": { + "route": { + "receiver": "Grafana Alerting 😊", + "group_by": [ + "grafana_folder", + "alertname" + ], + "routes": [ + { + "receiver": "Grafana Alerting 😊", + "object_matchers": [ + [ + "severity", + "!=", + "" + ], + [ + "severity", + "=", + "critical" + ], + [ + "severity", + "=", + "info" + ], + [ + "severity", + "=", + "warning" + ] + ], + "continue": true, + "group_wait": "1s", + "group_interval": "2s", + "repeat_interval": "15m" + } + ], + "group_wait": "1s", + "group_interval": "2s", + "repeat_interval": "3m" + }, + "templates": null, + "receivers": [ + { + "name": "Grafana Alerting 😊", + "grafana_managed_receiver_configs": [ + { + "uid": "4dqvJSfVkz", + "name": "Grafana Alerting 😊", + "type": "webhook", + "disableResolveMessage": false, + "settings": { + "httpMethod": "POST", + "url": "http://host.docker.internal:8080/integrations/v1/grafana_alerting/dXStYoK9Z15VZW8R8AtfyIwtu/" + }, + "secureFields": {} + } + ] + } + ] + } + } + +--- \ No newline at end of file diff --git a/templates/Grafana-Grafana.yaml b/templates/Grafana-Grafana.yaml new file mode 100644 index 0000000..f0aca0f --- /dev/null +++ b/templates/Grafana-Grafana.yaml @@ -0,0 +1,130 @@ +--- +apiVersion: grafana.integreatly.org/v1beta1 +kind: Grafana +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 + namespace: "{{ .Values.nfc_monitoring.grafana.namespace }}" +spec: + config: + log: + mode: "console" + auth: + disable_login_form: "false" + security: + admin_user: "{{ .Values.nfc_monitoring.grafana.admin_user }}" + admin_password: "{{ .Values.nfc_monitoring.grafana.admin_password }}" + deployment: + 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: + replicas: {{ .Values.nfc_monitoring.grafana.replicas | int }} + selector: + matchLabels: + 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 }} + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + template: + 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: + containers: + - name: grafana + image: "{{ .Values.nfc_monitoring.grafana.image.name }}:{{ .Values.nfc_monitoring.grafana.image.tag }}" + env: + - name: GF_INSTALL_PLUGINS + value: agenty-flowcharting-panel 0.9.1, ddurieux-glpi-app 1.3.1, grafana-oncall-app + - name: GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS + value: grafana-oncall-app 1.1.38 + - name: GF_ANALYTICS_REPORTING_ENABLED + value: 'false' + imagePullPolicy: IfNotPresent + ports: + - containerPort: 3000 + name: grafana-http + readinessProbe: + failureThreshold: 3 + resources: + limits: + cpu: 2000m + memory: 1Gi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: false + volumeMounts: + - mountPath: /var/lib/grafana + name: grafana-storage + - mountPath: /etc/grafana/provisioning/plugins + name: plugin-config + readOnly: false + volumes: + - name: grafana-storage + emptyDir: {} + - name: plugin-config + configMap: + # Provide the name of the ConfigMap you want to mount. + name: grafana-config + # An array of keys from the ConfigMap to create as files + 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" + 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/templates/Service-Grafana.yaml b/templates/Service-Grafana.yaml new file mode 100644 index 0000000..019adc1 --- /dev/null +++ b/templates/Service-Grafana.yaml @@ -0,0 +1,30 @@ +--- + +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: {{ .Values.nfc_monitoring.grafana.namespace }} + 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: + selector: + app.kubernetes.io/component: graphing + app.kubernetes.io/instance: k8s + app.kubernetes.io/name: grafana + app.kubernetes.io/part-of: {{ $.Chart.Name }} + #type: NodePort + #type: LoadBalancer + #clusterIP: None + ports: + - name: grafana + port: 3000 + targetPort: grafana-http + #nodePort: 3000 + #type: LoadBalancer + sessionAffinity: ClientIP diff --git a/templates/ServiceAccount-Grafana.yaml b/templates/ServiceAccount-Grafana.yaml new file mode 100644 index 0000000..41eeb9e --- /dev/null +++ b/templates/ServiceAccount-Grafana.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: v1 +automountServiceAccountToken: false +kind: ServiceAccount +metadata: + name: grafana + namespace: {{ .Values.nfc_monitoring.grafana.namespace }} + 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 }} diff --git a/templates/ServiceMonitor-Grafana.yaml b/templates/ServiceMonitor-Grafana.yaml new file mode 100644 index 0000000..8a7bdb9 --- /dev/null +++ b/templates/ServiceMonitor-Grafana.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +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 + namespace: {{ .Values.nfc_monitoring.grafana.namespace }} +spec: + endpoints: + - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + interval: 15s + port: grafana + relabelings: + - action: replace + regex: (.*) + replacement: $1 + sourceLabels: + - __meta_kubernetes_pod_label_app_kubernetes_io_instance + targetLabel: instance + scheme: http + # tlsConfig: + # insecureSkipVerify: true + targetLabels: + - cluster + jobLabel: app.kubernetes.io/name + selector: + matchLabels: + app.kubernetes.io/component: graphing + app.kubernetes.io/instance: k8s + app.kubernetes.io/name: grafana + app.kubernetes.io/part-of: {{ $.Chart.Name }}