2016-10-28 30 views
2

作为PetSet定义的一部分,volumeClainTemplates是为Kubernetes定义的,以动态生成持久性体积声明。例如:如何让Kubernetes PetSet使用现有的持久卷?

volumeClaimTemplates: 
    - metadata: 
     name: datadir 
     annotations: 
     volume.alpha.kubernetes.io/storage-class: anything 
    spec: 
     accessModes: [ "ReadWriteOnce" ] 
     resources: 
     requests: 
      storage: 24Gi 

不过,我已经拥有了几个持久卷的定义:

#kubectl get pv  
NAME  CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM     REASON AGE 
pv-1-rw 24Gi  RWO   Retain   Bound  rnd/pvc-1-rw    1h 
pv-2-rw 24Gi  RWO   Retain   Bound  rnd/pvc-2-rw    6d 
pv-3-rw 24Gi  RWO   Retain   Bound  rnd/pvc-3-rw    6d 
... 

我想Kubernetes从现有的选择持久卷,而不是动态地创建新的。

我正在使用Kubernetes 1.4.3。有谁知道这是怎么做到的吗?

回答

3

volumeClaimTemplates是一个数组PersistentVolumeClaim。您可以尝试使用他们和selector标签现有卷以某种方式来定义,即:

kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: pv0001 
    labels: 
    foo: foo 
    bar: bar 
spec: 
    accessModes: 
    - ReadWriteOnce 
    capacity: 
    storage: 5Gi 
    hostPath: 
    path: /data/pv0001/ 
--- 
kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: pv0002 
    labels: 
    foo: foo 
    bar: bar 
spec: 
    accessModes: 
    - ReadWriteOnce 
    capacity: 
    storage: 5Gi 
    hostPath: 
    path: /data/pv0002/ 
--- 
kind: Service 
apiVersion: v1 
metadata: 
    name: nginx 
    labels: 
    app: nginx 
spec: 
    ports: 
    - port: 80 
    selector: 
    app: nginx 
--- 
kind: PetSet 
apiVersion: apps/v1alpha1 
metadata: 
    name: nginx 
spec: 
    serviceName: nginx 
    template: 
    metadata: 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginx 
      image: gcr.io/google_containers/nginx-slim:0.8 
      ports: 
      - containerPort: 80 
      volumeMounts: 
      - name: html 
       mountPath: /usr/share/nginx/html 
    volumeClaimTemplates: 
    - metadata: 
     name: html 
     spec: 
     accessModes: 
      - ReadWriteOnce 
     resources: 
      requests: 
      storage: 5Gi 
     selector: 
      matchLabels: 
      foo: foo 
      bar: bar 

当然,卷必须是可用的边界。

$ kubectl get pvc html-nginx-0 
NAME   STATUS VOLUME CAPACITY ACCESSMODES AGE 
html-nginx-0 Bound  pv0002 5Gi  RWO   1m 
$ kubectl get pv 
NAME  CAPACITY ACCESSMODES RECLAIMPOLICY STATUS  CLAIM     REASON AGE 
pv0001 5Gi  RWO   Retain   Available         2m 
pv0002 5Gi  RWO   Retain   Bound  default/html-nginx-0    2m 
+0

我试过这个,它为我工作k8s v1.4.4。我必须创建一个带有标签的PV,以便稍后用于petset中的选择器。 PVC由petset自动创建。 –

相关问题