是否可以在兩個應用程序(每個使用一個吊艙)之間共享一個持久性卷索賠(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]
項我想:
- 打開MySQL的應用程序,然後再嘗試打開PHP應用程序
- 發現php應用程序無法啓動
- 關閉這兩個應用程序
- 先打開PHP應用程序,然後嘗試打開MySQL應用程序。
- 發現MySQL的應用程序無法啓動
奇怪的是,事件日誌從來沒有說,它不能用於MySQL的應用程序安裝量。
要安裝的其餘volumen是default-token-xxxxx或volume-959bo(PHP應用程序中的卷名稱),但從來沒有mysql-data(MySQL應用程序中的卷名稱)。
他們是在同一個命名空間中的許多項目都做到了這一點?你應該可以做到這一點。事件日誌中的任何內容? – user2983542
他們肯定在相同的名字空間。 –
看起來沒問題,從'oc獲取事件'和底層存儲類型是什麼? – user2983542