view 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 source

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"
            }]
        }
    }))