---
apiVersion: v1
kind: Secret
metadata:
  name: hashring
  namespace: thanos
stringData:
  hashring.json: |-
    [
        {
            "endpoints": [
                "receiver-store-1.thanos.svc.cluster.local:10907",
                "receiver-store-2.thanos.svc.cluster.local:10907"
            ]
        }
    ]
---
apiVersion: v1
kind: Service
metadata:
  name: receiver-store-1
  namespace: thanos
spec:
  type: ClusterIP
  ports:
    - port: 10907
      targetPort: grpc
      protocol: TCP
      name: grpc
  selector:
    app.kubernetes.io/name: receiver
    app.kubernetes.io/instance: receiver-1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: receiver-1
  namespace: thanos
spec:
  replicas: 1
  serviceName: receiver
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: receiver
      app.kubernetes.io/instance: receiver-1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: receiver
        app.kubernetes.io/instance: receiver-1
    spec:
      serviceAccount: thanos
      securityContext:
        fsGroup: 1001
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app.kubernetes.io/name
                      operator: In
                      values:
                        - receiver
                topologyKey: kubernetes.io/hostname
              weight: 1
      initContainers:
        - name: init-chmod-data
          image: docker.io/bitnami/minideb:buster
          imagePullPolicy: Always
          command:
            - sh
            - -c
            - |
              mkdir -p /data
              chown -R "1001:1001" /data
          securityContext:
            runAsUser: 0
          volumeMounts:
            - name: data
              mountPath: /data
      containers:
        - name: receiver
          image: quay.io/thanos/thanos:v0.37.2
          imagePullPolicy: IfNotPresent
          securityContext:
            runAsUser: 1001
          args:
            - receive
            - --tsdb.path=/data
            - --tsdb.retention=15d
            - --log.level=info
            - --grpc-address=0.0.0.0:10907
            - --http-address=0.0.0.0:10909
            - --receive.replication-factor=1
            - --label
            - receive_replica="0"
            - --label
            - receive_cluster="main"
            - --receive.tenant-label-name
            - yolokube
            - --objstore.config-file=/conf/objstore.yml
            - --remote-write.address=0.0.0.0:10908
            - --receive.hashrings-algorithm=ketama
            - --receive.hashrings-file=/conf/hashring.json
            - --receive.local-endpoint=receiver-store-1.thanos.svc.cluster.local:10907
          ports:
            - name: http
              containerPort: 10909
              protocol: TCP
            - name: grpc
              containerPort: 10907
              protocol: TCP
            - name: remote-write
              containerPort: 10908
              protocol: TCP
          livenessProbe:
            failureThreshold: 6
            httpGet:
              path: /-/healthy
              port: http
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          readinessProbe:
            failureThreshold: 6
            httpGet:
              path: /-/ready
              port: http
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          resources:
            requests:
              cpu: 1000m
              memory: 512Mi
            limits:
              cpu: 3000m
              memory: 6Gi
          volumeMounts:
            - name: objstore
              mountPath: /conf/objstore.yml
              subPath: objstore.yml
            - name: data
              mountPath: /data
            - name: hashring
              mountPath: /conf/hashring.json
              subPath: hashring.json
      volumes:
        - name: objstore
          secret:
            secretName: objstore
        - name: hashring
          secret:
            secretName: hashring
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ReadWriteOnce]
        resources:
          requests:
            storage: 40Gi
---
apiVersion: v1
kind: Service
metadata:
  name: receiver-store-2
  namespace: thanos
spec:
  type: ClusterIP
  ports:
    - port: 10907
      targetPort: grpc
      protocol: TCP
      name: grpc
  selector:
    app.kubernetes.io/name: receiver
    app.kubernetes.io/instance: receiver-2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: receiver-2
  namespace: thanos
spec:
  replicas: 1
  serviceName: receiver
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: receiver
      app.kubernetes.io/instance: receiver-2
  template:
    metadata:
      labels:
        app.kubernetes.io/name: receiver
        app.kubernetes.io/instance: receiver-2
    spec:
      serviceAccount: thanos
      securityContext:
        fsGroup: 1001
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app.kubernetes.io/name
                      operator: In
                      values:
                        - receiver
                topologyKey: kubernetes.io/hostname
              weight: 1
      initContainers:
        - name: init-chmod-data
          image: docker.io/bitnami/minideb:buster
          imagePullPolicy: Always
          command:
            - sh
            - -c
            - |
              mkdir -p /data
              chown -R "1001:1001" /data
          securityContext:
            runAsUser: 0
          volumeMounts:
            - name: data
              mountPath: /data
      containers:
        - name: receiver
          image: quay.io/thanos/thanos:v0.37.2
          imagePullPolicy: IfNotPresent
          securityContext:
            runAsUser: 1001
          args:
            - receive
            - --tsdb.path=/data
            - --tsdb.retention=15d
            - --log.level=info
            - --grpc-address=0.0.0.0:10907
            - --http-address=0.0.0.0:10909
            - --receive.replication-factor=1
            - --label
            - receive_replica="0"
            - --label
            - receive_cluster="main"
            - --receive.tenant-label-name
            - yolokube
            - --objstore.config-file=/conf/objstore.yml
            - --remote-write.address=0.0.0.0:10908
            - --receive.hashrings-algorithm=ketama
            - --receive.hashrings-file=/conf/hashring.json
            - --receive.local-endpoint=receiver-store-2.thanos.svc.cluster.local:10907
          ports:
            - name: http
              containerPort: 10909
              protocol: TCP
            - name: grpc
              containerPort: 10907
              protocol: TCP
            - name: remote-write
              containerPort: 10908
              protocol: TCP
          livenessProbe:
            failureThreshold: 6
            httpGet:
              path: /-/healthy
              port: http
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          readinessProbe:
            failureThreshold: 6
            httpGet:
              path: /-/ready
              port: http
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          resources:
            requests:
              cpu: 1000m
              memory: 512Mi
            limits:
              cpu: 3000m
              memory: 6Gi
          volumeMounts:
            - name: objstore
              mountPath: /conf/objstore.yml
              subPath: objstore.yml
            - name: data
              mountPath: /data
            - name: hashring
              mountPath: /conf/hashring.json
              subPath: hashring.json
      volumes:
        - name: objstore
          secret:
            secretName: objstore
        - name: hashring
          secret:
            secretName: hashring
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ReadWriteOnce]
        resources:
          requests:
            storage: 40Gi
---
apiVersion: v1
kind: Service
metadata:
  name: receiver-write
  namespace: thanos
spec:
  type: ClusterIP
  ports:
    - port: 10908
      targetPort: remote-write
      protocol: TCP
      name: remote-write
  selector:
    app.kubernetes.io/name: receiver