diff --git a/manifests/monitoring/grafana/datasources.yaml b/manifests/monitoring/grafana/datasources.yaml new file mode 100644 index 00000000..d50bd1e2 --- /dev/null +++ b/manifests/monitoring/grafana/datasources.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: gitops-system +data: + datasources.yaml: |- + apiVersion: 1 + deleteDatasources: + - name: prometheus + datasources: + - name: prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true + editable: true + version: 1 diff --git a/manifests/monitoring/grafana/deployment.yaml b/manifests/monitoring/grafana/deployment.yaml new file mode 100644 index 00000000..19c349a3 --- /dev/null +++ b/manifests/monitoring/grafana/deployment.yaml @@ -0,0 +1,60 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + labels: + app: grafana +spec: + replicas: 1 + selector: + matchLabels: + app: grafana + template: + metadata: + labels: + app: grafana + annotations: + prometheus.io/scrape: 'false' + spec: + containers: + - name: grafana + image: "grafana/grafana:7.1.1" + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 3000 + protocol: TCP + env: + - name: GF_PATHS_PROVISIONING + value: /etc/grafana/provisioning/ + - name: GF_AUTH_BASIC_ENABLED + value: "false" + - name: GF_AUTH_ANONYMOUS_ENABLED + value: "true" + - name: GF_AUTH_ANONYMOUS_ORG_ROLE + value: Admin + - name: GF_DEFAULT_THEME + value: "Light" + volumeMounts: + - name: grafana + mountPath: /var/lib/grafana + - name: dashboards + mountPath: /etc/grafana/dashboards + - name: datasources + mountPath: /etc/grafana/provisioning/datasources + - name: providers + mountPath: /etc/grafana/provisioning/dashboards + resources: + {} + volumes: + - name: grafana + emptyDir: {} + - name: dashboards + configMap: + name: grafana-dashboards + - name: providers + configMap: + name: grafana-providers + - name: datasources + configMap: + name: grafana-datasources diff --git a/manifests/monitoring/grafana/kustomization.yaml b/manifests/monitoring/grafana/kustomization.yaml new file mode 100644 index 00000000..0472ee72 --- /dev/null +++ b/manifests/monitoring/grafana/kustomization.yaml @@ -0,0 +1,13 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: gitops-system +resources: + - service.yaml + - deployment.yaml + - providers.yaml + - datasources.yaml +configMapGenerator: + - name: grafana-dashboards + files: + - dashboards/control-plane.json + diff --git a/manifests/monitoring/grafana/providers.yaml b/manifests/monitoring/grafana/providers.yaml new file mode 100644 index 00000000..ccbd4cc0 --- /dev/null +++ b/manifests/monitoring/grafana/providers.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-providers + namespace: gitops-system +data: + providers.yaml: |+ + apiVersion: 1 + providers: + - name: 'default' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /etc/grafana/dashboards diff --git a/manifests/monitoring/grafana/service.yaml b/manifests/monitoring/grafana/service.yaml new file mode 100644 index 00000000..8c6c2ec5 --- /dev/null +++ b/manifests/monitoring/grafana/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: gitops-system + labels: + app: grafana +spec: + type: ClusterIP + ports: + - port: 3000 + targetPort: http + protocol: TCP + name: http + selector: + app: grafana diff --git a/manifests/monitoring/kustomization.yaml b/manifests/monitoring/kustomization.yaml new file mode 100644 index 00000000..f18a3b2a --- /dev/null +++ b/manifests/monitoring/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: gitops-system +resources: +- prometheus +- grafana diff --git a/manifests/monitoring/prometheus/account.yaml b/manifests/monitoring/prometheus/account.yaml new file mode 100644 index 00000000..81de3172 --- /dev/null +++ b/manifests/monitoring/prometheus/account.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: prometheus + namespace: gitops-system diff --git a/manifests/monitoring/prometheus/deployment.yaml b/manifests/monitoring/prometheus/deployment.yaml new file mode 100644 index 00000000..c57c437d --- /dev/null +++ b/manifests/monitoring/prometheus/deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: prometheus + namespace: gitops-system +spec: + replicas: 1 + selector: + matchLabels: + app: prometheus + template: + metadata: + labels: + app: prometheus + annotations: + appmesh.k8s.aws/sidecarInjectorWebhook: disabled + sidecar.istio.io/inject: "false" + spec: + serviceAccountName: prometheus + containers: + - name: prometheus + image: prom/prometheus:v2.20.0 + imagePullPolicy: IfNotPresent + args: + - '--storage.tsdb.retention=2h' + - '--config.file=/etc/prometheus/prometheus.yml' + ports: + - containerPort: 9090 + name: http + livenessProbe: + httpGet: + path: /-/healthy + port: 9090 + readinessProbe: + httpGet: + path: /-/ready + port: 9090 + resources: + requests: + cpu: 10m + memory: 128Mi + volumeMounts: + - name: config-volume + mountPath: /etc/prometheus + - name: data-volume + mountPath: /prometheus/data + volumes: + - name: config-volume + configMap: + name: prometheus + - name: data-volume + emptyDir: {} \ No newline at end of file diff --git a/manifests/monitoring/prometheus/kustomization.yaml b/manifests/monitoring/prometheus/kustomization.yaml new file mode 100644 index 00000000..4d8de750 --- /dev/null +++ b/manifests/monitoring/prometheus/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: gitops-system +resources: + - account.yaml + - rbac.yaml + - service.yaml + - deployment.yaml +configMapGenerator: + - name: prometheus + files: + - prometheus.yml diff --git a/manifests/monitoring/prometheus/prometheus.yml b/manifests/monitoring/prometheus/prometheus.yml new file mode 100644 index 00000000..ca72bf8b --- /dev/null +++ b/manifests/monitoring/prometheus/prometheus.yml @@ -0,0 +1,52 @@ +global: + scrape_interval: 10s +scrape_configs: + +# Kubernetes API +- job_name: kubernetes-apiserver + kubernetes_sd_configs: + - role: endpoints + namespaces: + names: + - default + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + insecure_skip_verify: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + relabel_configs: + - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] + action: keep + regex: kubernetes;https + +# Kubernetes pods +- job_name: kubernetes-pods + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_pod_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: kubernetes_namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: kubernetes_pod_name diff --git a/manifests/monitoring/prometheus/rbac.yaml b/manifests/monitoring/prometheus/rbac.yaml new file mode 100644 index 00000000..5f796c19 --- /dev/null +++ b/manifests/monitoring/prometheus/rbac.yaml @@ -0,0 +1,32 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: prometheus-gitops-system +rules: + - apiGroups: [""] + resources: + - nodes + - services + - endpoints + - pods + - nodes/proxy + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: + - configmaps + verbs: ["get"] + - nonResourceURLs: ["/metrics"] + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: prometheus-gitops-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus-gitops-system +subjects: +- kind: ServiceAccount + name: prometheus + namespace: gitops-system diff --git a/manifests/monitoring/prometheus/service.yaml b/manifests/monitoring/prometheus/service.yaml new file mode 100644 index 00000000..27ada3c0 --- /dev/null +++ b/manifests/monitoring/prometheus/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: prometheus + namespace: gitops-system +spec: + selector: + app: prometheus + ports: + - name: http + protocol: TCP + port: 9090 \ No newline at end of file