是否可以在两个应用程序(每个使用一个吊舱)之间共享一个持久性卷索赔(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