我创建了一个简单的本地存储卷。像这样的东西:
apiVersion: v1
kind: PersistentVolume
metadata:
name: vol1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /srv/volumes/vol1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- my-node
我创造了一个主张:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage:1Gi
由于未知原因,他们没有得到匹配。我究竟做错了什么?
您应该在PVC中指定volumeName
以将其专门绑定到您刚刚创建的PV,如下所示:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeName: "vol1"
resources:
requests:
storage:1Gi
此外,如果您在PVC中指定storageClassName
,您的PVC也将绑定到符合该规范的PV(但如果该存储的PV超过1,则不保证它将绑定到您的“vol1”PV类)。
希望这可以帮助!
关于本地存储,值得注意的是:
使用本地存储将您的应用程序绑定到该特定节点,使您的应用程序更难以安排。如果该节点或本地卷遇到故障并且无法访问,则该窗格也将变得不可访问。此外,许多云提供商不为本地存储提供广泛的数据持久性保证,因此您可能会在某些情况下丢失所有数据。
这是为了Kubernetes 1.10。在Kubernetes 1.14当地的持续量成为GA。
您发布了一个用户需要的答案。只是为了澄清用户的意思是消费者,如pod,部署,statefullset等。因此,仅使用简单的pod定义将使您的PV绑定:
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
现在,当你删除pod并尝试运行另一个pod时会发生问题。在这种情况下,如果您或其他人寻求解决方案,则已在此GitHub issue中进行了描述。
希望这可以解决问题。
我想到了。我只需要一个用户。只要我有一个用户,一切都很完美。