Kubernetes 如何动态创建持久卷声明?

Kubernetes 如何动态创建持久卷声明?,kubernetes,storage,persistence,kubernetes-pvc,Kubernetes,Storage,Persistence,Kubernetes Pvc,我正在裸机K8s集群上运行我的应用程序,我正在使用一个NFS provisioner,它负责持久卷,我只需要创建一个持久卷声明。我在K8s上也有一个DB(RejectionDB),我可以对它进行集群,这个DB的每个实例都有自己的持久卷声明,并且一切都很好并且正常工作 我的问题是:我是否可以动态创建持久卷声明,这样我就可以像kubectl scale deployment registry--replications=3那样扩展我的数据库,而不需要为每个副本创建持久卷声明 我当前的yaml文件:

我正在裸机K8s集群上运行我的应用程序,我正在使用一个NFS provisioner,它负责持久卷,我只需要创建一个持久卷声明。我在K8s上也有一个DB(RejectionDB),我可以对它进行集群,这个DB的每个实例都有自己的持久卷声明,并且一切都很好并且正常工作

我的问题是:我是否可以动态创建持久卷声明,这样我就可以像
kubectl scale deployment registry--replications=3
那样扩展我的数据库,而不需要为每个副本创建持久卷声明

我当前的yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-slave
  labels:
    io.kompose.service: registry-slave
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: registry-slave
  template: # pod template
    metadata:
      labels:
        app: registry-slave
        io.kompose.service: registry-slave
    spec:
      containers:
      - name: registry-slave
        image: rethinkdb:2.3.6
        command: ["rethinkdb"]
        args:
        - --bind
        - "all"
        - --no-update-check
        - --join
        - "registry:29015"
        - --canonical-address
        - "$(MY_POD_IP):29015"
        volumeMounts:
        - name: rdb-local-data
          mountPath: /rethinkdb_data
        env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
      volumes:
      - name: rdb-local-data
        persistentVolumeClaim:
          claimName: registry-slave-claim
      restartPolicy: Always
持续批量索赔:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: registry-slave-claim
  namespace: {{ .Release.Namespace }}
  annotations:
    volume.beta.kubernetes.io/storage-class: nfs-client
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

部署只允许在所有副本中有一个PersistantVolumeClaim,这是因为部署是为有效的无状态服务而设计的


您应该考虑使用Kubernetes基于模板部署有状态应用程序的方法。StatefulSet可以包括volumeClaimTemplate,其中每个副本创建一个PVC。这将为您的应用程序提供保护,包括防止自动删除。

您可能希望查看而不是部署,因为Statefulset可以使用卷声明模板为每个副本提供PVC。(部署只能有一个PVC用于所有副本)。谢谢,你是对的,请将此作为回答,以便我可以接受。另外,请指向此链接,它正是我问题的答案: