Openshift Can';t在应用程序之间共享EBS卷的持久卷声明

Openshift Can';t在应用程序之间共享EBS卷的持久卷声明,openshift,kubernetes,Openshift,Kubernetes,是否可以在两个应用程序(每个应用程序使用一个pod)之间共享一个持久卷声明(PVC) 我读到:但是没有完全得到答案 我试图在同一个项目中添加一个PHP应用程序和一个MySQL应用程序(带有持久存储)。删除了原始的永久卷(PV),并创建了一个具有读、写、多模式的新永久卷。我设置了MySQL数据库的根密码,数据库工作正常 然后,我使用具有不同子路径的相同持久卷声明向PHP应用程序添加存储。我发现我无法同时打开这两个应用程序。在我打开一个之后,当我尝试打开下一个时,它会在创建容器时卡住 openshi

是否可以在两个应用程序(每个应用程序使用一个pod)之间共享一个持久卷声明(PVC)

我读到:但是没有完全得到答案

我试图在同一个项目中添加一个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: {}
来自oc get事件的可疑条目

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应用程序的卷


    要装载的剩余卷要么是default-token-xxxxx,要么是volume-959bo(PHP应用程序中的卷名),而不是mysql数据(mysql应用程序中的卷名)。

    因此错误似乎是由您使用的底层存储引起的,在本例中是
    EBS
    。OpenShift文档实际上明确指出,块存储就是这种情况,请参阅


    我知道这将适用于NFS和Glusterfs存储,并且在许多使用这些存储类型的项目中都这样做了,但不幸的是,在您的情况下,它不受支持

    它们是否在同一名称空间中?你应该能够做到这一点。事件日志中有任何内容吗?它们肯定在相同的名称空间中。看起来正常,
    oc get events
    中的任何内容以及底层存储类型?警告为FailedMount。它说不能将同一卷连接到两个不同的实例。openshift网站现在只允许创建ebs存储…谢谢。我自己永远也不会明白这一点。
    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]