apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cop-worker-sts
spec:
  persistentVolumeClaimRetentionPolicy:
    whenDeleted: Delete
    whenScaled: Delete
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/component: cop-worker-sts
  template:
    metadata:
      annotations:
        cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
        prometheus.io/path: /metrics
        prometheus.io/port: "19000"
        prometheus.io/scrape: "true"
      labels:
        app.kubernetes.io/name: cop-worker
        app.kubernetes.io/component: cop-worker-sts
        zr-evicter.tidbcloud.com/pvc-evictable: "true"
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - preference:
                matchExpressions:
                  - key: serverless.tidbcloud.com/zone
                    operator: In
                    values:
                      - primary
              weight: 100
      nodeSelector:
        serverless.tidbcloud.com/node: burstable
        # eks.amazonaws.com/capacityType: SPOT
      tolerations:
        - effect: NoSchedule
          key: serverless.tidbcloud.com/node
          operator: Equal
          value: burstable
      containers:
        - command:
            - /tikv-worker
            - --config
            - /etc/config/cop-worker.toml
            - --pd-endpoints
            - serverless-cluster-pd.tidb-serverless.svc:2379
          env:
            - name: DFS_PREFIX
              value: S3_PREFIX
            - name: DFS_S3_BUCKET
              value: S3_BUCKET
            - name: DFS_S3_REGION
              value: S3_REGION
            - name: CSE_MASTER_KEY_ID
              value: CSE_MASTER_KEY_ID
            - name: CSE_MASTER_KEY_CIPHER_TEXT
              value: CSE_MASTER_KEY_CIPHER_TEXT
            - name: CSE_MASTER_KEY_VENDOR
              value: CSE_MASTER_KEY_VENDOR
            - name: MALLOC_CONF
              value: prof:true
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 5
            httpGet:
              path: /healthz
              port: 19000
              scheme: HTTP
            initialDelaySeconds: 1
            periodSeconds: 20
            successThreshold: 1
            timeoutSeconds: 10
          readinessProbe:
            httpGet:
              path: /healthz
              port: 19000
              scheme: HTTP
            initialDelaySeconds: 1
            periodSeconds: 5
          name: cop-worker
          resources:
            limits:
              cpu: "2"
              memory: 16Gi
            requests:
              cpu: "2"
              memory: 16Gi
          volumeMounts:
            - name: data0
              mountPath: "/data0"
            - name: config-volume
              mountPath: "/etc/config"
      volumes:
        - name: config-volume
          configMap:
            name: cop-worker-stateful-config
            items:
              - key: cop-worker.toml
                path: cop-worker.toml
      serviceAccount: backup-restore
      serviceAccountName: backup-restore
  volumeClaimTemplates:
    - apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: data0
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 500Gi
        storageClassName: gp3-500
        volumeMode: Filesystem
