apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/component: database-write-hashring
    app.kubernetes.io/instance: thanos-receiver
    app.kubernetes.io/name: thanos-receiver
    app.kubernetes.io/version: v0.22.0
    controller.receive.thanos.io: thanos-receiver-controller
    controller.receive.thanos.io/hashring: default
  name: thanos-receiver
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/component: database-write-hashring
      app.kubernetes.io/instance: thanos-receiver
      app.kubernetes.io/name: thanos-receiver
      controller.receive.thanos.io/hashring: default
  serviceName: thanos-receiver
  template:
    metadata:
      labels:
        app.kubernetes.io/component: database-write-hashring
        app.kubernetes.io/instance: thanos-receiver
        app.kubernetes.io/name: thanos-receiver
        app.kubernetes.io/version: v0.22.0
        controller.receive.thanos.io/hashring: default
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app.kubernetes.io/name
                      operator: In
                      values:
                        - thanos-receiver
                    - key: app.kubernetes.io/instance
                      operator: In
                      values:
                        - thanos-receiver
                namespaces:
                  - thanos
                topologyKey: kubernetes.io/hostname
              weight: 100
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app.kubernetes.io/name
                      operator: In
                      values:
                        - thanos-receiver
                    - key: app.kubernetes.io/instance
                      operator: In
                      values:
                        - thanos-receiver
                namespaces:
                  - thanos
                topologyKey: topology.kubernetes.io/zone
              weight: 100
      containers:
        - args:
            - receive
            - --log.level=debug
            - --log.format=logfmt
            - --grpc-address=0.0.0.0:10901
            - --http-address=0.0.0.0:10902
            - --remote-write.address=0.0.0.0:19291
            - --receive.replication-factor=1
            - --tsdb.path=/var/thanos/receive
            - --tsdb.retention=15d
            - --label=replica="$(NAME)"
            - --label=receive="true"
            - --receive.local-endpoint=$(NAME).thanos-receiver.$(NAMESPACE).svc.cluster.local:10901
            - |-
              --tracing.config="config":
                "sampler_param": 2
                "sampler_type": "ratelimiting"
                "service_name": "thanos-receiver"
              "type": "JAEGER"
          env:
            - name: NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: HOST_IP_ADDRESS
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
          image: quay.io/thanos/thanos:v0.22.0
          livenessProbe:
            failureThreshold: 8
            httpGet:
              path: /-/healthy
              port: 10902
              scheme: HTTP
            periodSeconds: 30
          name: thanos-receiver
          ports:
            - containerPort: 10901
              name: grpc
            - containerPort: 10902
              name: http
            - containerPort: 19291
              name: remote-write
          readinessProbe:
            failureThreshold: 20
            httpGet:
              path: /-/ready
              port: 10902
              scheme: HTTP
            periodSeconds: 5
          resources:
            limits:
              cpu: 0.42
              memory: 420Mi
            requests:
              cpu: 0.123
              memory: 123Mi
          terminationMessagePolicy: FallbackToLogsOnError
          volumeMounts:
            - mountPath: /var/thanos/receive
              name: data
              readOnly: false
            - mountPath: /var/lib/thanos-receiver
              name: hashring-config
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        fsGroup: 65534
        runAsUser: 65534
      terminationGracePeriodSeconds: 900
      volumes:
        - configMap:
            name: hashring
          name: hashring-config
  volumeClaimTemplates:
    - metadata:
        labels:
          app.kubernetes.io/component: database-write-hashring
          app.kubernetes.io/instance: thanos-receiver
          app.kubernetes.io/name: thanos-receiver
          controller.receive.thanos.io/hashring: default
        name: data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: database-write-hashring
    app.kubernetes.io/instance: thanos-receiver
    app.kubernetes.io/name: thanos-receiver
    app.kubernetes.io/version: v0.22.0
  name: thanos-receiver
spec:
  clusterIP: None
  ports:
    - name: grpc
      port: 10901
      targetPort: 10901
    - name: http
      port: 10902
      targetPort: 10902
    - name: remote-write
      port: 19291
      targetPort: 19291
  selector:
    app.kubernetes.io/component: database-write-hashring
    app.kubernetes.io/instance: thanos-receiver
    app.kubernetes.io/name: thanos-receiver
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: hashring
  labels:
    app.kubernetes.io/name: thanos-receive
data:
  hashrings.json: |
    [
        {
            "hashring": "athena",
            "endpoints": ["thanos-receiver-0.thanos-receiver.default.svc:10901"],
            "tenants": ["athena"]
        }
    ]
