apiVersion: v1
kind: ConfigMap
metadata:
  name: as-prometheus-config
  namespace: tiflash-autoscale
data:
  prometheus.yml: |
    global:
      scrape_interval: 10s
      evaluation_interval: 5s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'kube_sd'
        scheme: https
        # scheme: http
        metrics_path: /metrics/cadvisor
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels:  ["__meta_kubernetes_node_label_tiflash_used_for_compute"]
            action: keep
            regex: 'true'
          - action: labelmap
            regex: __meta_kubernetes_node_label_(.+)
          - target_label: __address__
            replacement: kubernetes.default.svc:443
          - source_labels: [__meta_kubernetes_node_name]
            target_label: __metrics_path__
            replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
        # - source_labels: [__meta_kubernetes_node_name]
        #   target_label: __param_node
        #   replacement: ${1}
      - job_name: 'kube_sd_with_cluster_label'
        #  scheme: https
        scheme: http
        metrics_path: /metrics/cadvisor
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels:  ["__meta_kubernetes_node_label_tiflash_used_for_compute"]
            action: keep
            regex: 'true'
          - action: labelmap
            regex: __meta_kubernetes_node_label_(.+)
          - target_label: __address__
            #     replacement: kubernetes.default.svc:443
            replacement: autoscale.tiflash-autoscale.svc.cluster.local:8081
          - source_labels: [__meta_kubernetes_node_name]
            target_label: __metrics_path__
            #     replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
            replacement: /metrics #?node=${1}
          - source_labels: [__meta_kubernetes_node_name]
            target_label: __param_node
            replacement: ${1}

      - job_name: 'kube_sd_tiflash_proc'
        kubernetes_sd_configs:
          - role: pod
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_name]
            action: replace
            target_label: pod
          - source_labels:  ["__meta_kubernetes_pod_label_app"]
            regex: readnode
            action: keep
          - action: labelmap
            regex: __meta_kubernetes_pod_label_(.+)
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
            action: replace
            target_label: prom_io_path
          - source_labels: [__address__]
            action: replace
            regex: ([^:]+)(?::\d+)?
            replacement: $1:8234
            target_label: __address__
          - source_labels: [__address__]
            action: replace
            target_label: addr
          - target_label: __metrics_path__
            replacement: /metrics
          - source_labels: [__metrics_path__]
            action: replace
            target_label: mpath
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-tiflash-autoscale-prom
  namespace: tiflash-autoscale
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 2Gi
  hostPath:
    # make sure this directory exists!!!
    path: /tmp/pv-tiflash-autoscale-prom
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-tiflash-autoscale-prom
  namespace: tiflash-autoscale
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  volumeName: pv-tiflash-autoscale-prom
---
apiVersion: v1
kind: "Service"
metadata:
  name: as-prometheus
  namespace: tiflash-autoscale
  labels:
    name: as-prometheus
    app.kubernetes.io/component: tiflash-autoscale
spec:
  ports:
    - name: as-prometheus
      protocol: TCP
      port: 16292
      targetPort: 16292
  selector:
    app: as-prometheus
  # type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: tiflash-autoscale
  labels:
    name: as-prometheus
    app.kubernetes.io/component: tiflash-autoscale
  name: as-prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: as-prometheus # has to match .spec.template.metadata.labels
  template:
    metadata:
      labels:
        app: as-prometheus
        app.kubernetes.io/component: tiflash-autoscale
    spec:
      affinity:
        nodeAffinity:  ##serverless speical!!!
          requiredDuringSchedulingIgnoredDuringExecution: ##serverless speical!!!
            nodeSelectorTerms:
              - matchExpressions:
                  - key: tiflash.used-for-compute
                    operator: NotIn
                    values:
                      - "true"
      initContainers:
        - name: prometheus-data-permission-fix
          image: busybox
          command: ["/bin/chmod","-R","777", "/prometheus"]
          volumeMounts:
            - name: prom-main-data
              mountPath: "/prometheus"
      containers:
        - name: prometheus
          image: prom/prometheus:v2.40.7
          command:
            - "/bin/sh"
            - "-c"
            - |
              mkdir -p /prometheus/data && touch /prometheus/data/queries.active
              exec /bin/prometheus --config.file=/etc/prometheus/prometheus.yml --web.listen-address=:16292 --storage.tsdb.retention.size=15GB
          ports:
            - containerPort: 16292
              protocol: TCP
          volumeMounts:
            - mountPath: "/etc/prometheus"
              name: as-prometheus-config
            - mountPath: "/prometheus/"
              name: prom-main-data
      volumes:
        - name: as-prometheus-config
          configMap:
            name: as-prometheus-config
        - name: prom-main-data
          persistentVolumeClaim:
            claimName: pvc-tiflash-autoscale-prom
