Add GPU monitoring services and configurations

- Create systemd service templates for llama_exporter, nvidia_exporter, and podman.
- Add Prometheus configuration template for GPU metrics scraping.
- Introduce variables for GPU monitoring role in main.yml.
- Implement tasks for syncing llama models, including user setup and package installation.
- Update podman tasks to ensure proper sudo access and lingering for the podman user.
- Modify inventory to include gpu_monitoring group.
- Add Terraform modules for deploying Vaultwarden, including ingress and service configurations.
- Create Grafana dashboard for real-time GPU monitoring metrics.
- Update secrets and environment files to include Vaultwarden admin token.
This commit is contained in:
2026-05-29 23:42:14 +02:00
parent e9e28a5ca8
commit 350650ecc2
47 changed files with 3727 additions and 49 deletions
+191
View File
@@ -0,0 +1,191 @@
resource "kubernetes_namespace" "vaultwarden" {
metadata {
name = "vaultwarden"
}
}
resource "kubernetes_service_account" "vaultwarden" {
metadata {
name = "vaultwarden-sa"
namespace = kubernetes_namespace.vaultwarden.metadata[0].name
}
automount_service_account_token = false
}
resource "kubernetes_config_map" "vaultwarden_config" {
metadata {
name = "vaultwarden-config"
namespace = kubernetes_namespace.vaultwarden.metadata[0].name
}
data = {
DOMAIN = "https://${local.app_fqdn}/"
SIGNUP = var.signup_enabled ? "true" : "false"
DATABASE_URL = "file:///data/db.sqlite3"
}
}
resource "kubernetes_secret" "vaultwarden_secrets" {
metadata {
name = "vaultwarden-keys"
namespace = kubernetes_namespace.vaultwarden.metadata[0].name
}
data = {
ADMIN_TOKEN = var.admin_token
}
}
resource "kubernetes_deployment" "vaultwarden" {
metadata {
name = "vaultwarden"
namespace = kubernetes_namespace.vaultwarden.metadata[0].name
labels = {
app = "vaultwarden"
}
}
spec {
replicas = 1
selector {
match_labels = {
app = "vaultwarden"
}
}
strategy {
type = "Recreate"
}
template {
metadata {
labels = {
app = "vaultwarden"
}
}
spec {
service_account_name = kubernetes_service_account.vaultwarden.metadata[0].name
automount_service_account_token = false
security_context {
run_as_non_root = true
run_as_user = 1000
run_as_group = 1000
fs_group = 1000
seccomp_profile {
type = "RuntimeDefault"
}
}
container {
name = "vaultwarden"
image = "vaultwarden/server:${local.app_version}"
env_from {
config_map_ref {
name = kubernetes_config_map.vaultwarden_config.metadata[0].name
}
}
env {
name = "ADMIN_TOKEN"
value_from {
secret_key_ref {
name = kubernetes_secret.vaultwarden_secrets.metadata[0].name
key = "ADMIN_TOKEN"
}
}
}
security_context {
allow_privilege_escalation = false
privileged = false
capabilities {
drop = ["ALL"]
}
read_only_root_filesystem = true
}
port {
name = "http"
container_port = 80
protocol = "TCP"
}
liveness_probe {
http_get {
path = "/"
port = "http"
}
initial_delay_seconds = 30
period_seconds = 15
}
readiness_probe {
http_get {
path = "/"
port = "http"
}
initial_delay_seconds = 10
period_seconds = 10
}
volume_mount {
name = "vaultwarden-data"
mount_path = "/data"
}
volume_mount {
name = "vaultwarden-tmp"
mount_path = "/tmp"
}
}
volume {
name = "vaultwarden-data"
host_path {
path = local.db_path
}
}
volume {
name = "vaultwarden-tmp"
empty_dir {}
}
}
}
}
}
resource "kubernetes_service" "vaultwarden" {
metadata {
name = "vaultwarden-service"
namespace = kubernetes_namespace.vaultwarden.metadata[0].name
}
spec {
selector = {
app = "vaultwarden"
}
port {
name = "http"
port = 80
target_port = 80
}
type = "ClusterIP"
}
lifecycle {
ignore_changes = [
metadata[0].annotations
]
}
}