diff next/create_all.py @ 55:24f4ec319f98

yaml to py
author drewp@bigasterisk.com
date Fri, 26 Apr 2024 15:55:25 -0700
parents
children a72c47973aa4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/next/create_all.py	Fri Apr 26 15:55:25 2024 -0700
@@ -0,0 +1,336 @@
+import json
+from pathlib import Path
+
+
+def toJson(d):
+    return json.dumps(d, sort_keys=True, indent=2)
+
+
+build = Path('build')
+(build / 'vmagent_deploy.yaml').write_text(
+    toJson({
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+            "name": "next-victoriametrics-vmagent"
+        },
+        "spec": {
+            "replicas": 1,
+            "strategy": {
+                "type": "Recreate"
+            },
+            "selector": {
+                "matchLabels": {
+                    "app": "next-victoriametrics-vmagent"
+                }
+            },
+            "template": {
+                "metadata": {
+                    "labels": {
+                        "app": "next-victoriametrics-vmagent"
+                    },
+                    "annotations": {
+                        "prometheus.io/scrape": "true",
+                        "prometheus.io/path": "/m/metrics",
+                        "prometheus.io/port": "80"
+                    }
+                },
+                "spec": {
+                    "volumes": [{
+                        "name": "config",
+                        "configMap": {
+                            "name": "victoriametrics-config"
+                        }
+                    }],
+                    "serviceAccountName":
+                        "victoriametrics",
+                    "containers": [{
+                        "name": "vmagent",
+                        "image": "docker.io/victoriametrics/vmagent:v1.100.1",
+                        "imagePullPolicy": "IfNotPresent",
+                        "args": ["-http.pathPrefix=/m/next/vmagent/", "-loggerTimezone=America/Los_Angeles", "-promscrape.config=/local/config/scrape_main", "-promscrape.configCheckInterval=5s", "-sortLabels", "-remoteWrite.url=http://next-victoriametrics-vminsert/m/next/vminsert/insert/0/prometheus/api/v1/write", "-remoteWrite.showURL"],
+                        "ports": [{
+                            "containerPort": 8429
+                        }],
+                        "volumeMounts": [{
+                            "name": "config",
+                            "mountPath": "/local/config"
+                        }]
+                    }]
+                }
+            }
+        }
+    }))
+(build / 'vmagent_svc.yaml').write_text(toJson({"apiVersion": "v1", "kind": "Service", "metadata": {"name": "next-victoriametrics-vmagent"}, "spec": {"ports": [{"port": 80, "targetPort": 8429}], "selector": {"app": "next-victoriametrics-vmagent"}}}))
+
+(build / 'vminsert_deploy.yaml').write_text(
+    toJson({
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+            "name": "next-victoriametrics-vminsert"
+        },
+        "spec": {
+            "replicas": 1,
+            "strategy": {
+                "type": "Recreate"
+            },
+            "selector": {
+                "matchLabels": {
+                    "app": "next-victoriametrics-vminsert"
+                }
+            },
+            "template": {
+                "metadata": {
+                    "labels": {
+                        "app": "next-victoriametrics-vminsert"
+                    },
+                    "annotations": {
+                        "prometheus.io/scrape": "true",
+                        "prometheus.io/path": "/m/metrics",
+                        "prometheus.io/port": "80"
+                    }
+                },
+                "spec": {
+                    "serviceAccountName": "victoriametrics",
+                    "containers": [{
+                        "name": "vminsert",
+                        "image": "docker.io/victoriametrics/vminsert:v1.100.1-cluster",
+                        "imagePullPolicy": "IfNotPresent",
+                        "args": ["-http.pathPrefix=/m/next/vminsert/", "-loggerTimezone=America/Los_Angeles", "-storageNode=next-victoriametrics-vmstorage"],
+                        "ports": [{
+                            "containerPort": 8480
+                        }]
+                    }]
+                }
+            }
+        }
+    }))
+(build / 'vminsert_svc.yaml').write_text(toJson({"apiVersion": "v1", "kind": "Service", "metadata": {"name": "next-victoriametrics-vminsert"}, "spec": {"ports": [{"port": 80, "targetPort": 8480}], "selector": {"app": "next-victoriametrics-vminsert"}}}))
+
+(build / 'vmstorage_pv.yaml').write_text(
+    toJson({
+        "apiVersion": "v1",
+        "kind": "PersistentVolume",
+        "metadata": {
+            "name": "next-victoriametrics",
+            "labels": {
+                "type": "local"
+            }
+        },
+        "spec": {
+            "storageClassName": "manual",
+            "hostPath": {
+                "path": "/opt/next-victoriametrics"
+            },
+            "capacity": {
+                "storage": "50Gi"
+            },
+            "accessModes": ["ReadWriteMany"],
+            "persistentVolumeReclaimPolicy": "Retain",
+            "claimRef": {
+                "namespace": "default",
+                "name": "next-victoriametrics"
+            }
+        }
+    }))
+(build / 'vmstorage_pvc.yaml').write_text(toJson({"apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": {"name": "next-victoriametrics"}, "spec": {"storageClassName": "", "volumeName": "next-victoriametrics", "accessModes": ["ReadWriteMany"], "resources": {"requests": {"storage": "50Gi"}}}}))
+
+(build / 'vmstorage_deploy.yaml').write_text(
+    toJson({
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+            "name": "next-victoriametrics-vmstorage"
+        },
+        "spec": {
+            "replicas": 1,
+            "strategy": {
+                "type": "Recreate"
+            },
+            "selector": {
+                "matchLabels": {
+                    "app": "next-victoriametrics-vmstorage"
+                }
+            },
+            "template": {
+                "metadata": {
+                    "labels": {
+                        "app": "next-victoriametrics-vmstorage"
+                    },
+                    "annotations": {
+                        "prometheus.io/scrape": "true",
+                        "prometheus.io/path": "/m/vmstorage/metrics",
+                        "prometheus.io/port": "80"
+                    }
+                },
+                "spec": {
+                    "volumes": [{
+                        "name": "data",
+                        "persistentVolumeClaim": {
+                            "claimName": "next-victoriametrics"
+                        }
+                    }],
+                    "serviceAccountName": "victoriametrics",
+                    "containers": [{
+                        "name": "vmstorage",
+                        "image": "docker.io/victoriametrics/vmstorage:v1.100.1-cluster",
+                        "imagePullPolicy": "IfNotPresent",
+                        "args": ["-http.pathPrefix=/m/next/vmstorage/", "-loggerTimezone=America/Los_Angeles", "-retentionPeriod=100y", "-storageDataPath=/data/100y"],
+                        "ports": [{
+                            "containerPort": 8482,
+                            "name": "http"
+                        }, {
+                            "containerPort": 8400,
+                            "name": "vminsert"
+                        }, {
+                            "containerPort": 8401,
+                            "name": "vmselect"
+                        }],
+                        "volumeMounts": [{
+                            "name": "data",
+                            "mountPath": "/data"
+                        }]
+                    }],
+                    "affinity": {
+                        "nodeAffinity": {
+                            "requiredDuringSchedulingIgnoredDuringExecution": {
+                                "nodeSelectorTerms": [{
+                                    "matchExpressions": [{
+                                        "key": "kubernetes.io/hostname",
+                                        "operator": "In",
+                                        "values": ["ditto"]
+                                    }]
+                                }]
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }))
+(build / 'vmstorage_svc.yaml').write_text(toJson({"apiVersion": "v1", "kind": "Service", "metadata": {"name": "next-victoriametrics-vmstorage"}, "spec": {"ports": [{"port": 80, "targetPort": "http", "name": "http"}, {"port": 8400, "targetPort": "vminsert", "name": "vminsert"}, {"port": 8401, "targetPort": "vmselect", "name": "vmselect"}], "selector": {"app": "next-victoriametrics-vmstorage"}}}))
+
+(build / 'vmselect_deploy.yaml').write_text(
+    toJson({
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+            "name": "next-victoriametrics-vmselect"
+        },
+        "spec": {
+            "replicas": 1,
+            "strategy": {
+                "type": "Recreate"
+            },
+            "selector": {
+                "matchLabels": {
+                    "app": "next-victoriametrics-vmselect"
+                }
+            },
+            "template": {
+                "metadata": {
+                    "labels": {
+                        "app": "next-victoriametrics-vmselect"
+                    },
+                    "annotations": {
+                        "prometheus.io/scrape": "true",
+                        "prometheus.io/path": "/m/metrics",
+                        "prometheus.io/port": "80"
+                    }
+                },
+                "spec": {
+                    "serviceAccountName": "victoriametrics",
+                    "containers": [{
+                        "name": "vmselect",
+                        "image": "docker.io/victoriametrics/vmselect:v1.100.1-cluster",
+                        "imagePullPolicy": "IfNotPresent",
+                        "args": ["-http.pathPrefix=/m/next/vmselect/", "-loggerTimezone=America/Los_Angeles", "-storageNode=next-victoriametrics-vmstorage"],
+                        "ports": [{
+                            "containerPort": 8481
+                        }]
+                    }]
+                }
+            }
+        }
+    }))
+(build / 'vmselect_svc.yaml').write_text(toJson({
+    "apiVersion": "v1",
+    "kind": "Service",
+    "metadata": {
+        "name": "next-victoriametrics-vmselect"
+    },
+    "spec": {
+        "ports": [{
+            "port": 80,
+            "targetPort": 8481
+        }],
+        "selector": {
+            "app": "next-victoriametrics-vmselect"
+        }
+    }
+}
+                                                # in vmui, set server url to
+                                                # https://bigasterisk.com/m/next/vmselect/select/0/prometheus
+                                               ))
+
+(build / 'vmselect_svc.yaml').write_text(
+    toJson({
+        "apiVersion": "networking.k8s.io/v1",
+        "kind": "Ingress",
+        "metadata": {
+            "name": "next-victoriametrics",
+            "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",
+            }
+        },
+        "spec": {
+            "ingressClassName": "pomerium",
+            "rules": [{
+                "host": "bigasterisk.com",
+                "http": {
+                    "paths": [{
+                        "pathType": "Prefix",
+                        "path": "/m/next/vmselect/",
+                        "backend": {
+                            "service": {
+                                "name": "next-victoriametrics-vmselect",
+                                "port": {
+                                    "number": 80
+                                }
+                            }
+                        }
+                    }, {
+                        "pathType": "Prefix",
+                        "path": "/m/next/vmagent/",
+                        "backend": {
+                            "service": {
+                                "name": "next-victoriametrics-vmagent",
+                                "port": {
+                                    "number": 80
+                                }
+                            }
+                        }
+                    }, {
+                        "pathType": "Prefix",
+                        "path": "/m/next/vmselect/",
+                        "backend": {
+                            "service": {
+                                "name": "next-victoriametrics-vmselect",
+                                "port": {
+                                    "number": 80
+                                }
+                            }
+                        }
+                    }]
+                }
+            }],
+            "tls": [{
+                "hosts": ["bigasterisk.com"],
+                "secretName": "bigasterisk.com-tls"
+            }]
+        }
+    }))