PersistentVolumeClaim 可以绑定到多个 PersistentVolumes 吗?
Can a PersistentVolumeClaim bind to multiple PersistentVolumes?
我有一个由 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
定义 "anti-affinity" 端口的技巧确保每个 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
索赔定义如下:
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 使用该声明时,它会找到一个可用的卷来绑定,匹配选择器规则。
换句话说,我对 PersistentVolumeClaims 的解释是 POD 使用声明在一组匹配 PVC 规范的 PersistentVolumes 中搜索可用卷。这就是我的问题:
同一个 PersistentVolumeClaim 是否可以被同一个 POD 的不同实例连接到不同的 PersistentVolumes?或者声明一旦创建就绑定到一个且只有一个卷并且不能绑定到任何其他卷?
如果正确答案是第二个,我如何才能使 POD 在部署时动态绑定到 PersistentVolume(从集合中选择)而不为每个 POD 创建一个声明,从而避免为每个 POD 创建一个特定的 POD我需要连接到的卷?
A PersistentVolumeClaim
保留满足其请求的特定存储实例。在多个 Pods
中使用相同的 PersistentVolumeClaim
将尝试在每个 Pods
中使用相同的边界 PersistentVolume
,这在 [=15] 的情况下是不可能的=].
尝试为每个 Pod
创建一个单独的 PersistentVolumClaim
。
Lifecycle section of the Persistent Volumes doc 提供了很好的概述。
我有一个由 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
定义 "anti-affinity" 端口的技巧确保每个 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
索赔定义如下:
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 使用该声明时,它会找到一个可用的卷来绑定,匹配选择器规则。 换句话说,我对 PersistentVolumeClaims 的解释是 POD 使用声明在一组匹配 PVC 规范的 PersistentVolumes 中搜索可用卷。这就是我的问题:
同一个 PersistentVolumeClaim 是否可以被同一个 POD 的不同实例连接到不同的 PersistentVolumes?或者声明一旦创建就绑定到一个且只有一个卷并且不能绑定到任何其他卷?
如果正确答案是第二个,我如何才能使 POD 在部署时动态绑定到 PersistentVolume(从集合中选择)而不为每个 POD 创建一个声明,从而避免为每个 POD 创建一个特定的 POD我需要连接到的卷?
A PersistentVolumeClaim
保留满足其请求的特定存储实例。在多个 Pods
中使用相同的 PersistentVolumeClaim
将尝试在每个 Pods
中使用相同的边界 PersistentVolume
,这在 [=15] 的情况下是不可能的=].
尝试为每个 Pod
创建一个单独的 PersistentVolumClaim
。
Lifecycle section of the Persistent Volumes doc 提供了很好的概述。