Mercurial > code > home > repos > victoriametrics
diff create_k8s.py @ 71:bfacf01fd119
conv vmalert/alertmanager config to py
author | drewp@bigasterisk.com |
---|---|
date | Fri, 03 May 2024 12:27:16 -0700 |
parents | 6a021aa7b4be |
children | 85d9dae18656 |
line wrap: on
line diff
--- a/create_k8s.py Fri May 03 11:56:59 2024 -0700 +++ b/create_k8s.py Fri May 03 12:27:16 2024 -0700 @@ -212,11 +212,288 @@ def createAlertObjs(objPrefix, webRoot): - (build / f'{objPrefix}-4-vmalert_0pv.yaml').write_text( - toJson( + (build / f'{objPrefix}-4vmalert_0pv.yaml').write_text( + toJson({ + "apiVersion": "v1", + "kind": "PersistentVolume", + "metadata": { + "name": "opt-alertmanager", + "labels": { + "type": "local" + } + }, + "spec": { + "storageClassName": "manual", + "hostPath": { + "path": "/opt/alertmanager" + }, + "capacity": { + "storage": "50Gi" + }, + "accessModes": ["ReadWriteOnce"], + "persistentVolumeReclaimPolicy": "Retain", + "claimRef": { + "namespace": "default", + "name": "opt-alertmanager" + } + } + })) + (build / f'{objPrefix}-4vmalert_1pvc.yaml').write_text(toJson({ + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "name": "opt-alertmanager" + }, + "spec": { + "storageClassName": "", + "volumeName": "opt-alertmanager", + "accessModes": ["ReadWriteOnce"], + "resources": { + "requests": { + "storage": "50Gi" + } + } + }, + })) + (build / f'{objPrefix}-4vmalert_2deploy.yaml').write_text( + toJson({ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "vmalert" + }, + "spec": { + "replicas": 1, + "strategy": { + "type": "Recreate" + }, + "selector": { + "matchLabels": { + "app": "vmalert" + } + }, + "template": { + "metadata": { + "labels": { + "app": "vmalert" + }, + "annotations": { + "prometheus.io/scrape": "true" + } + }, + "spec": { + "volumes": [{ + "name": "config", + "configMap": { + "name": "victoriametrics-config" + } + }], + "serviceAccountName": + "victoriametrics", + "containers": [{ + "name": "vmalert", + "image": "docker.io/victoriametrics/vmalert:v1.91.2", + "args": [ + "-configCheckInterval=5s", + "-datasource.url=http://victoriametrics/m/", + "-datasource.queryStep=5m", + "-evaluationInterval=1m", + "-external.url=https://bigasterisk.com/vmalert", + "-loggerLevel=INFO", + "-loggerTimezone=America/Los_Angeles", + "-memory.allowedBytes=512MB", + "-notifier.url=http://alertmanager", + "-remoteRead.url=http://victoriametrics/m/", + "-remoteWrite.url=http://victoriametrics/m/", + "-rule=/local/rules", + ], + "ports": [{ + "containerPort": 8880 + }], + "volumeMounts": [{ + "name": "config", + "mountPath": "/local" + }] + }] + } + } + } + })) - ) - ) + (build / f'{objPrefix}-4vmalert_svc.yaml').write_text(toJson({ + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "vmalert" + }, + "spec": { + "ports": [{ + "port": 80, + "targetPort": 8880 + }], + "selector": { + "app": "vmalert" + } + }, + })) + (build / f'{objPrefix}-5alertmanager_deploy.yaml').write_text( + toJson({ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "alertmanager" + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app": "alertmanager" + } + }, + "template": { + "metadata": { + "labels": { + "app": "alertmanager" + } + }, + "spec": { + "volumes": [{ + "name": "opt-alertmanager", + "persistentVolumeClaim": { + "claimName": "opt-alertmanager" + } + }], + "serviceAccountName": "victoriametrics", + "containers": [{ + "name": "alertmanager", + "image": "docker.io/prom/alertmanager:v0.27.0", + "args": [ + "--config.file=/alertmanager/alertmanager.yml", + "--web.external-url=https://bigasterisk.com/alertmanager/", + "--web.route-prefix=/", + "--log.level=info", + ], + "ports": [{ + "containerPort": 9093 + }], + "volumeMounts": [{ + "name": "opt-alertmanager", + "mountPath": "/alertmanager" + }] + }], + "affinity": { + "nodeAffinity": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "nodeSelectorTerms": [{ + "matchExpressions": [{ + "key": "kubernetes.io/hostname", + "operator": "In", + "values": ["ditto"] + }] + }] + } + } + } + } + } + } + })) + (build / f'{objPrefix}-5alertmanager_svc.yaml').write_text(toJson({ + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "alertmanager" + }, + "spec": { + "ports": [{ + "port": 80, + "targetPort": 9093 + }], + "selector": { + "app": "alertmanager" + } + }, + })) + (build / f'{objPrefix}-4vmalert_ingress.yaml').write_text( + toJson({ + "apiVersion": "networking.k8s.io/v1", + "kind": "Ingress", + "metadata": { + "name": "vmalert", + "annotations": { + "cert-manager.io/cluster-issuer": "letsencrypt-prod", + "ingress.pomerium.io/allow_public_unauthenticated_access": "false", + "ingress.pomerium.io/pass_identity_headers": "true", + "ingress.pomerium.io/preserve_host_header": "true", + "ingress.pomerium.io/policy": "allow:\n or: \n - { email: { is: \"drewpca@gmail.com\" }}\n - { email: { is: \"kelsimp@gmail.com\" }}\n" + } + }, + "spec": { + "ingressClassName": "pomerium", + "rules": [{ + "host": "bigasterisk.com", + "http": { + "paths": [{ + "pathType": "Prefix", + "path": "/vmalert/", + "backend": { + "service": { + "name": "vmalert", + "port": { + "number": 80 + } + } + } + }] + } + }], + "tls": [{ + "hosts": ["bigasterisk.com"], + "secretName": "bigasterisk.com-tls" + }] + } + })) + (build / f'{objPrefix}-5alertmanager_ingress.yaml').write_text( + toJson({ + "apiVersion": "networking.k8s.io/v1", + "kind": "Ingress", + "metadata": { + "name": "alertmanager", + "annotations": { + "cert-manager.io/cluster-issuer": "letsencrypt-prod", + "ingress.pomerium.io/allow_public_unauthenticated_access": "false", + "ingress.pomerium.io/pass_identity_headers": "true", + "ingress.pomerium.io/preserve_host_header": "true", + "ingress.pomerium.io/policy": "allow:\n or: \n - { email: { is: \"drewpca@gmail.com\" }}\n - { email: { is: \"kelsimp@gmail.com\" }}\n", + "ingress.pomerium.io/prefix_rewrite": "/" + } + }, + "spec": { + "ingressClassName": "pomerium", + "rules": [{ + "host": "bigasterisk.com", + "http": { + "paths": [{ + "pathType": "Prefix", + "path": "/alertmanager/", + "backend": { + "service": { + "name": "alertmanager", + "port": { + "number": 80 + } + } + } + }] + } + }], + "tls": [{ + "hosts": ["bigasterisk.com"], + "secretName": "bigasterisk.com-tls" + }] + } + })) + def main(): tzArg = "-loggerTimezone=America/Los_Angeles" @@ -255,6 +532,7 @@ createIndex(objPrefix, webRoot, makeIndexHtml(objPrefix, webRoot, webHost)) createAlertObjs(objPrefix, webRoot) + main() # in vmui, set server url to