egt*_*egt 8 mount kubernetes mounted-volumes persistent-volumes persistent-volume-claims
我的 Pod 声明了两个不同的卷。
我使用一些定义模板,并且根据某些情况的环境,我想对两个卷重复使用相同的声明。
这会导致错误:
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]
Run Code Online (Sandbox Code Playgroud)
这是一个简化的 pod 定义:
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
Run Code Online (Sandbox Code Playgroud)
那么为什么它不起作用呢?
为了回答您的问题“是否可以在多个 Pod 中使用相同的声明?”,让我们看一下不同的声明附加访问模式:
\n\n当您使用默认设置创建 PVC 时,您将使用附加访问模式创建一个持久卷和位于其之上的声明ReadWriteOnce。
\n\n\nReadWriteOnce \xe2\x80\x93 该卷可以由单个节点以读写方式挂载
\n
所以这个声明只能挂载在同一节点的pod上。有一种解决方法可以将此卷安装到多个 Pod 上。一种是将所有 Pod 安排在同一节点上,这从技术上讲违背了使用容器编排的目的。这可以通过将 pod 分配给节点来实现。阅读链接的文档了解详细信息。
\n\n另一种方法是使用磁盘持久卷/NFS。根据您使用的云提供商,您可以使用不同的文件系统配置程序。
\n\n这样您就可以将访问模式更改为ReadWriteMany:
\n\n\nReadWriteMany \xe2\x80\x93 该卷可以被许多节点以读写方式挂载
\n
使用此访问策略,您可以将卷挂载到集群中的多个 Pod 上,无论它们运行在哪个节点上。
\n小智 3
根据文档:“一旦绑定,PersistentVolumeClaim 绑定就是独占的,无论它们如何绑定。PVC 到 PV 的绑定是一对一的映射。” https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding 这有意义吗?
| 归档时间: |
|
| 查看次数: |
5690 次 |
| 最近记录: |