aboutsummaryrefslogtreecommitdiffstats
path: root/kubernetes/namespaces/monitoring/prometheus
diff options
context:
space:
mode:
authorGravatar Chris Lovering <[email protected]>2023-08-13 20:01:42 +0100
committerGravatar Chris Lovering <[email protected]>2023-08-14 11:44:03 +0100
commit661f49409e69f5cfafbef4cd41411a72ebc5418d (patch)
tree9ddd7f2a2ab09cadc5b716be00628e19d839ad4d /kubernetes/namespaces/monitoring/prometheus
parentAllow multiple documents within yaml files (diff)
Copy all files from kubernetes repo into this one
This commit is a like-for-like copy of the [kubernetes repo](https://github.com/python-discord/kubernetes) check that repo for comit history prioir to this commit. Co-authored-by: Amrou Bellalouna <[email protected]> Co-authored-by: Bradley Reynolds <[email protected]> Co-authored-by: Chris <[email protected]> Co-authored-by: Chris Lovering <[email protected]> Co-authored-by: ChrisJL <[email protected]> Co-authored-by: Den4200 <[email protected]> Co-authored-by: GDWR <[email protected]> Co-authored-by: Hassan Abouelela <[email protected]> Co-authored-by: Hassan Abouelela <[email protected]> Co-authored-by: jchristgit <[email protected]> Co-authored-by: Joe Banks <[email protected]> Co-authored-by: Joe Banks <[email protected]> Co-authored-by: Joe Banks <[email protected]> Co-authored-by: Johannes Christ <[email protected]> Co-authored-by: Kieran Siek <[email protected]> Co-authored-by: kosayoda <[email protected]> Co-authored-by: ks129 <[email protected]> Co-authored-by: Leon Sand├©y <[email protected]> Co-authored-by: Leon Sand├©y <[email protected]> Co-authored-by: MarkKoz <[email protected]> Co-authored-by: Matteo Bertucci <[email protected]> Co-authored-by: Sebastiaan Zeeff <[email protected]> Co-authored-by: Sebastiaan Zeeff <[email protected]> Co-authored-by: vcokltfre <[email protected]>
Diffstat (limited to 'kubernetes/namespaces/monitoring/prometheus')
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/deployment.yaml58
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/ingress.yaml24
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/prometheus-config.yaml267
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/service-account.yaml32
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/service.yaml11
-rw-r--r--kubernetes/namespaces/monitoring/prometheus/volume.yaml14
6 files changed, 406 insertions, 0 deletions
diff --git a/kubernetes/namespaces/monitoring/prometheus/deployment.yaml b/kubernetes/namespaces/monitoring/prometheus/deployment.yaml
new file mode 100644
index 0000000..5a806ff
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/deployment.yaml
@@ -0,0 +1,58 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: prometheus
+ namespace: monitoring
+spec:
+ strategy:
+ type: Recreate
+ selector:
+ matchLabels:
+ app: prometheus
+ template:
+ metadata:
+ labels:
+ app: prometheus
+ spec:
+ serviceAccountName: prometheus
+ containers:
+ - image: prom/prometheus:latest
+ imagePullPolicy: Always
+ args: [
+ "--storage.tsdb.path", "/opt/prometheus/data",
+ "--config.file", "/etc/prometheus/prometheus.yaml",
+ "--web.external-url", "https://prometheus.pythondiscord.com",
+ "--web.enable-lifecycle",
+ "--web.enable-admin-api",
+ "--web.page-title", "Python Discord Prometheus",
+ "--storage.tsdb.retention.size", "28GB",
+ "--storage.tsdb.retention.time", "100d"
+ ]
+ name: prometheus
+ ports:
+ - name: prometheus
+ containerPort: 9090
+ securityContext:
+ readOnlyRootFilesystem: true
+ volumeMounts:
+ - name: prometheus-data
+ mountPath: /opt/prometheus/data
+ - name: prometheus-config
+ mountPath: /etc/prometheus
+ - name: prometheus-alerts
+ mountPath: /opt/pydis/prometheus/alerts.d
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 2000
+ runAsUser: 1000
+ runAsNonRoot: true
+ volumes:
+ - name: prometheus-data
+ persistentVolumeClaim:
+ claimName: prometheus-storage
+ - name: prometheus-config
+ configMap:
+ name: prometheus-config
+ - name: prometheus-alerts
+ configMap:
+ name: prometheus-alert-rules
diff --git a/kubernetes/namespaces/monitoring/prometheus/ingress.yaml b/kubernetes/namespaces/monitoring/prometheus/ingress.yaml
new file mode 100644
index 0000000..69e240a
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/ingress.yaml
@@ -0,0 +1,24 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ annotations:
+ nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
+ nginx.ingress.kubernetes.io/auth-tls-secret: "kube-system/mtls-client-crt-bundle"
+ nginx.ingress.kubernetes.io/auth-tls-error-page: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
+ name: prometheus
+ namespace: monitoring
+spec:
+ tls:
+ - hosts:
+ - "*.pythondiscord.com"
+ rules:
+ - host: prometheus.pythondiscord.com
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: prometheus
+ port:
+ number: 9090
diff --git a/kubernetes/namespaces/monitoring/prometheus/prometheus-config.yaml b/kubernetes/namespaces/monitoring/prometheus/prometheus-config.yaml
new file mode 100644
index 0000000..7ad047c
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/prometheus-config.yaml
@@ -0,0 +1,267 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: prometheus-config
+ namespace: monitoring
+data:
+ prometheus.yaml: |-
+ # Global config
+ global:
+ scrape_interval: 15s
+
+ rule_files:
+ - /opt/pydis/prometheus/alerts.d/*.yaml
+
+ alerting:
+ alertmanagers:
+ - scheme: http
+ dns_sd_configs:
+ - names:
+ - alertmanager-sd.monitoring.svc.cluster.local
+ type: A
+ port: 9093
+
+ # Scrape configs for running Prometheus on a Kubernetes cluster.
+ # This uses separate scrape configs for cluster components (i.e. API server, node)
+ # and services to allow each to use different authentication configs.
+ #
+ # Kubernetes labels will be added as Prometheus labels on metrics via the
+ # `labelmap` relabeling action.
+ scrape_configs:
+
+ # Scrape config for API servers.
+ #
+ # Kubernetes exposes API servers as endpoints to the default/kubernetes
+ # service so this uses `endpoints` role and uses relabelling to only keep
+ # the endpoints associated with the default/kubernetes service using the
+ # default named port `https`. This works for single API server deployments as
+ # well as HA API server deployments.
+ - job_name: 'kubernetes-apiservers'
+ kubernetes_sd_configs:
+ - role: endpoints
+
+ scheme: https
+ tls_config:
+ ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+ # Using endpoints to discover kube-apiserver targets finds the pod IP
+ # (host IP since apiserver uses host network) which is not used in
+ # the server certificate.
+ insecure_skip_verify: true
+ bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+
+ # Keep only the default/kubernetes service endpoints for the https port. This
+ # will add targets for each API server which Kubernetes adds an endpoint to
+ # the default/kubernetes service.
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
+ action: keep
+ regex: default;kubernetes;https
+ - replacement: apiserver
+ action: replace
+ target_label: job
+
+ # Scrape config for node (i.e. kubelet) /metrics (e.g. 'kubelet_'). Explore
+ # metrics from a node by scraping kubelet (127.0.0.1:10250/metrics).
+ - job_name: 'kubelet'
+ kubernetes_sd_configs:
+ - role: node
+
+ scheme: https
+ tls_config:
+ ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+ # Kubelet certs don't have any fixed IP SANs
+ insecure_skip_verify: true
+ bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+
+ relabel_configs:
+ - action: labelmap
+ regex: __meta_kubernetes_node_label_(.+)
+ - replacement: 'monitoring'
+ target_label: kubernetes_namespace
+
+ metric_relabel_configs:
+ - source_labels:
+ - namespace
+ action: replace
+ regex: (.+)
+ target_label: kubernetes_namespace
+
+ # Scrape config for Kubelet cAdvisor. Explore metrics from a node by
+ # scraping kubelet (127.0.0.1:10250/metrics/cadvisor).
+ - job_name: 'kubernetes-cadvisor'
+ kubernetes_sd_configs:
+ - role: node
+
+ scheme: https
+ metrics_path: /metrics/cadvisor
+ tls_config:
+ # Kubelet certs don't have any fixed IP SANs
+ insecure_skip_verify: true
+ ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+ bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+
+ relabel_configs:
+ - action: labelmap
+ regex: __meta_kubernetes_node_label_(.+)
+ metric_relabel_configs:
+ - source_labels:
+ - namespace
+ action: replace
+ target_label: kubernetes_namespace
+ - source_labels:
+ - pod
+ regex: (.*)
+ replacement: $1
+ action: replace
+ target_label: pod_name
+ - source_labels:
+ - container
+ regex: (.*)
+ replacement: $1
+ action: replace
+ target_label: container_name
+
+ # Scrap etcd metrics from masters via etcd-scraper-proxy
+ - job_name: 'etcd'
+ kubernetes_sd_configs:
+ - role: pod
+ scheme: http
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_namespace]
+ action: keep
+ regex: 'kube-system'
+ - source_labels: [__meta_kubernetes_pod_label_component]
+ action: keep
+ regex: 'etcd-scraper-proxy'
+ - action: labelmap
+ regex: __meta_kubernetes_pod_label_(.+)
+
+ # Scrape config for service endpoints.
+ #
+ # The relabeling allows the actual service scrape endpoint to be configured
+ # via the following annotations:
+ #
+ # * `prometheus.io/scrape`: Only scrape services that have a value of `true`
+ # * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need
+ # to set this to `https` & most likely set the `tls_config` of the scrape config.
+ # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
+ # * `prometheus.io/port`: If the metrics are exposed on a different port to the
+ # service then set this appropriately.
+ - job_name: 'kubernetes-service-endpoints'
+
+ kubernetes_sd_configs:
+ - role: endpoints
+
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
+ action: keep
+ regex: true
+ - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
+ action: replace
+ target_label: __scheme__
+ regex: (https?)
+ - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
+ action: replace
+ target_label: __metrics_path__
+ regex: (.+)
+ - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
+ action: replace
+ target_label: __address__
+ regex: ([^:]+)(?::\d+)?;(\d+)
+ replacement: $1:$2
+ - action: labelmap
+ regex: __meta_kubernetes_service_label_(.+)
+ - source_labels: [__meta_kubernetes_service_name]
+ action: replace
+ target_label: job
+ - action: replace
+ source_labels:
+ - __meta_kubernetes_pod_node_name
+ target_label: kubernetes_node
+ - source_labels: [__meta_kubernetes_namespace]
+ action: replace
+ target_label: kubernetes_namespace
+ metric_relabel_configs:
+ - source_labels:
+ - namespace
+ action: replace
+ regex: (.+)
+ target_label: kubernetes_namespace
+
+ # Example scrape config for probing services via the Blackbox Exporter.
+ #
+ # The relabeling allows the actual service scrape endpoint to be configured
+ # via the following annotations:
+ #
+ # * `prometheus.io/probe`: Only probe services that have a value of `true`
+ - job_name: 'kubernetes-services'
+
+ metrics_path: /probe
+ params:
+ module: [http_2xx]
+
+ kubernetes_sd_configs:
+ - role: service
+
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
+ action: keep
+ regex: true
+ - source_labels: [__address__]
+ target_label: __param_target
+ - target_label: __address__
+ replacement: blackbox
+ - source_labels: [__param_target]
+ target_label: instance
+ - action: labelmap
+ regex: __meta_kubernetes_service_label_(.+)
+ - source_labels: [__meta_kubernetes_service_name]
+ target_label: job
+ metric_relabel_configs:
+ - source_labels:
+ - namespace
+ action: replace
+ regex: (.+)
+ target_label: kubernetes_namespace
+
+ # Example scrape config for pods
+ #
+ # The relabeling allows the actual pod scrape endpoint to be configured via the
+ # following annotations:
+ #
+ # * `prometheus.io/scrape`: Only scrape pods that have a value of `true`
+ # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
+ # * `prometheus.io/port`: Scrape the pod on the indicated port instead of the
+ # pod's declared ports (default is a port-free target if none are declared).
+ - job_name: 'kubernetes-pods'
+
+ kubernetes_sd_configs:
+ - role: pod
+
+ relabel_configs:
+ - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
+ action: keep
+ regex: true
+ - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
+ action: replace
+ target_label: __metrics_path__
+ regex: (.+)
+ - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
+ action: replace
+ regex: ([^:]+)(?::\d+)?;(\d+)
+ replacement: $1:$2
+ target_label: __address__
+ - action: labelmap
+ regex: __meta_kubernetes_pod_label_(.+)
+ - source_labels: [__meta_kubernetes_namespace]
+ action: replace
+ target_label: kubernetes_namespace
+ - source_labels: [__meta_kubernetes_pod_name]
+ action: replace
+ target_label: kubernetes_pod_name
+ metric_relabel_configs:
+ - source_labels:
+ - namespace
+ action: replace
+ regex: (.+)
+ target_label: kubernetes_namespace
diff --git a/kubernetes/namespaces/monitoring/prometheus/service-account.yaml b/kubernetes/namespaces/monitoring/prometheus/service-account.yaml
new file mode 100644
index 0000000..00cf0c2
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/service-account.yaml
@@ -0,0 +1,32 @@
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: prometheus
+rules:
+- apiGroups: ["*"]
+ resources: ["*"]
+ verbs: ["get", "list", "watch"]
+- nonResourceURLs:
+ - "/metrics"
+ verbs:
+ - get
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: prometheus
+ namespace: monitoring
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: prometheus
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: prometheus
+subjects:
+ - kind: ServiceAccount
+ name: prometheus
+ namespace: monitoring
diff --git a/kubernetes/namespaces/monitoring/prometheus/service.yaml b/kubernetes/namespaces/monitoring/prometheus/service.yaml
new file mode 100644
index 0000000..5ec3a21
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/service.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: prometheus
+ namespace: monitoring
+spec:
+ selector:
+ app: prometheus
+ ports:
+ - port: 9090
+ targetPort: 9090
diff --git a/kubernetes/namespaces/monitoring/prometheus/volume.yaml b/kubernetes/namespaces/monitoring/prometheus/volume.yaml
new file mode 100644
index 0000000..4468a20
--- /dev/null
+++ b/kubernetes/namespaces/monitoring/prometheus/volume.yaml
@@ -0,0 +1,14 @@
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: prometheus-storage
+ namespace: monitoring
+ labels:
+ app: prometheus
+spec:
+ storageClassName: linode-block-storage-retain
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 30Gi