From f1797c94ec223a3ea8155fcace4c906c7e3956eb Mon Sep 17 00:00:00 2001 From: Vegard Hagen Date: Sun, 21 Jul 2024 19:32:57 +0200 Subject: [PATCH] feat(monitoring): install kube-prometheus-stack --- remodel/k8s/infra/monitoring/project.yaml | 3 ++ .../prometheus-stack/http-route.yaml | 19 +++++++++++ .../prometheus-stack/ingress-route.yaml | 32 +++++++++++++++++++ .../kube-prometheus-stack.yaml | 29 +++++++++++++++++ .../prometheus-stack/kustomization.yaml | 7 ++++ .../infra/monitoring/prometheus-stack/ns.yaml | 4 +++ .../monitoring/prometheus-stack/values.yaml | 15 +++++++++ remodel/tofu/kubernetes/main.tf | 4 +++ 8 files changed, 113 insertions(+) create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/http-route.yaml create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/ingress-route.yaml create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/kube-prometheus-stack.yaml create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/kustomization.yaml create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/ns.yaml create mode 100644 remodel/k8s/infra/monitoring/prometheus-stack/values.yaml diff --git a/remodel/k8s/infra/monitoring/project.yaml b/remodel/k8s/infra/monitoring/project.yaml index 8266a5a..2980bf7 100644 --- a/remodel/k8s/infra/monitoring/project.yaml +++ b/remodel/k8s/infra/monitoring/project.yaml @@ -6,11 +6,14 @@ metadata: spec: sourceRepos: - 'https://github.com/vehagn/homelab' + - 'https://prometheus-community.github.io/helm-charts' destinations: - namespace: 'argocd' server: '*' - namespace: 'kube-system' server: '*' + - namespace: 'monitoring' + server: '*' clusterResourceWhitelist: - group: '*' kind: '*' diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/http-route.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/http-route.yaml new file mode 100644 index 0000000..3508c15 --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/http-route.yaml @@ -0,0 +1,19 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: monitoring + namespace: monitoring +spec: + parentRefs: + - name: stonegarden + namespace: gateway + hostnames: + - "grafana.stonegarden.dev" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: kube-prometheus-stack-grafana + port: 80 diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/ingress-route.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/ingress-route.yaml new file mode 100644 index 0000000..562d5f3 --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/ingress-route.yaml @@ -0,0 +1,32 @@ +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: monitoring + namespace: monitoring + labels: + app: traefik +spec: + entryPoints: + - websecure + routes: + - match: Host(`prometheus.stonegarden.dev`) + kind: Rule + services: + - name: kube-prometheus-stack-prometheus + port: http-web # 9090 + middlewares: + - name: traefik-forward-auth + - match: Host(`grafana.stonegarden.dev`) + kind: Rule + services: + - name: kube-prometheus-stack-grafana + port: http-web # 80 + middlewares: + - name: traefik-forward-auth + - match: Host(`alertmanager.stonegarden.dev`) + kind: Rule + services: + - name: kube-prometheus-stack-alertmanager + port: http-web # 9093 + middlewares: + - name: traefik-forward-auth \ No newline at end of file diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/kube-prometheus-stack.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/kube-prometheus-stack.yaml new file mode 100644 index 0000000..c58ba6d --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/kube-prometheus-stack.yaml @@ -0,0 +1,29 @@ +# Need an extra Argo CD Application here to do server side apply +# https://github.com/prometheus-community/helm-charts/issues/3345 +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kube-prometheus-stack + namespace: argocd +spec: + project: monitoring + sources: + - repoURL: https://prometheus-community.github.io/helm-charts + chart: kube-prometheus-stack + targetRevision: 61.3.2 + helm: + valueFiles: + - $values/remodel/k8s/infra/monitoring/prometheus-stack/values.yaml + - repoURL: https://github.com/vehagn/homelab + targetRevision: remodel + ref: values + destination: + name: in-cluster + namespace: monitoring + syncPolicy: + automated: + selfHeal: true + prune: true + syncOptions: + - ApplyOutOfSyncOnly=true + - ServerSideApply=true \ No newline at end of file diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/kustomization.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/kustomization.yaml new file mode 100644 index 0000000..8203d88 --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - ns.yaml + - kube-prometheus-stack.yaml + - http-route.yaml diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/ns.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/ns.yaml new file mode 100644 index 0000000..d325236 --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/ns.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: monitoring diff --git a/remodel/k8s/infra/monitoring/prometheus-stack/values.yaml b/remodel/k8s/infra/monitoring/prometheus-stack/values.yaml new file mode 100644 index 0000000..2e68b8f --- /dev/null +++ b/remodel/k8s/infra/monitoring/prometheus-stack/values.yaml @@ -0,0 +1,15 @@ +prometheus: + prometheusSpec: + storageSpec: + volumeClaimTemplate: + spec: + storageClassName: proxmox-csi + volumeName: pv-prometheus + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10G + selector: + matchLabels: + app: prometheus diff --git a/remodel/tofu/kubernetes/main.tf b/remodel/tofu/kubernetes/main.tf index aa39bbc..61676f5 100644 --- a/remodel/tofu/kubernetes/main.tf +++ b/remodel/tofu/kubernetes/main.tf @@ -133,5 +133,9 @@ module "volumes" { node = "abel" size = "12G" } + pv-prometheus = { + node = "abel" + size = "10G" + } } }