Масштабирование 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}}"