feat(cert-checker): add Kubernetes resources for certificate checking functionality
- Implemented a new module for cert-checker with Kubernetes resources including ServiceAccount, Role, RoleBinding, ConfigMap, and CronJob. - Added Python script to check certificate expiry and restart deployments if necessary. - Configured environment variables for deployment name, namespace, and service details. - Included requirements for the Python environment. feat(devolo-exporter): introduce Devolo exporter for Prometheus metrics - Created a new module for Devolo exporter with Kubernetes resources including ServiceAccount, ConfigMap, Deployment, and Service. - Developed Python scripts to scrape metrics from Devolo devices and expose them to Prometheus. - Configured environment variables for Devolo device IP, model, and ports. - Added requirements for the Python environment.
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
resource "kubernetes_service_account" "devolo_exporter" {
|
||||
metadata {
|
||||
name = "devolo-exporter-sa-${var.devolo_model}"
|
||||
namespace = var.namespace
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_config_map" "devolo_exporter" {
|
||||
metadata {
|
||||
name = "devolo-exporter-config-${var.devolo_model}"
|
||||
namespace = var.namespace
|
||||
}
|
||||
data = {
|
||||
"exporter.py" = local.exporter_script
|
||||
"requirements.txt" = local.requirements_txt
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_deployment" "devolo_exporter" {
|
||||
metadata {
|
||||
name = "devolo-exporter-${var.devolo_model}"
|
||||
namespace = var.namespace
|
||||
labels = {
|
||||
app = "devolo-exporter-${var.devolo_model}"
|
||||
}
|
||||
}
|
||||
spec {
|
||||
replicas = 1
|
||||
selector {
|
||||
match_labels = {
|
||||
app = "devolo-exporter-${var.devolo_model}"
|
||||
}
|
||||
}
|
||||
strategy {
|
||||
type = "RollingUpdate"
|
||||
}
|
||||
template {
|
||||
metadata {
|
||||
labels = {
|
||||
app = "devolo-exporter-${var.devolo_model}"
|
||||
}
|
||||
annotations = {
|
||||
"checksum/exporter" = local.exporter_checksum
|
||||
"checksum/requirements" = local.requirements_checksum
|
||||
}
|
||||
}
|
||||
spec {
|
||||
service_account_name = kubernetes_service_account.devolo_exporter.metadata[0].name
|
||||
automount_service_account_token = false
|
||||
|
||||
container {
|
||||
name = "devolo-exporter"
|
||||
image = "python:${var.tag}"
|
||||
command = ["sh", "-c", join(" && ", local.commands)]
|
||||
|
||||
env {
|
||||
name = "EXPORTER_PORT"
|
||||
value = tostring(var.exporter_port)
|
||||
}
|
||||
env {
|
||||
name = "DEVOLO_IP"
|
||||
value = var.devolo_ip
|
||||
}
|
||||
env {
|
||||
name = "RD_PORT"
|
||||
value = tostring(var.rd_port)
|
||||
}
|
||||
port {
|
||||
container_port = var.exporter_port
|
||||
name = "http-metrics"
|
||||
}
|
||||
|
||||
liveness_probe {
|
||||
http_get {
|
||||
path = "/healthz"
|
||||
port = var.exporter_port
|
||||
}
|
||||
initial_delay_seconds = 10
|
||||
period_seconds = 10
|
||||
timeout_seconds = 5
|
||||
failure_threshold = 3
|
||||
}
|
||||
|
||||
readiness_probe {
|
||||
http_get {
|
||||
path = "/healthz"
|
||||
port = var.exporter_port
|
||||
}
|
||||
initial_delay_seconds = 5
|
||||
period_seconds = 10
|
||||
timeout_seconds = 5
|
||||
failure_threshold = 3
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
name = "exporter-volume"
|
||||
mount_path = "/exporter"
|
||||
read_only = true
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
name = "tmp"
|
||||
mount_path = "/tmp"
|
||||
}
|
||||
|
||||
security_context {
|
||||
run_as_user = 0
|
||||
run_as_group = 0
|
||||
read_only_root_filesystem = true
|
||||
}
|
||||
}
|
||||
|
||||
# Chromium sidecar providing the DevTools endpoint used by the exporter
|
||||
container {
|
||||
name = "chromium"
|
||||
image = "nextools/chromium:latest"
|
||||
command = ["/usr/bin/chromium-browser"]
|
||||
args = [
|
||||
"--disable-background-networking",
|
||||
"--disable-background-timer-throttling",
|
||||
"--disable-backgrounding-occluded-windows",
|
||||
"--disable-renderer-backgrounding",
|
||||
"--disable-breakpad",
|
||||
"--disable-client-side-phishing-detection",
|
||||
"--disable-default-apps",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-extensions",
|
||||
"--disable-gpu",
|
||||
"--disable-popup-blocking",
|
||||
"--disable-prompt-on-repost",
|
||||
"--disable-sync",
|
||||
"--disable-translate",
|
||||
"--headless",
|
||||
"--hide-scrollbars",
|
||||
"--ignore-certificate-errors",
|
||||
"--ignore-certificate-errors-spki-list",
|
||||
"--ignore-ssl-errors",
|
||||
"--metrics-recording-only",
|
||||
"--mute-audio",
|
||||
"--no-first-run",
|
||||
"--no-sandbox",
|
||||
"--remote-debugging-address=0.0.0.0",
|
||||
"--remote-debugging-port=${var.rd_port}",
|
||||
"--remote-allow-origins=http://localhost:9222",
|
||||
"--safebrowsing-disable-auto-update",
|
||||
"--user-data-dir=/home/chromium",
|
||||
"http://${var.devolo_ip}/#/overview"
|
||||
]
|
||||
|
||||
# Optional: expose the DevTools port within the pod (not needed outside)
|
||||
port {
|
||||
container_port = var.rd_port
|
||||
name = "devtools"
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
name = "chromium-data"
|
||||
mount_path = "/home/chromium"
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
name = "tmp"
|
||||
mount_path = "/tmp"
|
||||
}
|
||||
|
||||
security_context {
|
||||
run_as_user = 0
|
||||
run_as_group = 0
|
||||
read_only_root_filesystem = true
|
||||
}
|
||||
}
|
||||
|
||||
volume {
|
||||
name = "exporter-volume"
|
||||
config_map {
|
||||
name = kubernetes_config_map.devolo_exporter.metadata[0].name
|
||||
}
|
||||
}
|
||||
|
||||
# Writable /tmp for venv/site-packages installed under /tmp/python
|
||||
volume {
|
||||
name = "tmp"
|
||||
empty_dir {}
|
||||
}
|
||||
volume {
|
||||
name = "chromium-data"
|
||||
empty_dir {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_service" "devolo_exporter" {
|
||||
metadata {
|
||||
name = "devolo-exporter-${var.devolo_model}"
|
||||
namespace = var.namespace
|
||||
labels = {
|
||||
app = "devolo-exporter-${var.devolo_model}"
|
||||
}
|
||||
}
|
||||
spec {
|
||||
selector = {
|
||||
app = "devolo-exporter-${var.devolo_model}"
|
||||
}
|
||||
port {
|
||||
port = var.exporter_port
|
||||
target_port = var.exporter_port
|
||||
protocol = "TCP"
|
||||
name = "http-metrics"
|
||||
}
|
||||
type = "ClusterIP"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user