我想为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
答案 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)。