Merge pull request 'add-push-gateway & remove deprecated fns' (#6) from add-push-gateway into main
Reviewed-on: #6
This commit is contained in:
commit
01c395668f
15 changed files with 126 additions and 54 deletions
project.clj
src
main
cljc/dda/c4k_common
resources/monitoring
test
cljc/dda/c4k_common
resources/namespace-test
|
@ -4,7 +4,7 @@
|
||||||
:license {:name "Apache License, Version 2.0"
|
:license {:name "Apache License, Version 2.0"
|
||||||
:url "https://www.apache.org/licenses/LICENSE-2.0.html"}
|
:url "https://www.apache.org/licenses/LICENSE-2.0.html"}
|
||||||
:dependencies [[org.clojure/clojure "1.12.0"]
|
:dependencies [[org.clojure/clojure "1.12.0"]
|
||||||
[org.clojure/tools.reader "1.5.0"]
|
[org.clojure/tools.reader "1.5.2"]
|
||||||
[aero "1.1.6"]
|
[aero "1.1.6"]
|
||||||
[orchestra "2021.01.01-1"]
|
[orchestra "2021.01.01-1"]
|
||||||
[expound "0.9.0"]
|
[expound "0.9.0"]
|
||||||
|
@ -27,9 +27,9 @@
|
||||||
:main dda.c4k-common.uberjar
|
:main dda.c4k-common.uberjar
|
||||||
:uberjar-name "c4k-common-standalone.jar"
|
:uberjar-name "c4k-common-standalone.jar"
|
||||||
:dependencies [[org.clojure/tools.cli "1.1.230"]
|
:dependencies [[org.clojure/tools.cli "1.1.230"]
|
||||||
[ch.qos.logback/logback-classic "1.5.16"
|
[ch.qos.logback/logback-classic "1.5.17"
|
||||||
:exclusions [com.sun.mail/javax.mail]]
|
:exclusions [com.sun.mail/javax.mail]]
|
||||||
[org.slf4j/jcl-over-slf4j "2.0.16"]]}}
|
[org.slf4j/jcl-over-slf4j "2.0.17"]]}}
|
||||||
:release-tasks [["test"]
|
:release-tasks [["test"]
|
||||||
["vcs" "assert-committed"]
|
["vcs" "assert-committed"]
|
||||||
["change" "version" "leiningen.release/bump-version" "release"]
|
["change" "version" "leiningen.release/bump-version" "release"]
|
||||||
|
|
|
@ -20,29 +20,6 @@
|
||||||
|
|
||||||
(def filter-regex-string int/filter-regex-string)
|
(def filter-regex-string int/filter-regex-string)
|
||||||
|
|
||||||
|
|
||||||
(defn-spec ^{:deprecated "6.4.1"} generate seq?
|
|
||||||
"use generate-config and generate-auth instead"
|
|
||||||
[config ::mon-cfg
|
|
||||||
auth ::mon-auth]
|
|
||||||
[(yaml/load-as-edn "monitoring/namespace.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/prometheus-cluster-role.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/prometheus-cluster-role-binding.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/prometheus-service.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/prometheus-service-account.yaml")
|
|
||||||
(int/generate-config-secret config auth)
|
|
||||||
(yaml/load-as-edn "monitoring/prometheus-deployment.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/node-exporter-service-account.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/node-exporter-cluster-role.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/node-exporter-cluster-role-binding.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/node-exporter-daemon-set.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/node-exporter-service.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role-binding.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-deployment.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-service-account.yaml")
|
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")])
|
|
||||||
|
|
||||||
(defn-spec generate-config seq?
|
(defn-spec generate-config seq?
|
||||||
[]
|
[]
|
||||||
[(yaml/load-as-edn "monitoring/namespace.yaml")
|
[(yaml/load-as-edn "monitoring/namespace.yaml")
|
||||||
|
@ -60,7 +37,10 @@
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role.yaml")
|
(yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role.yaml")
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-deployment.yaml")
|
(yaml/load-as-edn "monitoring/kube-state-metrics-deployment.yaml")
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-service-account.yaml")
|
(yaml/load-as-edn "monitoring/kube-state-metrics-service-account.yaml")
|
||||||
(yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")])
|
(yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")
|
||||||
|
(yaml/load-as-edn "monitoring/push-gw-deployment.yaml")
|
||||||
|
(yaml/load-as-edn "monitoring/push-gw-service-account.yaml")
|
||||||
|
(yaml/load-as-edn "monitoring/push-gw-service.yaml")])
|
||||||
|
|
||||||
(defn-spec generate-auth seq?
|
(defn-spec generate-auth seq?
|
||||||
[config ::mon-cfg
|
[config ::mon-cfg
|
||||||
|
|
|
@ -31,6 +31,9 @@
|
||||||
"monitoring/prometheus-prometheus.yaml" (rc/inline "monitoring/prometheus-prometheus.yaml")
|
"monitoring/prometheus-prometheus.yaml" (rc/inline "monitoring/prometheus-prometheus.yaml")
|
||||||
"monitoring/prometheus-service-account.yaml" (rc/inline "monitoring/prometheus-service-account.yaml")
|
"monitoring/prometheus-service-account.yaml" (rc/inline "monitoring/prometheus-service-account.yaml")
|
||||||
"monitoring/prometheus-service.yaml" (rc/inline "monitoring/prometheus-service.yaml")
|
"monitoring/prometheus-service.yaml" (rc/inline "monitoring/prometheus-service.yaml")
|
||||||
|
"monitoring/push-gw-deployment.yaml" (rc/inline "monitoring/push-gw-deployment.yaml")
|
||||||
|
"monitoring/push-gw-service-account.yaml" (rc/inline "monitoring/push-gw-service-account.yaml")
|
||||||
|
"monitoring/push-gw-service.yaml" (rc/inline "monitoring/push-gw-service.yaml")
|
||||||
(throw (js/Error. (str "Undefined Resource: " resource-name))))))
|
(throw (js/Error. (str "Undefined Resource: " resource-name))))))
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +61,7 @@
|
||||||
"traefik_tls_certs_not_after")
|
"traefik_tls_certs_not_after")
|
||||||
:kube-state-regex (str "kube_pod_container_status_restarts_total|"
|
:kube-state-regex (str "kube_pod_container_status_restarts_total|"
|
||||||
"kube_pod_status_reason|kube_node_status_capacity|kube_node_status_allocatable|"
|
"kube_pod_status_reason|kube_node_status_capacity|kube_node_status_allocatable|"
|
||||||
"kube_cronjob_status_active|kube_job_status_failed")})
|
"kube_cronjob_status_active|kube_job_.*")})
|
||||||
|
|
||||||
(def filter-regex-string
|
(def filter-regex-string
|
||||||
(str/join "|" (vals metric-regex)))
|
(str/join "|" (vals metric-regex)))
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#?(:clj [orchestra.core :refer [defn-spec]]
|
#?(:clj [orchestra.core :refer [defn-spec]]
|
||||||
:cljs [orchestra.core :refer-macros [defn-spec]])
|
:cljs [orchestra.core :refer-macros [defn-spec]])
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
|
[dda.c4k-common.predicate :as cp]
|
||||||
|
[dda.c4k-common.yaml :as yaml]
|
||||||
[dda.c4k-common.namespace.namespace-internal :as int]))
|
[dda.c4k-common.namespace.namespace-internal :as int]))
|
||||||
|
|
||||||
(s/def ::namespace ::int/namespace)
|
(s/def ::namespace ::int/namespace)
|
||||||
|
@ -17,3 +19,10 @@
|
||||||
(let [final-config (merge default-config
|
(let [final-config (merge default-config
|
||||||
config)]
|
config)]
|
||||||
[(int/generate-namespace final-config)]))
|
[(int/generate-namespace final-config)]))
|
||||||
|
|
||||||
|
(defn-spec load-and-adjust-namespace cp/map-or-seq?
|
||||||
|
[file string?
|
||||||
|
namespace ::namespace]
|
||||||
|
(->
|
||||||
|
(yaml/load-as-edn file)
|
||||||
|
(assoc-in [:metadata :namespace] namespace)))
|
||||||
|
|
|
@ -79,20 +79,6 @@
|
||||||
config)]
|
config)]
|
||||||
(int/generate-service final-config)))
|
(int/generate-service final-config)))
|
||||||
|
|
||||||
|
|
||||||
(defn-spec ^{:deprecated "6.4.1"} generate seq?
|
|
||||||
"use generate-config and generate-auth instead"
|
|
||||||
[config pg-config?
|
|
||||||
auth pg-auth?]
|
|
||||||
(let [final-config (merge default-config
|
|
||||||
config)]
|
|
||||||
[(int/generate-secret final-config auth)
|
|
||||||
(int/generate-persistent-volume final-config)
|
|
||||||
(int/generate-configmap final-config)
|
|
||||||
(int/generate-pvc final-config)
|
|
||||||
(int/generate-deployment final-config)
|
|
||||||
(int/generate-service final-config)]))
|
|
||||||
|
|
||||||
(defn-spec generate-config seq?
|
(defn-spec generate-config seq?
|
||||||
[config pg-config?]
|
[config pg-config?]
|
||||||
(let [final-config (merge default-config
|
(let [final-config (merge default-config
|
||||||
|
|
|
@ -4,7 +4,6 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/component: exporter
|
app.kubernetes.io/component: exporter
|
||||||
app.kubernetes.io/name: kube-state-metrics
|
app.kubernetes.io/name: kube-state-metrics
|
||||||
app.kubernetes.io/version: 2.7.0
|
|
||||||
name: kube-state-metrics
|
name: kube-state-metrics
|
||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
spec:
|
spec:
|
||||||
|
@ -17,13 +16,12 @@ spec:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/component: exporter
|
app.kubernetes.io/component: exporter
|
||||||
app.kubernetes.io/name: kube-state-metrics
|
app.kubernetes.io/name: kube-state-metrics
|
||||||
app.kubernetes.io/version: 2.7.0
|
|
||||||
spec:
|
spec:
|
||||||
serviceAccountName: kube-state-metrics
|
serviceAccountName: kube-state-metrics
|
||||||
automountServiceAccountToken: true
|
automountServiceAccountToken: true
|
||||||
containers:
|
containers:
|
||||||
- name: kube-state-metrics
|
- name: kube-state-metrics
|
||||||
image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.7.0
|
image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
|
|
|
@ -19,7 +19,7 @@ spec:
|
||||||
enableServiceLinks: true
|
enableServiceLinks: true
|
||||||
containers:
|
containers:
|
||||||
- name: prometheus
|
- name: prometheus
|
||||||
image: "quay.io/prometheus/prometheus:v2.39.1"
|
image: "quay.io/prometheus/prometheus:v3.2.1"
|
||||||
imagePullPolicy: "IfNotPresent"
|
imagePullPolicy: "IfNotPresent"
|
||||||
args:
|
args:
|
||||||
- --config.file=/etc/prometheus/prometheus.yaml
|
- --config.file=/etc/prometheus/prometheus.yaml
|
||||||
|
|
|
@ -62,3 +62,8 @@ scrape_configs:
|
||||||
- job_name: "prometheus"
|
- job_name: "prometheus"
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ["localhost:9090"]
|
- targets: ["localhost:9090"]
|
||||||
|
|
||||||
|
- job_name: pushgateway
|
||||||
|
honor_labels: true
|
||||||
|
static_configs:
|
||||||
|
- targets: ['prometheus-pushgateway:9091']
|
||||||
|
|
52
src/main/resources/monitoring/push-gw-deployment.yaml
Normal file
52
src/main/resources/monitoring/push-gw-deployment.yaml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
||||||
|
name: prometheus-pushgateway
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
||||||
|
spec:
|
||||||
|
serviceAccountName: prometheus-pushgateway
|
||||||
|
automountServiceAccountToken: true
|
||||||
|
containers:
|
||||||
|
- name: pushgateway
|
||||||
|
image: "quay.io/prometheus/pushgateway:v1.11.0"
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
containerPort: 9091
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /-/healthy
|
||||||
|
port: 9091
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
timeoutSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /-/ready
|
||||||
|
port: 9091
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
timeoutSeconds: 10
|
||||||
|
volumeMounts:
|
||||||
|
- name: storage-volume
|
||||||
|
mountPath: "/data"
|
||||||
|
subPath: ""
|
||||||
|
securityContext:
|
||||||
|
fsGroup: 65534
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 65534
|
||||||
|
volumes:
|
||||||
|
- name: storage-volume
|
||||||
|
emptyDir: {}
|
|
@ -0,0 +1,8 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
||||||
|
name: prometheus-pushgateway
|
||||||
|
namespace: monitoring
|
||||||
|
automountServiceAccountToken: true
|
16
src/main/resources/monitoring/push-gw-service.yaml
Normal file
16
src/main/resources/monitoring/push-gw-service.yaml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
||||||
|
name: prometheus-pushgateway
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 9091
|
||||||
|
targetPort: 9091
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: prometheus-pushgateway
|
|
@ -19,9 +19,7 @@
|
||||||
|
|
||||||
|
|
||||||
(deftest should-generate
|
(deftest should-generate
|
||||||
(is (= 17
|
(is (= 19
|
||||||
(count (cut/generate conf auth))))
|
|
||||||
(is (= 16
|
|
||||||
(count (cut/generate-config))))
|
(count (cut/generate-config))))
|
||||||
(is (= 1
|
(is (= 1
|
||||||
(count (cut/generate-auth conf auth)))))
|
(count (cut/generate-auth conf auth)))))
|
||||||
|
|
|
@ -2,10 +2,19 @@
|
||||||
(:require
|
(:require
|
||||||
#?(:clj [clojure.test :refer [deftest is are testing run-tests]]
|
#?(:clj [clojure.test :refer [deftest is are testing run-tests]]
|
||||||
:cljs [cljs.test :refer-macros [deftest is are testing run-tests]])
|
:cljs [cljs.test :refer-macros [deftest is are testing run-tests]])
|
||||||
|
#?(:cljs [shadow.resource :as rc])
|
||||||
[clojure.spec.test.alpha :as st]
|
[clojure.spec.test.alpha :as st]
|
||||||
|
[dda.c4k-common.yaml :as yaml]
|
||||||
[dda.c4k-common.namespace :as cut]))
|
[dda.c4k-common.namespace :as cut]))
|
||||||
|
|
||||||
(st/instrument `cut/generate)
|
(st/instrument `cut/generate)
|
||||||
|
(st/instrument `cut/load-and-adjust-namespace)
|
||||||
|
|
||||||
|
#?(:cljs
|
||||||
|
(defmethod yaml/load-resource :namespace-test [resource-name]
|
||||||
|
(case resource-name
|
||||||
|
"namespace-test/dummy.yaml" (rc/inline "namespace-test/dummy.yaml")
|
||||||
|
(throw (js/Error. (str "Undefined Resource: " resource-name))))))
|
||||||
|
|
||||||
(deftest should-generate-simple-ingress
|
(deftest should-generate-simple-ingress
|
||||||
(is (= [{:apiVersion "v1"
|
(is (= [{:apiVersion "v1"
|
||||||
|
@ -15,4 +24,11 @@
|
||||||
(is (= [{:apiVersion "v1"
|
(is (= [{:apiVersion "v1"
|
||||||
:kind "Namespace"
|
:kind "Namespace"
|
||||||
:metadata {:name "myapp"}}]
|
:metadata {:name "myapp"}}]
|
||||||
(cut/generate {:namespace "myapp"}))))
|
(cut/generate {:namespace "myapp"}))))
|
||||||
|
|
||||||
|
(deftest should-load-and-replace-ns
|
||||||
|
(is (= {:apiVersion "v1"
|
||||||
|
:kind "Dummy"
|
||||||
|
:metadata {:name "dummy"
|
||||||
|
:namespace "xy"}}
|
||||||
|
(cut/load-and-adjust-namespace "namespace-test/dummy.yaml" "xy"))))
|
|
@ -73,10 +73,6 @@
|
||||||
|
|
||||||
|
|
||||||
(deftest should-generate
|
(deftest should-generate
|
||||||
(is (= 6
|
|
||||||
(count (cut/generate {}
|
|
||||||
{:postgres-db-user "user"
|
|
||||||
:postgres-db-password "password"}))))
|
|
||||||
(is (= 5
|
(is (= 5
|
||||||
(count (cut/generate-config {}))))
|
(count (cut/generate-config {}))))
|
||||||
(is (= 1
|
(is (= 1
|
||||||
|
|
5
src/test/resources/namespace-test/dummy.yaml
Normal file
5
src/test/resources/namespace-test/dummy.yaml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Dummy
|
||||||
|
metadata:
|
||||||
|
name: dummy
|
||||||
|
namespace: default
|
Loading…
Reference in a new issue