changeset 55:24f4ec319f98

yaml to py
author drewp@bigasterisk.com
date Fri, 26 Apr 2024 15:55:25 -0700
parents 21185db8a52e
children a72c47973aa4
files next/create_all.py next/ingress.yaml next/skaffold.yaml next/vmagent.yaml next/vminsert.yaml next/vmselect.yaml next/vmstorage.yaml next/vmui.yaml next/volumes.yaml
diffstat 9 files changed, 337 insertions(+), 298 deletions(-) [+]
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"
+            }]
+        }
+    }))
--- a/next/ingress.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-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"
-    ingress.pomerium.io/policy: |
-      allow:
-        or: 
-          - { email: { is: "drewpca@gmail.com" }}
-          - { email: { is: "kelsimp@gmail.com" }}
-spec:
-  ingressClassName: pomerium
-  rules:
-    - host: "bigasterisk.com"
-      http:
-        paths:
-          - pathType: Prefix
-            path: /m/next/vmselect/
-            backend: { service: { name: next-victoriametrics-vmselect, port: { number: 80 } } }
-  tls:
-    - hosts: [bigasterisk.com]
-      secretName: bigasterisk.com-tls
--- a/next/skaffold.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ b/next/skaffold.yaml	Fri Apr 26 15:55:25 2024 -0700
@@ -4,11 +4,6 @@
   name: victoriametrics
 manifests:
   rawYaml:
-    - volumes.yaml
-    - vmagent.yaml
-    - vminsert.yaml
-    - vmstorage.yaml
-    - vmselect.yaml
-    - ingress.yaml
+    - build/*.yaml
 deploy:
   kubectl: {}
--- a/next/vmagent.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-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
-          # https://hub.docker.com/r/victoriametrics/
-          image: docker.io/victoriametrics/vmagent:v1.100.1
-          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" }
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-vmagent
-spec:
-  ports:
-    - port: 80
-      targetPort: 8429
-  selector:
-    app: next-victoriametrics-vmagent
--- a/next/vminsert.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-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
-          # https://hub.docker.com/r/victoriametrics/victoria-metrics/tags also check vmalert.yaml
-          image: docker.io/victoriametrics/vminsert:v1.100.1-cluster
-          args:
-            - -http.pathPrefix=/m/next/vminsert/
-            - -loggerTimezone=America/Los_Angeles
-            # - -storageNode=http://next-victoriametrics-vmstorage/m/vmstorage/api/v1/write
-            - -storageNode=next-victoriametrics-vmstorage-write
-          ports:
-            - containerPort: 8480
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-vminsert
-spec:
-  ports:
-    - port: 80
-      targetPort: 8480
-  selector:
-    app: next-victoriametrics-vminsert
--- a/next/vmselect.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-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
-          # https://hub.docker.com/r/victoriametrics/victoria-metrics/tags also check vmalert.yaml
-          image: docker.io/victoriametrics/vmselect:v1.100.1-cluster
-          args:
-            - -http.pathPrefix=/m/next/vmselect/
-            - -loggerTimezone=America/Los_Angeles
-            - -storageNode=next-victoriametrics-vmstorage
-          ports:
-            - containerPort: 8481
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-vmselect
-spec:
-  ports:
-    - port: 80
-      targetPort: 8481
-  selector:
-    app: next-victoriametrics-vmselect
-#http://10.43.252.8/select/0/prometheus
-# curl 'http://10.43.252.8/select/0/prometheus/api/v1/query_range?query=house_power_w&start=1713981843.549&end=1713983746.924&step=4s'
--- a/next/vmstorage.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-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
-          # https://hub.docker.com/r/victoriametrics/victoria-metrics/tags also check vmalert.yaml
-          image: docker.io/victoriametrics/vmstorage:v1.100.1-cluster
-          args:
-            - -http.pathPrefix=/m/next/vmstorage/
-            - -loggerTimezone=America/Los_Angeles
-            - -retentionPeriod=10y
-            - -storageDataPath=/data
-          ports:
-            - containerPort: 8482 # http?
-            - containerPort: 8400 # vminsert server
-            - containerPort: 8401 # vmselect server
-          volumeMounts:
-            - { name: data, mountPath: /data }
-      affinity:
-        nodeAffinity:
-          requiredDuringSchedulingIgnoredDuringExecution:
-            nodeSelectorTerms:
-              - matchExpressions:
-                  - key: "kubernetes.io/hostname"
-                    operator: In
-                    values: ["ditto"]
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-vmstorage
-spec:
-  ports:
-    - {port: 80, targetPort: 8482 }
-    - {port: 8401, targetPort: 8401 }
-  selector:
-    app: next-victoriametrics-vmstorage
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-vmstorage-write
-spec:
-  ports:
-    - {port: 8400, targetPort: 8400 }
-  selector:
-    app: next-victoriametrics-vmstorage
--- a/next/vmui.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: next-victoriametrics-ui
-spec:
-  replicas: 1
-  strategy: { type: Recreate }
-  selector:  { matchLabels: { app: next-victoriametrics-ui } }
-  template:
-    metadata:
-      labels:
-        app: next-victoriametrics-ui
-      annotations: 
-        prometheus.io/scrape: "true"
-        prometheus.io/path: "/m/metrics"
-        prometheus.io/port: "80"
-    spec:
-      serviceAccountName: victoriametrics
-      containers:
-        - name: vmui
-          # https://hub.docker.com/r/victoriametrics/victoria-metrics/tags also check vmalert.yaml
-          args:
-            - -http.pathPrefix=/m/next/vmui/
-            - -loggerTimezone=America/Los_Angeles
-          ports:
-            - containerPort: 8428
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: next-victoriametrics-ui
-spec:
-  ports:
-    - port: 80
-      targetPort: 8428
-  selector:
-    app: next-victoriametrics-ui
--- a/next/volumes.yaml	Wed Apr 24 12:08:39 2024 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-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
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  name: next-victoriametrics
-spec:
-  storageClassName: ""
-  volumeName: "next-victoriametrics"
-  accessModes:
-    - ReadWriteMany
-  resources:
-    requests:
-      storage: 50Gi