apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: vmcluster-storage
parameters:
  kind: Managed
  fsType: ext4
  skuName: PremiumV2_LRS
  DiskIOPSReadWrite: "3000"
  DiskMBpsReadWrite: "125"
provisioner: disk.csi.azure.com
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    azure.workload.identity/client-id: TMPL_VMCLUSTER_ROLE
  name: vmcluster-vmcluster
  namespace: observability
---
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMCluster
metadata:
  name: vmcluster
  namespace: observability
spec:
  replicationFactor: 2
  retentionPeriod: "1"
  vminsert:
    extraArgs:
      maxLabelsPerTimeseries: "100"
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/name
                    operator: In
                    values:
                      - vminsert
              topologyKey: kubernetes.io/hostname
            weight: 3
    image: {}
    podMetadata:
      labels:
        owner: infra
    replicaCount: 2
    nodeSelector:
      node_type: worker
  vmselect:
    persistentVolumeClaimRetentionPolicy:
      whenDeleted: Delete
      whenScaled: Delete
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/name
                    operator: In
                    values:
                      - vmselect
              topologyKey: kubernetes.io/hostname
            weight: 2
    cacheMountPath: /select-cache
    image: {}
    podMetadata:
      labels:
        owner: infra
    replicaCount: 2
    resources:
      requests:
        cpu: "0.05"
        memory: 64Mi
      limits:
        cpu: "0.2"
        memory: 256Mi
    storage:
      volumeClaimTemplate:
        metadata: {}
        spec:
          resources:
            requests:
              storage: 10Gi
        status: {}
    nodeSelector:
      node_type: worker
  vmstorage:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/name
                    operator: In
                    values:
                      - vmstorage
              topologyKey: kubernetes.io/hostname
            weight: 1
    image: {}
    podMetadata:
      labels:
        owner: infra
        azure.workload.identity/use: "true"
    replicaCount: 2
    resources:
      requests:
        cpu: "0.5"
        memory: 2Gi
      limits:
        cpu: "1"
        memory: 4Gi
    storage:
      volumeClaimTemplate:
        metadata: {}
        spec:
          storageClassName: vmcluster-storage
          resources:
            requests:
              storage: 10Gi
        status: {}
    storageDataPath: /vm-data
    nodeSelector:
      node_type: worker
    containers:
      - name: vmbackuper
        image: o11ydeveastus.azurecr.io/observability-regional-server/vmbackup:v3-base-1.102.1
        imagePullPolicy: Always
        serviceAccount: vmcluster-vmcluster
        serviceAccountName: vmcluster-vmcluster
        volumeMounts:
          - mountPath: /vm-data
            name: vmstorage-db
        resources:
          requests:
            cpu: "0.05"
            memory: 32Mi
          limits:
            cpu: "0.5"
            memory: 512Mi
        command:
          - /usr/local/bin/entrypoint.sh
        args:
          - -storageDataPath=/vm-data
          - -snapshot.createURL=http://localhost:8482/snapshot/create
          - -dst=azblob://TMPL_VMCLUSTER_BUCKET_NAME/1/vmcluster/${MY_POD_NAME}
          - -maxBytesPerSecond=52428800
        env:
          - name: MY_POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: AZURE_STORAGE_ACCOUNT_NAME
            value: TMPL_STORAGE_ACCOUNT_NAME
          - name: AZURE_USE_DEFAULT_CREDENTIAL
            value: "true"
