我有一个由 3 个节点组成的 GCE 容器集群。在每个节点上,我都运行一个像这样的 POD:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: test-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: none
track: stable
spec:
containers:
- name: hello
image: gcr.io/persistent-volumes-test/alpine:v1.2
resources:
limits:
cpu: 0.2
memory: "10Mi"
volumeMounts:
- mountPath: "/persistentDisk"
name: persistent-disk
ports:
- containerPort: 65535
name: anti-affinity
hostPort: 65535
volumes:
- name: persistent-disk
persistentVolumeClaim:
claimName: myclaim
定义“反关联”端口的技巧确保每个 POD 在不同的节点上运行。我创建了 3 个这样定义的 PersistentVolume:
kind: PersistentVolume
apiVersion: v1
metadata:
name: persistent-volume-1
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
labels:
release: "dev"
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
pdName: persistent-disk-1
fsType: ext4
他们部署得很好
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
persistent-volume-1 10Gi RWO Released default/myclaim 13h
persistent-volume-2 10Gi RWO Released default/myclaim 5h
persistent-volume-3 10Gi RWO Available 5h
claim 定义如下:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
selector:
matchLabels:
release: "dev"
我注意到,声明仅针对我创建的一个卷,因此,只有我的一个 PODS 可以成功部署。我所期望的是,当 POD 使用该声明时,会找到一个可用的卷来绑定(bind),匹配选择器规则。
换句话说,我对 PersistentVolumeClaims 的解释是,POD 使用声明来搜索一组匹配 PVC 规范的 PersistentVolume 中的可用卷。所以这就是我的问题:
同一 POD 的不同实例可以使用相同的 PersistentVolumeClaim 连接到不同的 PersistentVolume 吗?或者声明一旦创建就绑定(bind)到一个且仅一个卷,并且不能绑定(bind)到任何其他卷?
如果正确的答案是第二个,如何在部署时将 POD 动态绑定(bind)到 PersistentVolume(从一组中选择)而不为每个 POD 创建一个声明,从而避免为我需要连接的每个卷创建一个特定的 POD到?
最佳答案
一个 PersistentVolumeClaim
保留满足其请求的特定存储实例。使用相同的 PersistentVolumeClaim
在多个 Pods
将尝试使用相同的界限 PersistentVolume
在每个 Pods
,这在 gcePersistentDisk
的情况下是不可能的.
尝试创建一个单独的 PersistentVolumClaim
对于每个 Pod
.
Lifecycle Persistent Volumes doc 的部分提供了一个很好的概述。
关于kubernetes - PersistentVolumeClaim 可以绑定(bind)到多个 PersistentVolume 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195493/