我的吊舱声明了两个不同的卷。
我使用一些定义模板,并在某些情况下依赖于环境,因此我想对两个卷使用相同的声明。
这会导致错误
Unable to mount volumes for pod "task-pv-pod_<...>": timeout expired waiting for volumes to attach/mount for pod "<...>"/"task-pv-pod". list of unattached/unmounted volumes=[task-pv-storage1]
这是简化的广告连播定义:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage1
persistentVolumeClaim:
claimName: task-pv-claim
- name: task-pv-storage2
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage1
- mountPath: "/usr/share/nginx/something-else"
name: task-pv-storage2
那为什么不起作用?
答案 0 :(得分:2)
要回答您的问题“可以在多个吊舱中使用同一声明吗?”,让我们看一下不同的声明附加访问模式:
使用默认设置创建PVC时,将使用附加访问模式ReadWriteOnce
创建一个持久卷和一个位于其上方的声明。
ReadWriteOnce –该卷可以由单个节点以读写方式安装
因此,此声明只能安装在同一节点上的Pod上。有一种解决方法,可以将该卷安装到多个Pod上。一种是将所有Pod安排在同一节点上,这在技术上违反了使用容器编排的目的。这可以通过assigning pods to nodes来实现。阅读链接的文档以了解详细信息。
另一种方法是使用磁盘持久卷/ NFS。根据您使用的云提供商,可以使用不同的文件系统配置程序。
通过这种方式,您可以将访问模式更改为ReadWriteMany
:
ReadWriteMany –该卷可以被许多节点以读写方式装入
使用此访问策略,您可以将卷安装到群集中的多个Pod上,而不管它们在哪个节点上运行。
答案 1 :(得分:0)
根据文档:“一旦绑定,PersistentVolumeClaim绑定将是排他的,无论它们如何绑定。PVC与PV的绑定都是一对一的映射。” https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding 有道理吗?