2つのアプリケーション(それぞれポッドを使用)間で単一の永続ボリュームクレーム(PVC)を共有できますか?Apps間のEBSボリュームに対する永続ボリュームクレームを共有できません
私は:Share persistent volume claims amongst containers in Kubernetes/OpenShiftを読みましたが、答えが得られませんでした。
同じプロジェクト内にPHPアプリケーションとMySQLアプリケーション(永続ストレージあり)を追加しようとしました。元の永続ボリューム(PV)を削除し、読み取り、書き込み、多数のモードで新しいボリュームを作成しました。私はMySQLデータベースのrootパスワードを設定し、データベースは動作します。
次に、別のサブパスを持つ同じ永続ボリュームクレームを使用して、PHPアプリケーションにストレージを追加します。私は両方のアプリをオンにすることができないことがわかった。私が1つをオンにした後、次のものをオンにしようとすると、コンテナを作成することに固執します。
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: {}
ボリュームが名前をマウントが異なっています。しかし、それは2つのポッドがPVCを共有することはできません。または、同時に両方のボリュームを同時にマウントできないという問題がありますか?ボリュームをマウントできない場合、ポッドが起動せず、ログを取得できないため、/ devに終了ログを取得できません。
PVCの.yaml(oc get pvc -o yaml
)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]
から
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: ""
不審なエントリ私がしようとした:最初のMySQLアプリの
- ターンをした後にしてみてくださいPHPアプリケーションを有効にする
- PHPアプリケーションが起動できませんでした。
- 両方のアプリケーションをオフにします。
- MySQLアプリケーションをオンにしようとします。
- たMySQLのアプリが
を開始することはできません奇妙なことは、イベントログが、それはMySQLのアプリのためにボリュームをマウントすることができないと言うことはありませんということです。
残りのボリュームは、default-token-xxxxxまたはvolume-959bo(PHPアプリケーションのボリューム名)ですが、mysql-data(MySQLアプリケーションのボリューム名)ではありません。
をサポートしていないが、彼らは同じ名前空間にありますか?あなたはこれを行うことができるはずです。イベントログには何もありませんか? – user2983542
彼らは確かに同じ名前空間にあります。 –
'' oc get events'からの何か、そして基礎となるストレージタイプは何ですか? – user2983542