Масштабирование statefulset на основе последнего VolumeSnapshot

Если кто-нибудь знает решения, пожалуйста, помогите мне, как я могу это сделать.
У меня есть «statefulset», внутри которого есть следующие «volumeClaimTemplates»:
Когда я масштабирую количество реплик:
«kubectl scale statefulset --replicas=2 my-statefulset»
новый «PVC» создается из объекта «volumesnapshot», имя которого = «MySnapshot»

        volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      dataSource:
        apiGroup: snapshot.storage.k8s.io
        kind: VolumeSnapshot
        name: MySnapshot
      resources:
        requests:
          storage: 800Gi
      storageClassName: ebs-sc
      volumeMode: Filesystem

Мой вопрос:
можно ли использовать динамическое имя в поле

      volumeClaimTemplates:
  dataSource:
    apiGroup: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    name: ?  

Уточнение:
когда создается новый снимок, измените statefulset и установите volumeClaimTemplates.dataSource.name = new-name
Зачем мне это нужно:
у меня есть cronjob, который автоматически создает снимок с новым именем, например: MySnapshot_1, MySnapshot_2… И мне нужны последние данные в моем «PVC » при создании новой реплики .

1 ответ

https://kyverno.io/ Могу сделать эту работу

      apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: mutate-pvc
spec:
  rules:
    - name: set-name-latest-snapshot
      match:
        any:
        - resources:
            kinds:
            - PersistentVolumeClaim
      context:
      - name: latestSnapshotTime
        apiCall:
          urlPath: "/apis/snapshot.storage.k8s.io/v1/namespaces/{{request.namespace}}/volumesnapshots"
          jmesPath: "items[?status.readyToUse].status.creationTime | sort(@)[-1]" 
      - name: latestSnapshotName
        apiCall:
          urlPath: "/apis/snapshot.storage.k8s.io/v1/namespaces/{{request.namespace}}/volumesnapshots"
          jmesPath: "items[?status.creationTime == '{{latestSnapshotTime}}'][].metadata.name | [0]"
      mutate:
        patchStrategicMerge: 
          spec:
            dataSource:
              name: "{{latestSnapshotName}}"