3

我有一个由 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

索赔定义如下:

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 规范的 PersistentVolume 中的可用卷。所以这就是我的问题:

同一 POD 的不同实例可以使用相同的 PersistentVolumeClaim 连接到不同的 PersistentVolume 吗?或者声明一旦创建就绑定到一个且仅一个卷,并且不能绑定到任何其他卷?

如果正确的答案是第二个,如何在部署时将 POD 动态绑定到 PersistentVolume(从一组中选择)而不为每个 POD 创建一个声明,从而避免为我需要连接的每个卷创建一个特定的 POD至?

4

1 回答 1

6

APersistentVolumeClaim保留满足其请求的特定存储实例。PersistentVolumeClaim在多个中使用相同的Pods将尝试PersistentVolume在每个中使用相同的边界Pods,这在 a 的情况下是不可能的gcePersistentDisk

尝试PersistentVolumClaim为每个Pod.

Persistent Volumes 文档生命周期部分提供了一个很好的概述。

于 2016-08-29T18:29:25.577 回答