feat: add Ariadne service and glue scheduling
This commit is contained in:
parent
791108723e
commit
bb41c219f6
@ -336,6 +336,10 @@ GLUE_MISSING_ACTIVE = f"({GLUE_MISSING} unless on(namespace,cronjob) {GLUE_SUSPE
|
|||||||
GLUE_STALE_COUNT = f"(sum({GLUE_STALE_ACTIVE}) + count({GLUE_MISSING_ACTIVE}))"
|
GLUE_STALE_COUNT = f"(sum({GLUE_STALE_ACTIVE}) + count({GLUE_MISSING_ACTIVE}))"
|
||||||
GLUE_MISSING_COUNT = f"count({GLUE_MISSING_ACTIVE})"
|
GLUE_MISSING_COUNT = f"count({GLUE_MISSING_ACTIVE})"
|
||||||
GLUE_SUSPENDED_COUNT = f"sum({GLUE_SUSPENDED})"
|
GLUE_SUSPENDED_COUNT = f"sum({GLUE_SUSPENDED})"
|
||||||
|
ARIADNE_TASK_ERRORS_24H = 'sum by (task) (increase(ariadne_task_runs_total{status="error"}[24h]))'
|
||||||
|
ARIADNE_TASK_SUCCESS_24H = 'sum by (task) (increase(ariadne_task_runs_total{status="ok"}[24h]))'
|
||||||
|
ARIADNE_SCHEDULE_LAST_SUCCESS_HOURS = "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600"
|
||||||
|
ARIADNE_ACCESS_REQUESTS = "ariadne_access_requests_total"
|
||||||
GPU_NODES = ["titan-20", "titan-21", "titan-22", "titan-24"]
|
GPU_NODES = ["titan-20", "titan-21", "titan-22", "titan-24"]
|
||||||
GPU_NODE_REGEX = "|".join(GPU_NODES)
|
GPU_NODE_REGEX = "|".join(GPU_NODES)
|
||||||
TRAEFIK_ROUTER_EXPR = "sum by (router) (rate(traefik_router_requests_total[5m]))"
|
TRAEFIK_ROUTER_EXPR = "sum by (router) (rate(traefik_router_requests_total[5m]))"
|
||||||
@ -2230,6 +2234,39 @@ def build_testing_dashboard():
|
|||||||
instant=True,
|
instant=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
panels.append(
|
||||||
|
table_panel(
|
||||||
|
7,
|
||||||
|
"Ariadne Task Errors (24h)",
|
||||||
|
ARIADNE_TASK_ERRORS_24H,
|
||||||
|
{"h": 6, "w": 12, "x": 0, "y": 12},
|
||||||
|
unit="none",
|
||||||
|
transformations=sort_desc,
|
||||||
|
instant=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
table_panel(
|
||||||
|
8,
|
||||||
|
"Ariadne Schedule Last Success (hours ago)",
|
||||||
|
ARIADNE_SCHEDULE_LAST_SUCCESS_HOURS,
|
||||||
|
{"h": 6, "w": 12, "x": 12, "y": 12},
|
||||||
|
unit="h",
|
||||||
|
transformations=sort_desc,
|
||||||
|
instant=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
table_panel(
|
||||||
|
9,
|
||||||
|
"Ariadne Access Requests",
|
||||||
|
ARIADNE_ACCESS_REQUESTS,
|
||||||
|
{"h": 4, "w": 24, "x": 0, "y": 18},
|
||||||
|
unit="none",
|
||||||
|
transformations=sort_desc,
|
||||||
|
instant=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"uid": "atlas-testing",
|
"uid": "atlas-testing",
|
||||||
|
|||||||
@ -8,6 +8,7 @@ metadata:
|
|||||||
atlas.bstein.dev/glue: "true"
|
atlas.bstein.dev/glue: "true"
|
||||||
spec:
|
spec:
|
||||||
schedule: "*/15 * * * *"
|
schedule: "*/15 * * * *"
|
||||||
|
suspend: true
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
successfulJobsHistoryLimit: 1
|
successfulJobsHistoryLimit: 1
|
||||||
failedJobsHistoryLimit: 3
|
failedJobsHistoryLimit: 3
|
||||||
|
|||||||
@ -29,3 +29,17 @@ subjects:
|
|||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: bstein-dev-home
|
name: bstein-dev-home
|
||||||
namespace: bstein-dev-home
|
namespace: bstein-dev-home
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: ariadne-firefly-user-sync
|
||||||
|
namespace: finance
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: bstein-dev-home-firefly-user-sync
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
|||||||
@ -8,7 +8,7 @@ rules:
|
|||||||
- apiGroups: ["batch"]
|
- apiGroups: ["batch"]
|
||||||
resources: ["cronjobs"]
|
resources: ["cronjobs"]
|
||||||
verbs: ["get"]
|
verbs: ["get"]
|
||||||
resourceNames: ["wger-user-sync"]
|
resourceNames: ["wger-user-sync", "wger-admin-ensure"]
|
||||||
- apiGroups: ["batch"]
|
- apiGroups: ["batch"]
|
||||||
resources: ["jobs"]
|
resources: ["jobs"]
|
||||||
verbs: ["create", "get", "list", "watch"]
|
verbs: ["create", "get", "list", "watch"]
|
||||||
@ -29,3 +29,17 @@ subjects:
|
|||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: bstein-dev-home
|
name: bstein-dev-home
|
||||||
namespace: bstein-dev-home
|
namespace: bstein-dev-home
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: ariadne-wger-user-sync
|
||||||
|
namespace: health
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: bstein-dev-home-wger-user-sync
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
|||||||
@ -8,6 +8,7 @@ metadata:
|
|||||||
atlas.bstein.dev/glue: "true"
|
atlas.bstein.dev/glue: "true"
|
||||||
spec:
|
spec:
|
||||||
schedule: "15 3 * * *"
|
schedule: "15 3 * * *"
|
||||||
|
suspend: true
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
successfulJobsHistoryLimit: 1
|
successfulJobsHistoryLimit: 1
|
||||||
failedJobsHistoryLimit: 3
|
failedJobsHistoryLimit: 3
|
||||||
|
|||||||
@ -331,6 +331,8 @@ spec:
|
|||||||
# Ensure basic realm groups exist for provisioning.
|
# Ensure basic realm groups exist for provisioning.
|
||||||
ensure_group("dev")
|
ensure_group("dev")
|
||||||
ensure_group("admin")
|
ensure_group("admin")
|
||||||
|
ensure_group("demo")
|
||||||
|
ensure_group("test")
|
||||||
planka_group = ensure_group("planka-users")
|
planka_group = ensure_group("planka-users")
|
||||||
|
|
||||||
if planka_group and planka_group.get("id"):
|
if planka_group and planka_group.get("id"):
|
||||||
|
|||||||
@ -8,6 +8,7 @@ metadata:
|
|||||||
atlas.bstein.dev/glue: "true"
|
atlas.bstein.dev/glue: "true"
|
||||||
spec:
|
spec:
|
||||||
schedule: "30 4 * * *"
|
schedule: "30 4 * * *"
|
||||||
|
suspend: true
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
jobTemplate:
|
jobTemplate:
|
||||||
spec:
|
spec:
|
||||||
|
|||||||
181
services/maintenance/ariadne-deployment.yaml
Normal file
181
services/maintenance/ariadne-deployment.yaml
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
# services/maintenance/ariadne-deployment.yaml
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: ariadne
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: ariadne
|
||||||
|
annotations:
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
prometheus.io/port: "8080"
|
||||||
|
prometheus.io/path: "/metrics"
|
||||||
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
|
vault.hashicorp.com/role: "maintenance"
|
||||||
|
vault.hashicorp.com/agent-inject-secret-ariadne-env.sh: "kv/data/atlas/portal/atlas-portal-db"
|
||||||
|
vault.hashicorp.com/agent-inject-template-ariadne-env.sh: |
|
||||||
|
{{ with secret "kv/data/atlas/portal/atlas-portal-db" }}
|
||||||
|
export PORTAL_DATABASE_URL="{{ .Data.data.PORTAL_DATABASE_URL }}"
|
||||||
|
{{ end }}
|
||||||
|
{{ with secret "kv/data/atlas/portal/bstein-dev-home-keycloak-admin" }}
|
||||||
|
export KEYCLOAK_ADMIN_CLIENT_SECRET="{{ .Data.data.client_secret }}"
|
||||||
|
{{ end }}
|
||||||
|
{{ with secret "kv/data/atlas/mailu/mailu-db-secret" }}
|
||||||
|
export MAILU_DB_NAME="{{ .Data.data.database }}"
|
||||||
|
export MAILU_DB_USER="{{ .Data.data.username }}"
|
||||||
|
export MAILU_DB_PASSWORD="{{ .Data.data.password }}"
|
||||||
|
{{ end }}
|
||||||
|
{{ with secret "kv/data/atlas/mailu/mailu-initial-account-secret" }}
|
||||||
|
export SMTP_HOST="mailu-front.mailu-mailserver.svc.cluster.local"
|
||||||
|
export SMTP_PORT="587"
|
||||||
|
export SMTP_STARTTLS="true"
|
||||||
|
export SMTP_USE_TLS="false"
|
||||||
|
export SMTP_USERNAME="no-reply-portal@bstein.dev"
|
||||||
|
export SMTP_PASSWORD="{{ .Data.data.password }}"
|
||||||
|
export SMTP_FROM="no-reply-portal@bstein.dev"
|
||||||
|
{{ end }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: ariadne
|
||||||
|
nodeSelector:
|
||||||
|
kubernetes.io/arch: arm64
|
||||||
|
node-role.kubernetes.io/worker: "true"
|
||||||
|
containers:
|
||||||
|
- name: ariadne
|
||||||
|
image: registry.bstein.dev/bstein/ariadne:0.1.0
|
||||||
|
imagePullPolicy: Always
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- >-
|
||||||
|
. /vault/secrets/ariadne-env.sh
|
||||||
|
&& exec uvicorn ariadne.app:app --host 0.0.0.0 --port 8080
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8080
|
||||||
|
env:
|
||||||
|
- name: KEYCLOAK_URL
|
||||||
|
value: https://sso.bstein.dev
|
||||||
|
- name: KEYCLOAK_REALM
|
||||||
|
value: atlas
|
||||||
|
- name: KEYCLOAK_CLIENT_ID
|
||||||
|
value: bstein-dev-home
|
||||||
|
- name: KEYCLOAK_ISSUER
|
||||||
|
value: https://sso.bstein.dev/realms/atlas
|
||||||
|
- name: KEYCLOAK_JWKS_URL
|
||||||
|
value: http://keycloak.sso.svc.cluster.local/realms/atlas/protocol/openid-connect/certs
|
||||||
|
- name: KEYCLOAK_ADMIN_URL
|
||||||
|
value: http://keycloak.sso.svc.cluster.local
|
||||||
|
- name: KEYCLOAK_ADMIN_REALM
|
||||||
|
value: atlas
|
||||||
|
- name: KEYCLOAK_ADMIN_CLIENT_ID
|
||||||
|
value: bstein-dev-home-admin
|
||||||
|
- name: PORTAL_PUBLIC_BASE_URL
|
||||||
|
value: https://bstein.dev
|
||||||
|
- name: PORTAL_ADMIN_USERS
|
||||||
|
value: bstein
|
||||||
|
- name: PORTAL_ADMIN_GROUPS
|
||||||
|
value: admin
|
||||||
|
- name: ACCOUNT_ALLOWED_GROUPS
|
||||||
|
value: dev,admin
|
||||||
|
- name: ALLOWED_FLAG_GROUPS
|
||||||
|
value: demo,test
|
||||||
|
- name: DEFAULT_USER_GROUPS
|
||||||
|
value: dev
|
||||||
|
- name: MAILU_DOMAIN
|
||||||
|
value: bstein.dev
|
||||||
|
- name: MAILU_SYNC_URL
|
||||||
|
value: http://mailu-sync-listener.mailu-mailserver.svc.cluster.local:8080/events
|
||||||
|
- name: MAILU_MAILBOX_WAIT_TIMEOUT_SEC
|
||||||
|
value: "60"
|
||||||
|
- name: MAILU_DB_HOST
|
||||||
|
value: postgres-service.postgres.svc.cluster.local
|
||||||
|
- name: MAILU_DB_PORT
|
||||||
|
value: "5432"
|
||||||
|
- name: NEXTCLOUD_NAMESPACE
|
||||||
|
value: nextcloud
|
||||||
|
- name: NEXTCLOUD_MAIL_SYNC_CRONJOB
|
||||||
|
value: nextcloud-mail-sync
|
||||||
|
- name: NEXTCLOUD_MAIL_SYNC_WAIT_TIMEOUT_SEC
|
||||||
|
value: "90"
|
||||||
|
- name: NEXTCLOUD_MAIL_SYNC_JOB_TTL_SEC
|
||||||
|
value: "3600"
|
||||||
|
- name: WGER_NAMESPACE
|
||||||
|
value: health
|
||||||
|
- name: WGER_USER_SYNC_CRONJOB
|
||||||
|
value: wger-user-sync
|
||||||
|
- name: WGER_ADMIN_CRONJOB
|
||||||
|
value: wger-admin-ensure
|
||||||
|
- name: WGER_USER_SYNC_WAIT_TIMEOUT_SEC
|
||||||
|
value: "90"
|
||||||
|
- name: FIREFLY_NAMESPACE
|
||||||
|
value: finance
|
||||||
|
- name: FIREFLY_USER_SYNC_CRONJOB
|
||||||
|
value: firefly-user-sync
|
||||||
|
- name: FIREFLY_USER_SYNC_WAIT_TIMEOUT_SEC
|
||||||
|
value: "90"
|
||||||
|
- name: VAULTWARDEN_NAMESPACE
|
||||||
|
value: vaultwarden
|
||||||
|
- name: VAULTWARDEN_POD_LABEL
|
||||||
|
value: app=vaultwarden
|
||||||
|
- name: VAULTWARDEN_POD_PORT
|
||||||
|
value: "80"
|
||||||
|
- name: VAULTWARDEN_SERVICE_HOST
|
||||||
|
value: vaultwarden-service.vaultwarden.svc.cluster.local
|
||||||
|
- name: VAULTWARDEN_ADMIN_SECRET_NAME
|
||||||
|
value: vaultwarden-admin
|
||||||
|
- name: VAULTWARDEN_ADMIN_SECRET_KEY
|
||||||
|
value: ADMIN_TOKEN
|
||||||
|
- name: VAULTWARDEN_ADMIN_SESSION_TTL_SEC
|
||||||
|
value: "900"
|
||||||
|
- name: VAULTWARDEN_ADMIN_RATE_LIMIT_BACKOFF_SEC
|
||||||
|
value: "600"
|
||||||
|
- name: VAULTWARDEN_RETRY_COOLDOWN_SEC
|
||||||
|
value: "1800"
|
||||||
|
- name: VAULTWARDEN_FAILURE_BAILOUT
|
||||||
|
value: "2"
|
||||||
|
- name: ARIADNE_PROVISION_POLL_INTERVAL_SEC
|
||||||
|
value: "5"
|
||||||
|
- name: ARIADNE_PROVISION_RETRY_COOLDOWN_SEC
|
||||||
|
value: "30"
|
||||||
|
- name: ARIADNE_SCHEDULE_TICK_SEC
|
||||||
|
value: "5"
|
||||||
|
- name: ARIADNE_SCHEDULE_MAILU_SYNC
|
||||||
|
value: "30 4 * * *"
|
||||||
|
- name: ARIADNE_SCHEDULE_NEXTCLOUD_SYNC
|
||||||
|
value: "0 5 * * *"
|
||||||
|
- name: ARIADNE_SCHEDULE_VAULTWARDEN_SYNC
|
||||||
|
value: "*/15 * * * *"
|
||||||
|
- name: ARIADNE_SCHEDULE_WGER_ADMIN
|
||||||
|
value: "15 3 * * *"
|
||||||
|
- name: WELCOME_EMAIL_ENABLED
|
||||||
|
value: "true"
|
||||||
|
- name: K8S_API_TIMEOUT_SEC
|
||||||
|
value: "5"
|
||||||
|
- name: METRICS_PATH
|
||||||
|
value: "/metrics"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
13
services/maintenance/ariadne-service.yaml
Normal file
13
services/maintenance/ariadne-service.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# services/maintenance/ariadne-service.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: ariadne
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: http
|
||||||
8
services/maintenance/ariadne-serviceaccount.yaml
Normal file
8
services/maintenance/ariadne-serviceaccount.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# services/maintenance/ariadne-serviceaccount.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: harbor-regcred
|
||||||
@ -3,10 +3,16 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
|||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
|
- secretproviderclass.yaml
|
||||||
|
- vault-serviceaccount.yaml
|
||||||
|
- vault-sync-deployment.yaml
|
||||||
|
- ariadne-serviceaccount.yaml
|
||||||
- disable-k3s-traefik-serviceaccount.yaml
|
- disable-k3s-traefik-serviceaccount.yaml
|
||||||
- k3s-traefik-cleanup-rbac.yaml
|
- k3s-traefik-cleanup-rbac.yaml
|
||||||
- node-nofile-serviceaccount.yaml
|
- node-nofile-serviceaccount.yaml
|
||||||
- pod-cleaner-rbac.yaml
|
- pod-cleaner-rbac.yaml
|
||||||
|
- ariadne-deployment.yaml
|
||||||
|
- ariadne-service.yaml
|
||||||
- disable-k3s-traefik-daemonset.yaml
|
- disable-k3s-traefik-daemonset.yaml
|
||||||
- k3s-traefik-cleanup-job.yaml
|
- k3s-traefik-cleanup-job.yaml
|
||||||
- node-nofile-daemonset.yaml
|
- node-nofile-daemonset.yaml
|
||||||
|
|||||||
21
services/maintenance/secretproviderclass.yaml
Normal file
21
services/maintenance/secretproviderclass.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# services/maintenance/secretproviderclass.yaml
|
||||||
|
apiVersion: secrets-store.csi.x-k8s.io/v1
|
||||||
|
kind: SecretProviderClass
|
||||||
|
metadata:
|
||||||
|
name: maintenance-vault
|
||||||
|
namespace: maintenance
|
||||||
|
spec:
|
||||||
|
provider: vault
|
||||||
|
parameters:
|
||||||
|
vaultAddress: "http://vault.vault.svc.cluster.local:8200"
|
||||||
|
roleName: "maintenance"
|
||||||
|
objects: |
|
||||||
|
- objectName: "harbor-pull__dockerconfigjson"
|
||||||
|
secretPath: "kv/data/atlas/harbor-pull/maintenance"
|
||||||
|
secretKey: "dockerconfigjson"
|
||||||
|
secretObjects:
|
||||||
|
- secretName: harbor-regcred
|
||||||
|
type: kubernetes.io/dockerconfigjson
|
||||||
|
data:
|
||||||
|
- objectName: harbor-pull__dockerconfigjson
|
||||||
|
key: .dockerconfigjson
|
||||||
6
services/maintenance/vault-serviceaccount.yaml
Normal file
6
services/maintenance/vault-serviceaccount.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# services/maintenance/vault-serviceaccount.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: maintenance-vault-sync
|
||||||
|
namespace: maintenance
|
||||||
34
services/maintenance/vault-sync-deployment.yaml
Normal file
34
services/maintenance/vault-sync-deployment.yaml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# services/maintenance/vault-sync-deployment.yaml
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: maintenance-vault-sync
|
||||||
|
namespace: maintenance
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: maintenance-vault-sync
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: maintenance-vault-sync
|
||||||
|
spec:
|
||||||
|
serviceAccountName: maintenance-vault-sync
|
||||||
|
containers:
|
||||||
|
- name: sync
|
||||||
|
image: alpine:3.20
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- "sleep infinity"
|
||||||
|
volumeMounts:
|
||||||
|
- name: vault-secrets
|
||||||
|
mountPath: /vault/secrets
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: vault-secrets
|
||||||
|
csi:
|
||||||
|
driver: secrets-store.csi.k8s.io
|
||||||
|
readOnly: true
|
||||||
|
volumeAttributes:
|
||||||
|
secretProviderClass: maintenance-vault
|
||||||
@ -321,6 +321,156 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Task Errors (24h)",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 12
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"error\"}[24h]))",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "none",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Schedule Last Success (hours ago)",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 12
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "h",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Access Requests",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 4,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 18
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "ariadne_access_requests_total",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "none",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": {
|
"time": {
|
||||||
|
|||||||
@ -330,6 +330,156 @@ data:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Task Errors (24h)",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 12
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"error\"}[24h]))",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "none",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Schedule Last Success (hours ago)",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 12
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "h",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"type": "table",
|
||||||
|
"title": "Ariadne Access Requests",
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "atlas-vm"
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 4,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 18
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "ariadne_access_requests_total",
|
||||||
|
"refId": "A",
|
||||||
|
"instant": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "none",
|
||||||
|
"custom": {
|
||||||
|
"filterable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"showHeader": true,
|
||||||
|
"columnFilters": false
|
||||||
|
},
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "labelsToFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sortBy",
|
||||||
|
"options": {
|
||||||
|
"fields": [
|
||||||
|
"Value"
|
||||||
|
],
|
||||||
|
"order": "desc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": {
|
"time": {
|
||||||
|
|||||||
@ -8,6 +8,7 @@ metadata:
|
|||||||
atlas.bstein.dev/glue: "true"
|
atlas.bstein.dev/glue: "true"
|
||||||
spec:
|
spec:
|
||||||
schedule: "0 5 * * *"
|
schedule: "0 5 * * *"
|
||||||
|
suspend: true
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
successfulJobsHistoryLimit: 3
|
successfulJobsHistoryLimit: 3
|
||||||
failedJobsHistoryLimit: 1
|
failedJobsHistoryLimit: 1
|
||||||
|
|||||||
@ -27,3 +27,16 @@ subjects:
|
|||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: bstein-dev-home
|
name: bstein-dev-home
|
||||||
namespace: bstein-dev-home
|
namespace: bstein-dev-home
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: ariadne-nextcloud-mail-sync
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: bstein-dev-home-nextcloud-mail-sync
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
|
|||||||
@ -230,6 +230,8 @@ write_policy_and_role "crypto" "crypto" "crypto-vault-sync" \
|
|||||||
"crypto/* harbor-pull/crypto" ""
|
"crypto/* harbor-pull/crypto" ""
|
||||||
write_policy_and_role "health" "health" "health-vault-sync" \
|
write_policy_and_role "health" "health" "health-vault-sync" \
|
||||||
"health/*" ""
|
"health/*" ""
|
||||||
|
write_policy_and_role "maintenance" "maintenance" "ariadne" \
|
||||||
|
"portal/atlas-portal-db portal/bstein-dev-home-keycloak-admin mailu/mailu-db-secret mailu/mailu-initial-account-secret harbor-pull/maintenance" ""
|
||||||
write_policy_and_role "finance" "finance" "finance-vault" \
|
write_policy_and_role "finance" "finance" "finance-vault" \
|
||||||
"finance/* shared/postmark-relay" ""
|
"finance/* shared/postmark-relay" ""
|
||||||
write_policy_and_role "finance-secrets" "finance" "finance-secrets-ensure" \
|
write_policy_and_role "finance-secrets" "finance" "finance-secrets-ensure" \
|
||||||
|
|||||||
28
services/vaultwarden/ariadne-rbac.yaml
Normal file
28
services/vaultwarden/ariadne-rbac.yaml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# services/vaultwarden/ariadne-rbac.yaml
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: ariadne-vaultwarden-admin-reader
|
||||||
|
namespace: vaultwarden
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["secrets"]
|
||||||
|
verbs: ["get"]
|
||||||
|
resourceNames: ["vaultwarden-admin"]
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["pods"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: ariadne-vaultwarden-admin-reader
|
||||||
|
namespace: vaultwarden
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: ariadne-vaultwarden-admin-reader
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: ariadne
|
||||||
|
namespace: maintenance
|
||||||
@ -5,6 +5,7 @@ namespace: vaultwarden
|
|||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- serviceaccount.yaml
|
- serviceaccount.yaml
|
||||||
|
- ariadne-rbac.yaml
|
||||||
- pvc.yaml
|
- pvc.yaml
|
||||||
- deployment.yaml
|
- deployment.yaml
|
||||||
- service.yaml
|
- service.yaml
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user