2017-07-03 89 views
1

是否可以在兩個應用程序(每個使用一個吊艙)之間共享一個持久性卷索賠(PVC)?無法在應用程序之間爲EBS卷共享持久性卷索賠

我看過:Share persistent volume claims amongst containers in Kubernetes/OpenShift但沒有完全得到答案。

我試圖在同一個項目中添加一個PHP應用程序和MySQL應用程序(使用持久存儲)。刪除原始永久卷(PV)並創建一個新的,具有讀,寫,多模式。我設置MySQL數據庫的根密碼,並且數據庫工作。

然後,我使用具有不同子路徑的相同持久量聲明向PHP應用程序添加存儲。我發現我無法打開這兩個應用程序。打開後,當我嘗試打開下一個時,它會卡在創建容器中。在openshift部署步驟

MySQL的.yaml:

... 
    template: 
    metadata: 
     creationTimestamp: null 
     labels: 
     name: mysql 
    spec: 
     volumes: 
     - name: mysql-data 
      persistentVolumeClaim: 
      claimName: mysql 
     containers: 
     - name: mysql 
     ... 
      volumeMounts: 
      - name: mysql-data 
       mountPath: /var/lib/mysql/data 
       subPath: mysql/data 
      ... 
      terminationMessagePath: /dev/termination-log 
      imagePullPolicy: IfNotPresent 
     restartPolicy: Always 
     terminationGracePeriodSeconds: 30 
     dnsPolicy: ClusterFirst 

PHP .yaml從部署的步驟:

template: 
    metadata: 
     creationTimestamp: null 
     labels: 
     app: wiki2 
     deploymentconfig: wiki2 
    spec: 
     volumes: 
     - name: volume-959bo <<---- 
      persistentVolumeClaim: 
      claimName: mysql 
     containers: 
     - name: wiki2 
      ... 
      volumeMounts: 
      - name: volume-959bo 
       mountPath: /opt/app-root/src/w/images 
       subPath: wiki/images 
      terminationMessagePath: /dev/termination-log 
      imagePullPolicy: Always 
     restartPolicy: Always 
     terminationGracePeriodSeconds: 30 
     dnsPolicy: ClusterFirst 
     securityContext: {} 

卷裝入名稱是不同的。但是這不應該使兩個吊艙不能共享PVC。或者,問題是他們不能同時安裝相同的音量?我無法在/ dev上獲得終止日誌,因爲如果無法掛載該卷,則該pod無法啓動,並且我無法獲取該日誌。

的PVC的.yaml(oc get pvc -o yaml

apiVersion: v1 
items: 
- apiVersion: v1 
    kind: PersistentVolumeClaim 
    metadata: 
    annotations: 
     pv.kubernetes.io/bind-completed: "yes" 
     pv.kubernetes.io/bound-by-controller: "yes" 
     volume.beta.kubernetes.io/storage-class: ebs 
     volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/aws-ebs 
    creationTimestamp: YYYY-MM-DDTHH:MM:SSZ 
    name: mysql 
    namespace: abcdefghi 
    resourceVersion: "123456789" 
    selfLink: /api/v1/namespaces/abcdefghi/persistentvolumeclaims/mysql 
    uid: ________-____-____-____-____________ 

    spec: 
    accessModes: 
    - ReadWriteMany 
    resources: 
     requests: 
     storage: 1Gi 
    volumeName: pvc-________-____-____-____-____________ 
    status: 
    accessModes: 
    - ReadWriteMany 
    capacity: 
     storage: 1Gi 
    phase: Bound 
kind: List 
metadata: {} 
resourceVersion: "" 
selfLink: "" 

可疑從oc get events

Warning FailedMount {controller-manager } 
    Failed to attach volume "pvc-________-____-____-____-____________" 
    on node "ip-172-__-__-___.xx-xxxx-x.compute.internal" 
with: 
    Error attaching EBS volume "vol-000a00a00000000a0" to instance 
    "i-1111b1b11b1111111": VolumeInUse: vol-000a00a00000000a0 is 
    already attached to an instance 

Warning FailedMount {kubelet ip-172-__-__-___.xx-xxxx-x.compute.internal} 
    Unable to mount volumes for pod "the pod for php app": 
    timeout expired waiting for volumes to attach/mount for pod "the pod". 
    list of unattached/unmounted volumes= 
     [volume-959bo default-token-xxxxx] 

項我想:

  1. 打開MySQL的應用程序,然後再嘗試打開PHP應用程序
  2. 發現php應用程序無法啓動
  3. 關閉這兩個應用程序
  4. 先打開PHP應用程序,然後嘗試打開MySQL應用程序。
  5. 發現MySQL的應用程序無法啓動

奇怪的是,事件日誌從來沒有說,它不能用於MySQL的應用程序安裝量。

要安裝的其餘volumen是default-token-xxxxx或volume-959bo(PHP應用程序中的卷名稱),但從來沒有mysql-data(MySQL應用程序中的卷名稱)。

+0

他們是在同一個命名空間中的許多項目都做到了這一點?你應該可以做到這一點。事件日誌中的任何內容? – user2983542

+0

他們肯定在相同的名字空間。 –

+0

看起來沒問題,從'oc獲取事件'和底層存儲類型是什麼? – user2983542

回答

2

所以這個錯誤似乎是由您使用的底層存儲引起的,在這種情況下是EBS。 OpenShift文檔實際上明確指出這是塊存儲的情況,請參閱here

我知道這將NFS和Glusterfs存儲工作,並使用這些存儲類型,但不幸的是,在你的情況下,它不支持

+0

謝謝。我從來沒有想過我自己。 –

+0

很酷,沒問題。記分作爲接受的答案?謝謝 – user2983542