如何专门为吊舱创建PV

时间:2019-05-10 07:25:28

标签: kubernetes

我想为Pod动态创建PV和PVC,在其中可以存储一些数据,这些数据将由容器内运行的应用程序生成。我确保每个吊舱上仅运行一个容器。如何使用StatefulSets动态创建PV,而不是由管理员手动创建PV?

我在StatefulSet中使用了volumeClaimTemplate。在minikube中,它为每个吊舱都创建了PV和PVC。但是当我在Kubernetes集群中尝试它时,不知何故它不会创建PV。如果我手动创建PV,则PV和PVC之间会发生界限。但我希望它能够动态发生。

这是YAML文件:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: StatefulSet
metadata:
  name: app-deployment
spec:
  selector:
    matchLabels:
      app: myapp
  serviceName: "app-service"
  replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myrepository:5000/docker/images/app:v0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8082
        volumeMounts:
        - name: jms
          mountPath: /opt/APP/DATA/jms-data
  volumeClaimTemplates:
  - metadata:
      name: jms
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 256Mi
---

kind: Service
apiVersion: v1
metadata:
  name: app-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 8082
    targetPort: 8082
  type: NodePort

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您需要一种机制,管理员无需通过该机制手动为吊舱创建PV。 K8S具有为PV创建存储类的机制(一次性完成)。一旦存储类别由admin定义并标记为默认类别,则无需任何人来创建PV,因为K8S将使用该StorageClass动态创建PV。有关如何定义和使用它的详细信息,请参阅

https://kubernetes.io/docs/concepts/storage/storage-classes/

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

答案 1 :(得分:0)

就像Prateek Jain提到的那样,您需要一个预配器和一个存储类。 它可以与minikube一起使用,并且可以在GKE,EKS,AKS等服务上默认使用。您可以先通过kubectl get storageclass然后通过kubectl describe stroageclass name进行检查。

我认为在您的Kubernetes集群中这是丢失的(例如,对于kubeadm而言)。

在这里您可以再次使用已由P Ekambaram local-PVs链接的链接。您将需要一个外部静态provisioner

  

此处提供以帮助简化本地存储管理   卷已配置。请注意,本地存储配置程序是   与大多数预配器不同,不支持动态   供应。相反,它要求管理员预先配置   每个节点上的本地卷以及是否应该有卷。

您可以阅读有关动态预配置here的更多信息。

问题的解决方案取决于您要使用的卷,供应者或使用托管的Kubernetes引擎(GKE,AKS,EKS)。